天天看點

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的監控資料整合,形成基于事件的監控路徑。

Kubernetes監控實踐(2):可行監控方案之Prometheus和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指令:

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

下方為Prometheus Collector的check執行個體:

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

3.3 優勢

同時運作Sensu和Prometheus具有下列優勢:

  • 既能監控K8s叢集的健康狀況又能動态監控周邊基礎設施的健康狀況,并采集相關名額。
  • 既能實作問題自動發現,又能通過自動化工作流簡化監控流程。
  • 同時運作Prometheus和Sensu能夠獲得更多上下文資訊,實作更細粒度的資料抓取分析。
  • Sensu采用标準通信密碼,可通過單個agent安全采集傳輸資料。
  • 便于管理配置監控設定。
  • 能夠監控整個基礎設施。

四、結論

Sensu能夠監控整個基礎設施,且定制化水準高,上下文更豐富。Prometheus模型穩健,能夠實作深度資料鑽取;Sensu則采用行業标準技術和格式(如Nagios和StatsD),監控整個基礎設施。Sensu能夠與Prometheus互相補充,提供更加豐富的上下文資訊。

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

本篇為譯文,原文作者:STEFAN THORPE

原文連結:

https://dzone.com/refcardz/monitoring-kubernetes 譯文首發于UAVStack智能運維

繼續閱讀