乾貨|EasyMR 基於 Kubernetes 應用的監控實踐
在之前的內容中,我們深入探討了 如何利用 Kubernetes 進行部署。大家已經瞭解到,在 EasyMR 的整體架構中,我們使用 進行節點和服務監控資料的採集、查詢和儲存。同時, 作為強大的視覺化工具,將 Prometheus 中的監控資料以多樣化的方式展示出來。
在本文中,我們將詳細探討在 EasyMR 中如何動態採集 Kubernetes 應用監控資料。
傳統採集方案的痛點
在主機模式下, 使用 Prometheus 監控的配置主要依賴於 static_configs 和 file_sd_configs。因為在這種部署方案下,節點與應用的穩定性較高,涉及到的變更與不確定性較小,除非出現節點當機這樣的極端情況,我們才需要手動去修改對應採集 Job 配置。
但是在雲原生時代的背景下,監控作為 中的關鍵部分,相對於傳統架構下的系統和應用監控發生了一些重大的變化:
· 微服務和 導致監控物件和指標的指數級增加
· 監控物件的生命週期更加短暫,導致監控資料量和複雜度成倍增加
通俗來說,就是我們的 中會有很多 Node/Service/Pod 等資源,這些資源會隨著需求規模的變化而動態變化,同一個應用 Pod 的 IP、名稱也會隨著應用的重啟、滾動更新而發生改變。
所以當 Kubernetes 資源建立或者更新時,如果一個個去修改 Prometheus 中的 Job 任務會是一個非常龐大的工作量,因為你無法判斷 Pod 重啟的時間(Kubernetes 有自己的 scheduler,可能 Pod 當前所在主機 CPU/記憶體/磁碟壓力過大,可能 Pod 達到設定資源限制等等,這些都會導致 Pod 的重新排程)。在這個背景下,我們就需要 Prometheus 擁有 的功能。
Prometheus 服務自動發現
對於上述無法使用靜態採集配置static_configs 和 file_sd_configs 的場景,Prometheus 自身提供了一個解決方案:引入一個 。這個註冊中心掌握著當前所有監控目標的訪問資訊,Prometheus 只需要向它詢問有哪些監控目標即可。Prometheus 查詢到需要監控的 ,然後輪訓這些 Target 獲取監控資料。
Prometheus 支援多種 :檔案、DNS、Consul、Kubernetes、OpenStack、EC2 等,本文以 Kubernetes 服務發現機制為例詳細討論。
在 Kubernetes 下,Prometheus 透過與 Kubernetes API 整合主要支援5種服務發現模式:Node、Service、Pod、Endpoints、Ingress。
不同的服務發現模式適用於不同的場景,例如: 適用於與主機相關的監控資源,如節點中執行的 Kubernetes 元件狀態、節點上執行的容器狀態等;Service 和 Ingress 適用於透過 的場景,如對服務的可用性以及服務質量的監控;Endpoints 和 Pod 均可用於獲取 的監控資料,如監控使用者或者管理員部署的支援 Prometheus 的應用。
EasyMR 對 K8S 應用的監控實踐
Prometheus 使用 來獲取指標,所以對需要監控的目標應用來說需要暴露/metrics 介面。接下來我們從部署 Prometheus 的步驟開始,以採集 MySQL 的監控資訊來具體描述 是如何運用 Prometheus 的服務發現機制的。
建立 Prometheus 配置檔案
Prometheus 自動發現的核心之處在於 relabel_configs 的相關配置,首先是透過 source_labels 配置以 _meta 開頭的這些後設資料標籤,宣告要匹配的資源,然後透過 找到相關的資源物件,最後再對採集過來的指標做二次處理,比如保留、過來、替換等操作。
建立 ServiceAccount/Role/RoleBinding
由於 Prometheus 是需要訪問 Kubernetes 資源的,而且 Kubernetes 有詳細的 ,所以在部署 Prometheus 之前需要建立對應的賬號,併為該賬號賦予對應介面的許可權。出於安全考慮,EasyMR 只需要獲取對應 namespace 的許可權,所以我們不需要全域性的 ClusterRole 許可權。
建立 Prometheus Deployment
由於 Prometheus 是需要儲存資料的,所以事先需要建立對應 PV,官方建議使用 localpv,這裡不做描述。在 Deployment 的配置檔案中我們只需指定 PVC 名稱即可,這裡把關鍵配置展示出來。
部署 MySQL Statefulset、MySQL Exporter、MySQL Service
由於同一個 Pod 是共享網路跟儲存的,所以在部署架構中我們將 作為一個單獨的 Container 與 MySQL 的 Container 部署在同一個 Pod 中,只需要將 MySQL Exporter 的監控埠暴露給 Prometheus 的註冊中心即可,部分重要配置如下:
● MySQL Statefulset
● MySQL Service
在 Service 配置的 annotations 下新增兩個配置:
· prometheus.io/port: 9104
· prometheus.io/scrpae: true
檢視 Prometheus Targets 配置
能看到 Prometheus 已經動態發現了部署上去的 MySQL 服務暴露的監控資料,狀態是 UP,無需手動干預。
檢視 EasyMR Grafana 儀表盤
經過上述操作,我們可以很輕鬆地在 頁面上看到豐富的 MySQL 監控資訊,其餘的服務也可以透過類似的步驟完成。
結語
在雲原生時代, 的組合已經成為了 中不可或缺的一部分,但是怎麼將它們的作用最大化還是需要大家深度去探索。未來 EasyMR 還會在可觀測性的其他領域(logging、tracing)做出自己的探索。
《資料治理行業實踐白皮書》下載地址:
《數棧V6.0產品白皮書》下載地址:
想了解更多有關大資料產品、行業解決方案、客戶案例的朋友,瀏覽袋鼠雲官網: https://www.dtstack.com/?src=szitpub
來自 “ ITPUB部落格 ” ,連結:https://blog.itpub.net/69995740/viewspace-3002479/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 利用 Kubernetes 降本增效?EasyMR 基於 Kubernetes 部署的探索實踐
- 乾貨:如何監控伺服器效能實踐篇伺服器
- Kubernetes監控實踐
- 基於 Prometheus 的監控系統實踐Prometheus
- Kubernetes 叢集和應用監控方案的設計與實踐
- 8月最新基於kubernetes的應用編排實踐
- 乾貨 | 愛奇藝全鏈路自動化監控平臺的探索與實踐
- 3W字乾貨深入分析基於Micrometer和Prometheus實現度量和監控的方案Prometheus
- Kubernetes監控實踐(2):可行監控方案之Prometheus和SensuPrometheus
- 基於WebGL的三維交通監控視覺化技術應用(實踐版) ThingJSWeb視覺化JS
- EasyMR 基於國產化信創的適配實踐技術詳解
- SpringCloud 應用在 Kubernetes 上的最佳實踐 — 線上釋出(可監控)SpringGCCloud
- 基於Prometheus+Grafana監控Laravel+Swoole應用PrometheusGrafanaLaravel
- 容器雲環境,你們如何監控應用執行情況? ---JFrog 雲原生應用監控實踐
- 【乾貨】58集團監控業務實踐:將網站執行資訊透明化網站
- zabbix應用教程:基於Nginx頁面響應的日誌監控用例Nginx
- 乾貨:排程演算法的價值與阿里的應用實踐演算法阿里
- 活動乾貨|基於Docker的DevOps實現Dockerdev
- BizWorks 應用平臺基於 KubeVela 的實踐
- Prometheus監控實戰應用Prometheus
- 乾貨 | 雲解析DNS之網站監控DNS網站
- 基於HTML5實現3D監控應用流動效果HTML3D
- 基於 eBPF 的 Serverless 多語言應用監控能力建設eBPFServer
- Kubernetes Ingress 日誌分析與監控的最佳實踐
- 深入理解Prometheus: Kubernetes環境中的監控實踐Prometheus
- 技術乾貨 | 基於標準 WebRTC 低延遲直播的開源實踐Web
- 乾貨|敏捷實踐重構敏捷
- Kubernetes 部署 Laravel 應用的最佳實踐Laravel
- kubernetes在騰訊遊戲的應用實踐遊戲
- 基於OkHttp的Http監控HTTP
- 基於 eBPF 的 Kubernetes 可觀測實踐eBPF
- 基於Web的Dashboard來完成Kubernetes的圖形化監控和Web
- Spring Boot 揭祕與實戰(九) 應用監控篇 - HTTP 應用監控Spring BootHTTP
- 乾貨 | CDN搭配OSS最佳實踐 ——搭建動靜態分離的應用架構應用架構
- 前端乾貨之JS最佳實踐前端JS
- Spring Boot應用監控實戰Spring Boot
- 乾貨收藏!Calico的BGP RouteReflector策略實踐
- 3-主機監控、應用監控