作者 | 云昭
可觀測(cè)對(duì)于微服務(wù)盛行的年代來講,十分必要。成千上萬的微服務(wù)給開發(fā)和運(yùn)維團(tuán)隊(duì)帶來了指數(shù)級(jí)的維護(hù)成本。要解決這個(gè)難題,就勢(shì)必引入高效的監(jiān)控工具來輔助技術(shù)管理和決策。而K8s作為當(dāng)下微服務(wù)領(lǐng)域的一個(gè)熱門選手,如何有效選擇和部署監(jiān)控K8s集群工具就成為了一個(gè)大家共同關(guān)注的話題。
PART 01
問題
在K8s環(huán)境中,應(yīng)用程序運(yùn)行在跨集群內(nèi)的多個(gè)節(jié)點(diǎn),同時(shí)服務(wù)也將分布在多個(gè)集群和多個(gè)云中,這就使得追蹤、監(jiān)控這些應(yīng)用程序及其所依賴的基礎(chǔ)設(shè)施的健康狀況,非常具有挑戰(zhàn)性。
K8s監(jiān)控涉及從K8s集群收集指標(biāo)、識(shí)別關(guān)鍵事件,目的是確保所有硬件、軟件和應(yīng)用程序按預(yù)期運(yùn)行。因此,將指標(biāo)集中匯總在一個(gè)中心位置,將有效幫助開發(fā)者了解和維護(hù)整個(gè) K8s隊(duì)列以及在其上運(yùn)行的應(yīng)用或服務(wù)的健康狀況。
而要做到全方位監(jiān)控非常困難,其中的兩個(gè)難點(diǎn)在于:
1、容器化和K8s創(chuàng)建的抽象層之間的監(jiān)控;
2、K8s環(huán)境中運(yùn)行的應(yīng)用程序的動(dòng)態(tài)特性之間的監(jiān)控。
這篇文章探討了一些不錯(cuò)的K8s監(jiān)控和日志工具,包括用于監(jiān)控的Prometheus和用于可視化和儀表板的Grafana等。
PART 02
K8s可觀測(cè)工具
目前業(yè)界流行的用于K8s容器監(jiān)控的開源工具并不少,比較常見的有:Prometheus、Grafana、Elasticsearch、Thanos等。
1. Prometheus
Prometheus是一個(gè)開源系統(tǒng)監(jiān)控和警報(bào)工具包,最初在 SoundCloud 構(gòu)建,靈感來自 google 使用的 Borgmon 工具。自 2012 年成立以來,許多公司和組織都采用了 Prometheus,該項(xiàng)目擁有非常活躍的開發(fā)者和用戶社區(qū)。
Prometheus 于 2016 年加入云原生計(jì)算基金會(huì),成為繼K8s之后的第二個(gè)托管項(xiàng)目。雖然本文在K8s監(jiān)控的背景下討論 Prometheus,但它可以滿足各種各樣的監(jiān)控需求,比如幫助簡(jiǎn)化指標(biāo)收集、關(guān)聯(lián)事件和警報(bào)、提供安全性以及進(jìn)行大規(guī)模故障排除和跟蹤。
Prometheus的主要功能之一就是指標(biāo)收集,這里的指標(biāo)是什么?這要根據(jù)用戶想要測(cè)量的內(nèi)容或應(yīng)用程序而異。對(duì)于 Web 服務(wù)器,它可能是請(qǐng)求時(shí)間,對(duì)于數(shù)據(jù)庫,它可能是活動(dòng)連接數(shù)或活動(dòng)查詢數(shù)等。Prometheus收集并存儲(chǔ)用戶指定的指標(biāo)作為時(shí)間序列數(shù)據(jù)。可以分析指標(biāo)以了解集群及其組件的運(yùn)行狀態(tài)。
Prometheus的可靠性非常出色。這有助于確保在用戶的環(huán)境中出現(xiàn)其他問題時(shí),Prometheus仍然可以訪問。每個(gè)Prometheus服務(wù)器都是獨(dú)立的。本地時(shí)間序列數(shù)據(jù)庫使其獨(dú)立于遠(yuǎn)程存儲(chǔ)或其他遠(yuǎn)程服務(wù)。這有助于快速識(shí)別問題并接收有關(guān)受監(jiān)控集群和應(yīng)用程序系統(tǒng)性能的實(shí)時(shí)反饋。
Prometheus的主要組件,包括Prometheus服務(wù)器和Alertmanager,整體架構(gòu)如下圖所示。雖然Prometheus提供了 Web UI,但它通常與Grafana結(jié)合使用以實(shí)現(xiàn)更靈活的可視化。
2. Grafana
Grafana是一個(gè)完全托管的應(yīng)用程序和基礎(chǔ)設(shè)施可視化平臺(tái),可與Prometheus等監(jiān)控軟件配合使用。Prometheus和Grafana的組合正在成為 devops 團(tuán)隊(duì)用于存儲(chǔ)和可視化時(shí)間序列數(shù)據(jù)的越來越常見的監(jiān)控堆棧。Prometheus作為存儲(chǔ)后端,Prafana作為分析和可視化的接口。
3. Thanos
Thanos作為度量(Metric)系統(tǒng),它提供了一種簡(jiǎn)單且經(jīng)濟(jì)高效的方式來集中和擴(kuò)展基于Prometheus的監(jiān)控系統(tǒng)。
4. Elasticsearch(ES)
Elasticsearch是一個(gè)分布式、RESTful風(fēng)格的搜索和數(shù)據(jù)分析引擎。它幾乎適用于所有數(shù)據(jù)類型:數(shù)字、文本、地理位置、結(jié)構(gòu)化數(shù)據(jù)、非結(jié)構(gòu)化數(shù)據(jù)等。
5. Logstash
Logstash是一個(gè)開源的服務(wù)器端數(shù)據(jù)處理管道,可同時(shí)從多個(gè)來源獲取數(shù)據(jù),并對(duì)其進(jìn)行轉(zhuǎn)換,然后將其發(fā)送到合適的存儲(chǔ)區(qū)。
6. Kibana
Kibana提供了 Elasticsearch 數(shù)據(jù)進(jìn)行可視化的免費(fèi)開放的用戶界面,并允許用戶在Elastic Stack中進(jìn)行導(dǎo)航。它提供了一種數(shù)據(jù)可視化和探索工具,用于日志和時(shí)間序列分析、應(yīng)用程序監(jiān)控和運(yùn)營(yíng)智能用例。從跟蹤查詢負(fù)載,到理解請(qǐng)求在整個(gè)應(yīng)用的運(yùn)轉(zhuǎn),都能有效完成。
許多團(tuán)隊(duì)單獨(dú)或組合使用這些監(jiān)控和日志記錄工具來創(chuàng)建自己的解決方案并解決特定的容器監(jiān)控和K8s應(yīng)用程序監(jiān)控需求。目前市面上比較流行的K8s監(jiān)控工具組合大體上可以分為兩種:
Prometheus+Grafana,Elasticsearch+Logstash+Kibana。后者通常被稱為ELK堆棧或Elastic Stack,目前這套組合是免費(fèi)和開源的。
PART 03
注意事項(xiàng)
無論是單獨(dú)部署還是組合部署,監(jiān)控工具的使用都必然會(huì)帶來一定的復(fù)雜性,尤其當(dāng)遇到情況復(fù)雜的K8s集群時(shí)——可能在不同的云環(huán)境中運(yùn)行不同的K8s發(fā)行版,難度將陡然增加。
一般來說,需要注意以下幾點(diǎn):
1. Prometheus單獨(dú)配置不適用于大規(guī)模場(chǎng)景
由于應(yīng)用程序載入問題、手動(dòng)配置門檻較高、配置不同步,大規(guī)模的Prometheus配置管理會(huì)給開發(fā)運(yùn)維團(tuán)隊(duì)帶來十分艱巨的挑戰(zhàn)。
舉個(gè)例子,截至 2019 年底,Uber 的工作負(fù)載已增長(zhǎng)到 4,000 多個(gè)微服務(wù)。要管理和操作此類復(fù)雜的應(yīng)用程序,技術(shù)團(tuán)隊(duì)需要更加高級(jí)的可觀測(cè)性,這需要為每個(gè)應(yīng)用程序進(jìn)行抓取、儀表板和警報(bào)的專用配置。而創(chuàng)建這些配置,并將它們應(yīng)用到每個(gè)環(huán)境——通常是手動(dòng)完成,并且每次發(fā)生變化時(shí)都以臨時(shí)方式完成,這對(duì)于一家起來說是難以承擔(dān)的。
2. Prometheus和Grafana在多集群環(huán)境中適用性有限制
雖然Prometheus和Grafana可以很好地協(xié)同用于單個(gè)集群,但在多集群環(huán)境中,用戶可能必須將Thanos添加到用戶的工具集中以聚合數(shù)據(jù)并提供長(zhǎng)期存儲(chǔ)和全局視圖。用戶仍然可能面臨數(shù)據(jù)保留和HA(高可用性)的限制,導(dǎo)致一些人更喜歡 ELK 堆棧。
基于這種多集群的復(fù)雜性,許多公司團(tuán)隊(duì)更喜歡使用 Datadog、Cloudwatch 和 New Relic 等商業(yè)解決方案將監(jiān)控作為服務(wù)。
PART 04
寫在最后
K8s對(duì)于當(dāng)下的大規(guī)模應(yīng)用的技術(shù)架構(gòu)的重要性不言而喻。而K8s的可觀測(cè)性(監(jiān)控)工具目前也成為了開發(fā)運(yùn)維團(tuán)隊(duì)繞不過去的一道門檻。不管是Prometheus、Grafana 還是ELK,這些工具在業(yè)務(wù)中已經(jīng)得到了不錯(cuò)的性能驗(yàn)證,希望本文可以給大家到來一些有益的思考。
參考資料:
https://dzone.com/articles/kube.NETes-monitoring-with-prometheus
https://prometheus.io/docs/