Kubernetes監控實踐(2):可行監控方案之Prometheus和Sensu

本文介紹兩個可行的K8s監控方案:Prometheus和Sensu。兩個方案都能全面提供系統級的監控數據,幫助開發人員跟蹤K8s關鍵組件的性能、定位故障、接收預警。node

拓展閱讀:Kubernetes監控實踐(1):K8s的工做原理與監控實踐ios

1、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保持通訊,所以存在延遲。

2、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監控對象的數量沒有上限,也不會由於監控對象的增長變得更加複雜。

3、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安全採集傳輸數據。
  • 便於管理配置監控設置。
  • 可以監控整個基礎設施。

4、結論

Sensu可以監控整個基礎設施,且定製化水平高,上下文更豐富。Prometheus模型穩健,可以實現深度數據鑽取;Sensu則採用行業標準技術和格式(如Nagios和StatsD),監控整個基礎設施。Sensu可以與Prometheus相互補充,提供更加豐富的上下文信息。

隨着咱們對軟件依賴程度的加深,軟件的可用性和故障修復時間對企業的存活很是重要。所以,只有充分了解系統才能克服這些挑戰,基礎設施和應用監控正是關鍵的一環。要想充分利用K8s的能力,必須實施統一的監控解決方案,實現新老技術的有效銜接。

本篇爲譯文

原文做者:STEFAN THORPE

原文連接:https://dzone.com/refcardz/monitoring-kubernetes

譯文首發於UAVStack智能運維

相關文章
相關標籤/搜索