Kubernetes監控實踐(2):可行監控方案之Prometheus和Sensu
本文介紹兩個可行的K8s監控方案:Prometheus和Sensu。兩個方案都能全面提供系統級的監控資料,幫助開發人員跟蹤K8s關鍵元件的效能、定位故障、接收預警。
擴充閱讀: Kubernetes監控實踐(1):K8s的工作原理與監控實踐
一、K8s監控之Prometheus
1.1 簡介
Prometheus是針對容器和微服務的開源監控預警工具,功能穩健,適用於開發流程中的雲端管理員和開發人員等各個相關方。Prometheus定時聚合配置物件中的指標資料,評估規則表示式,展示結果,傳送預警。
Prometheus不僅能夠監控預定義指標,還能實現多維資料模型,進行深度分析,並針對多個指標建立關聯,從多個角度為開發人員和管理員提供資料支援。
1.2 工作原理
Prometheus是K8s環境的附加層。首次安裝時應定義資料採集引數和資料採集時間間隔。Prometheus既能實時監控K8s節點,也能對監控資料進行定時分析。Prometheus也可以針對節點失效等故障傳送預警。
1.3 Prometheus Operator
很多使用者會混淆controller和operator。K8s Operator是指Controller向K8s API中新增新的物件、配置管理Prometheus等應用的模式。簡而言之,operator是針對特定領域的controller。
PrometheusOperator簡化了Prometheus在K8s中的執行,不需要改變K8s的配置。使用Prometheus Operator可以輕鬆監控K8s的服務。可以透過預定義的.yml檔案執行Prometheus。Prometheus Operator能夠建立、配置並管理K8s上的所有監控例項。部署新應用時,K8s會建立新的pod(容器)。建立完畢後,原有pod會被銷燬。Prometheus持續監控API,如發現不一致,則基於服務或pod變化建立新的Prometheus配置。
1.4 核心元件
作為一款穩健的監控工具,Prometheus從服務上拉取資料,不需要服務主動推送資料。不過Prometheus提供推送入口,但無法拉取資料時可以接受服務推送上來的資料。
此外,Prometheus支援將時間序列與指標名稱和鍵值對關聯起來,簡化了對多雲端的監控。Prometheus不僅監控應用全域性,還能鑽取到微服務層面。使用者可透過查詢功能管理資料,瞭解應用狀況;也可以使用PromQL建立圖表和表格,實現資料視覺化,並根據具體引數生成預警。
Prometheus的Web控制檯展示了所有功能和工具。使用者可透過正規表示式和高階PromQL檢索條件建立資料集和預警。Prometheus還支援外網訪問。
1.5 優勢
Prometheus最大的優勢在於簡單靈活,可以實現監控的多維資料模型。使用者可以輕鬆搭建容器叢集的監控框架,還可以結合Grafana,進一步提高監控資料的視覺化水平。
Prometheus可以透過K8s的本地服務發現配置採集node、pod和服務指標。使用者可直接定義表示式,建立預警,不需要在不同的監控系統中來回切換。
Prometheus的抓取能力能夠整合到K8s、Docker和StatsD等工具中。使用者還可以透過Web GUI配置預警、管理圖表。
不過Prometheus也存在不足:資料模型受限。Prometheus預設的時序資料採集模型有利有弊:一方面,這種模型有助於按照標準格式採集資料;另一方面,標準化資料格式導致資料模型受限。Prometheus透過discovery機制與K8s保持通訊,因此存在延遲。
二、K8s監控之Sensu
2.1 簡介
Sensu是多雲端容器基礎設施監控工具。Sensu agent是跨平臺事件生成器,使用者可透過執行service check監控系統和服務的健康狀況,同時採集分析metrics,不僅提供預警或事件管理功能、監控API、客戶端庫以及多指令碼或程式語言外掛,還支援自定義工作流,豐富了Sensu能力。
Prometheus透過拉取的方式主動抓取資料,而Sensu則採用訊息匯流排的通訊機制,透過釋出/訂閱(Pub/Sub)的方式推送或拉取資料。
2.2 工作原理
Sensu使用本地外掛從StatsD庫、Prometheus exporter、Nagios外掛、SNMP陷阱等主流程式中採集資料。不同於Prometheus等其他監控工具,Sensu開箱即用,支援多雲端環境,使用者配置框架後即可提供高可用性。
Sensu提供event filter、mutator和operator handler,支援建立並自動化模型工作量。這樣,外部監控工具的資料便可與Sensu的監控資料整合,形成基於事件的監控路徑。
2.3 核心元件
Sensu針對K8s容器最佳化了自動發現能力。使用者可針對K8s和Docker等容器環境輕鬆配置監控check和collector,也可以針對K8s所有元件和執行在K8s上的應用配置多個check。
Sensu也支援本地整合和外掛,可以與日誌工具和Prometheus同時使用。使用者可同時執行Sensu和Prometheus,處理不同的資料集。Sensu可以採集StatsD metrics,並將採集結果寫入Prometheus。
Sensu還能在K8s環境中執行。假設一開始將Sensu部署在某個容器中,後來決定將整個應用遷移到其他容器環境中。遷移完成後,Sensu agent依然能夠在新的環境中正常執行,也能被Sensu發現,因為Sensu具備自動發現機制。
2.4 在K8s中的應用
Sensu可擴充套件性強,可隨著部署應用和雲環境的增加不斷擴充套件,提供具體的功能監控服務。Sensu監控物件的數量沒有上限,也不會因為監控物件的增加變得更加複雜。
三、K8s監控之Sensu+Prometheus
同時執行Sensu和Prometheus能夠提高監控的可見性,實現各自功能的優勢互補。
3.1 工作原理
SensuPrometheus Collector是Sensu Check外掛,聚合從Prometheus exporter或Prometheus query API抓取的資料。採集的資料以Influx(預設)、Graphite、JSON格式儲存在STDOUT中。
SensuPrometheus Collector整合了Sensu的工作量自動化能力和Prometheus的資料抓取能力。使用者可根據需求自行設計實現程式碼和預警接收時間。Sensu還可以將採集到的metrics資料儲存到InfluxDB、Graphite和Prometheus等外部時序資料集中。
3.2 安裝Sensu PrometheusCollector
使用者可以透過Sensu的資產索引庫Bonsai發現、下載、共享資產。點選Bonsai資訊頁面的下載按鈕,下載Sensu後端平臺和架構的資產定義。收到check、filter、mutator或handler請求時,Sensu會根據資產定義下載驗證資產。
下載資產定義後,可以透過Sensu的資源管理命令列工具sensuctl進行資產註冊,然後建立監控工作流。
下方是Prometheus collector的資產定義及相應的Linux sensuctl命令:
下方為Prometheus Collector的check例項:
3.3 優勢
同時執行Sensu和Prometheus具有下列優勢:
- 既能監控K8s叢集的健康狀況又能動態監控周邊基礎設施的健康狀況,並採集相關指標。
- 既能實現問題自動發現,又能透過自動化工作流簡化監控流程。
- 同時執行Prometheus和Sensu能夠獲得更多上下文資訊,實現更細粒度的資料抓取分析。
- Sensu採用標準通訊密碼,可透過單個agent安全採集傳輸資料。
- 便於管理配置監控設定。
- 能夠監控整個基礎設施。
四、結論
Sensu能夠監控整個基礎設施,且定製化水平高,上下文更豐富。Prometheus模型穩健,能夠實現深度資料鑽取;Sensu則採用行業標準技術和格式(如Nagios和StatsD),監控整個基礎設施。Sensu能夠與Prometheus相互補充,提供更加豐富的上下文資訊。
隨著我們對軟體依賴程度的加深,軟體的可用性和故障修復時間對企業的存活非常重要。因此,只有充分了解系統才能克服這些挑戰,基礎設施和應用監控正是關鍵的一環。要想充分利用K8s的能力,必須實施統一的監控解決方案,實現新老技術的有效銜接。
本篇為譯文,原文作者:STEFAN THORPE
原文連結:
譯文首發於UAVStack智慧運維
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69918724/viewspace-2658464/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Kubernetes監控實踐
- 11.prometheus監控之黑盒(blackbox)監控Prometheus
- 使用Prometheus、Grafana監控Artifactory實踐PrometheusGrafana
- prometheus監控golang服務實踐PrometheusGolang
- 深入理解Prometheus: Kubernetes環境中的監控實踐Prometheus
- prometheus+grafana監控mysql最佳實踐PrometheusGrafanaMySql
- 6.prometheus監控--監控dockerPrometheusDocker
- Prometheus監控之Blackbox ExporterPrometheusExport
- Kubernetes監控之InfluxDBUX
- 基於 Prometheus 的監控系統實踐Prometheus
- Kubernetes 叢集和應用監控方案的設計與實踐
- Prometheus監控mongoPrometheusGo
- prometheus JVM監控PrometheusJVM
- Prometheus 監控arangodbPrometheusGo
- Prometheus監控實戰應用Prometheus
- Prometheus+Grafana實現服務效能監控:windows主機監控、Spring Boot監控、Spring Cloud Alibaba Seata監控PrometheusGrafanaWindowsSpring BootCloud
- prometheus監控+alertmanager告警Prometheus
- 05 . Prometheus監控NginxPrometheusNginx
- 使用Prometheus監控FlinkPrometheus
- SpringBoot使用prometheus監控Spring BootPrometheus
- prometheus 監控學習Prometheus
- grafana+prometheus快速搭建MySql監控系統實踐GrafanaPrometheusMySql
- 如何用Prometheus監控十萬container的Kubernetes叢集PrometheusAI
- 15.prometheus之pushgateway自定義監控PrometheusGateway
- 效能監控工具之Grafana+Prometheus+ExportersGrafanaPrometheusExport
- prometheus之docker監控與告警系列(一)PrometheusDocker
- prometheus之docker監控與告警系列(二)PrometheusDocker
- prometheus之docker監控與告警系列(三)PrometheusDocker
- Kubernetes之日誌和監控(十五)
- prometheus監控04-AlertManagerPrometheus
- prometheus+grafana 監控nginxPrometheusGrafanaNginx
- Prometheus MySQL監控+grafana展示PrometheusMySqlGrafana
- Prometheus監控神器-Rules篇Prometheus
- 阿里雲容器Kubernetes監控(一)-資源監控阿里
- Kubernetes Ingress 日誌分析與監控的最佳實踐
- Prometheus監控之SNMP Exporter介紹和資料展現PrometheusExport
- 效能測試之伺服器監控和Prometheus推薦伺服器Prometheus
- TiDB監控實現--存活監控TiDB