【51CTO.com快譯】如今,Kubernetes在GitHub上已經擁有了超過58000萬顆點贊之星,而且它在全球范圍內有著2200多名在冊的貢獻者。可以說,它已然成為了容器編排方面的實際標準。不過,在解決并運行分布式微服務應用的過程中,它時常也會面臨一些嚴峻的挑戰。其中,廣為開發與運維人員所提及的挑戰之一便是:對于Kubernetes的監控問題。面對復雜的分布式環境,大家往往需要通過開發各種開源的監控方案,以滿足實際應用的需求。

當前,在Kubernetes生態系統及其社區中,有著林林總總的Kubernetes工具。它們中有的能夠通過日志來輔助檢測狀態;有的則是一種數據收集器;而另一些則提供了操作Kubernetes的界面。有些是Kubernetes原生的,有些則是開發人員自行研發的。在本文中,我們將通過優缺點的比較,向您介紹十大流行的Kubernetes開源監控工具。

Prometheus

優點:Kubernetes原生,易于使用,擁有龐大的社區。

缺點:可擴展性與存儲能力不強。

由于具有與大量數據源的集成能力,因此Grafana在業界備受歡迎。同時,強大的Grafana具有警報、注釋、過濾、特定數據源查詢、可視化儀表板、身份驗證與授權、以及跨組織協作等多種功能。

優點:擁有大型生態系統,以及豐富的可視化與警報功能。

缺點:未能針對Kubernetes的日志管理進行優化。

ELK(ala Elastic Stack)

就Kubernetes的日志而言,最受歡迎的開源解決方案當屬ELK Stack。ELK是Elasticsearch、Logstash和Kibana的首字母縮寫,其實它包含了第四個組件:Beats。它們都屬于輕量級的數據傳送器。雖然堆棧中的每一個組件都僅負責日志管道中的不同階段,但是它們組合在一起,卻能為Kubernetes提供了一個全面而強大的日志解決方案。

其中,Logstash管道能夠在發送日志并對其進行存儲之前,完成數據的匯總和處理。具有可擴展性的Elasticsearch,即使在存儲和搜索數百萬個文檔時,也能具有不俗的表現。其對應的Kibana平臺,則能夠出色地為用戶提供分析數據所需的可視化界面。

堆棧中所有不同的組件都可以被輕松部署到Kubernetes環境之中。您可以使用各種部署配置、以及helm圖表,將不同的組件作為pod予以運行。通過部署,我們可以將Metricbeat和Filebeat作為守護進程的采集器,將Kubernetes的元數據附加到對應的文檔中。

優點:擁有龐大的社區,易于在Kubernetes中部署與使用,具有豐富的分析功能。

缺點:擴展起來較為麻煩。

Fluentd/Fluent Bit

Fluentd在Logstash的基礎上進行了相關性能的改進,因此也廣受Kubernetes用戶的歡迎。在工具設計方面,Fluentd擁有出色的性能、可擴展性和可靠性。各種簡單方便的輸入與輸出,并不會對其性能產生任何影響。針對處理傳輸中的故障、以及數據過載問題,Fluentd使用磁盤或內存來進行緩沖和隊列。同時,Fluentd通過支持多種配置選項,以確保提供更為靈活的數據管道。

Kubernetes原生的Fluentd和Fluent Bit都隸屬于CNCF項目。它們不但可以與Kubernetes無縫集成,而且能夠在僅占用少量資源的情況下,使用相關的pod和容器元數據來豐富各類數據。

優點:具有龐大的插件生態系統,提供優異的性能與可靠性。

缺點:配置較為麻煩。

cAdvisor(https://github.com/google/cadvisor)

作為一款開源的代理工具,cAdvisor能夠通過收集、處理和導出數據,來展示那些正在運行的容器性能,及其資源使用情況。它能夠以Kubelet二進制文件的形式,被內置集成到Kubernetes之中。

與其他代理工具不同,cAdvisor并不是被部署在每個pod中,而是在節點級別上。它能夠自動發現計算機上所有正在運行的容器,并收集到諸如內存、CPU等系統網絡指標。

作為一款基礎性的本地開源監視工具,cAdvisor具有易用性,用戶可以開箱即用(out-of-the-box)的方式發現Prometheus的參數指標。不過,要想成為一款全方位的監視解決方案,cAdvisor尚有持續改進的空間。

優點:內置于Kubernetes,易于部署和使用,能夠支持多個端點。

缺點:過于基礎,缺乏分析的深度,且功能有限。

kubewatch(https://github.com/bitnami-labs/kubewatch)

顧名思義, kubewatch能夠監控那些特定的Kubernetes事件,并將此類事件以通知的形式推送到諸如Slack和PagerDuty的端點上。具體而言,kubewatch能夠通過監控,來獲悉Kubernetes指定資源的變化,其中包括:守護進程集、部署、pod、副本集、復制控制器、服務、密碼、以及各種配置映射。Kubewatch不但易于配置,而且能夠使用helm來進行自定義部署。

優點:支持多個端點,且易于部署。

缺點:只是一個監控器。

kube-ops-view(https://github.com/hjacobs/kube-ops-view)

雖然kube-ops-view項目的官方文檔已明確指出:它不是一款監控工具,不能對生產環境進行監控與報警。但是它可以為您提供Kubernetes集群、不同部署節點、以及節點上不同Pod的運行狀態信息。

資料來源: GitHub

優點:易于部署與使用。

缺點:作為只讀工具,不太適用于管理Kubernetes資源。

kube-state-metrics

作為一款Kubernetes的原生監控指標服務,kube-state-metrics能夠偵聽各種Kubernetes API,并能夠生成諸如Pod、服務、部署、以及節點等,有關對象的狀態指標。您可以通過鏈接:https://github.com/kubernetes/kube-state-metrics/tree/master/docs,來獲悉kube-state-metrics能夠生成的完整指標列表。

kube-state-metrics雖然極其簡單易用,但是由于它只能提供單一的指標服務,因此需要更多的改進,才能集成到完整的Kubernetes監控解決方案之中。kube-state-metrics能夠以純文本格式,導出HTTP端點上的指標。那些使用Prometheus的用戶會經常使用到它。

優點:屬于Kubernetes原生,易于使用,能與Prometheus無縫集成。

缺點:僅提供單一的指標生成服務。

Jaeger(https://github.com/jaegertracing/jaeger)

目前,分布式跟蹤正在逐漸成為針對Kubernetes環境監視和故障排除的優秀實踐方式。Jaeger正是此類開源跟蹤工具中的佼佼者。

2016年,Uber在其他現有跟蹤工具:Zipkin和Dapper的啟發下,開發出了開源式的Jaeger。它能夠幫助用戶執行根本原因分析,性能優化和分布式的事務監控。

Jaeger具有適用于Go、Java、Node、Python和C++應用程序的OpenTracing-based特征。它能夠根據每一個服務或端點,來使用一致性的前端信息采樣頻率。同時,它也支持Cassandra、Elasticsearch、Kafka、以及內存等多種存儲后端模式。

Jaeger具有多種上手模式:用戶既可以使用全新的Jaeger Operator(https://www.jaegertracing.io/docs/1.13/operator/),也可以使用守護進程來進行配置,另外它還有一個適用于測試和演示目的的all-in-one部署方式。

優點:易于部署,且能夠通過用戶界面來檢測各種監控選項。

缺點:提供有限的后端集成。

Weave Scope

由Weaveworks開發的監視工具--Weave Scope,能夠讓您獲悉對于Kubernetes集群的操作洞見。

雖然和kube-ops-view有幾分類似,但Weave Scope主要是通過更好的用戶界面,來提升服務等級;并允許用戶在其界面上運行各種診斷命令,來管理不同的容器。

圖片來源:GitHub

您可以通過該應用工具,來有效地掌控部署環境,并在其上部署自己的基礎架構,以及不同的組件連接。

優點:提供了“零配置”式的用戶界面。

缺點:其分析深度欠佳。

總結

上述所列舉的十大Kubernetes開源工具,只是業界所有工具中的“冰山一角”。它們在不同程度上為用戶提供了設計Kubernetes堆棧的可觀察性。您可以通過設置小型的沙箱環境,從小規模的測試開始,進行嘗試性的測試和部署,進而判斷出哪一款才是您真正所需要的工具。

原文標題:Top 10 Open-Source Monitoring Tools for Kubernetes,作者:Daniel Berman

【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】