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

宜信技術學院發表於2019-09-27

本文介紹兩個可行的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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章