容器監(jiān)控平臺(tái)概覽
1. 監(jiān)控的意義和目的
監(jiān)控是管理基礎(chǔ)設(shè)施的核心工具。沒(méi)有監(jiān)控,我們將無(wú)法了解系統(tǒng)環(huán)境、進(jìn)行診斷故障、制定容量計(jì)劃,最糟的就是,故障發(fā)生了也不會(huì)被發(fā)現(xiàn)。
從技術(shù)角度來(lái)看,監(jiān)控是衡量和管理技術(shù)系統(tǒng)的工具和流程。監(jiān)控將系統(tǒng)和應(yīng)用程序生成的指標(biāo)轉(zhuǎn)換為對(duì)應(yīng)的業(yè)務(wù)價(jià)值。監(jiān)控系統(tǒng)需要在基于容器的微服務(wù)中自動(dòng)且快速地識(shí)別生命周期,并持續(xù)地提供實(shí)時(shí)的監(jiān)控檢測(cè)。
在上一節(jié)中,我們已經(jīng)使用WeaveScope搭建了一個(gè)容器監(jiān)控管理系統(tǒng),并帶有一些基本的監(jiān)控功能。但它對(duì)于自定義數(shù)據(jù)獲取、自動(dòng)告警、細(xì)化監(jiān)控指標(biāo)和展示的時(shí)候,生態(tài)、功能性和擴(kuò)展性都有欠缺,系統(tǒng)及需求復(fù)雜時(shí)難以滿足我們的定制化的監(jiān)控需求。這時(shí),我們就需要圍繞Premetheus,配合其生態(tài)及相關(guān)工具,配置我們的監(jiān)控平臺(tái)。
2. Prometheus
Prometheus 的靈感來(lái)自 Google 的 Borgmon, 是由前 Google 工程師從 2012 年開(kāi)始在 Soundcloud以開(kāi)源軟件的形式進(jìn)行研發(fā)的系統(tǒng)監(jiān)控和告警工具包,自此以后,許多公司和組織都采用了 Prometheus 作為監(jiān)控告警工具。Prometheus 的開(kāi)發(fā)者和用戶社區(qū)非?;钴S,它現(xiàn)在是一個(gè)獨(dú)立的開(kāi)源項(xiàng)目,可以獨(dú)立于任何公司進(jìn)行維護(hù)。
Prometheus 已被全球眾多企業(yè)廣泛使用,以滿足上面提到的復(fù)雜的監(jiān)控需求,當(dāng)然,它也可以用來(lái)監(jiān)控屬于傳統(tǒng)架構(gòu)的資源。
Prometheus 的整體架構(gòu)以及生態(tài)系統(tǒng)組件如下圖所示:
2.1 基本原理
Prometheus 專注于現(xiàn)在正在發(fā)生的事情,而不是追蹤數(shù)周或數(shù)月前的數(shù)據(jù)。Prometheus 通常不用于長(zhǎng)期數(shù)據(jù)保留,默認(rèn)保存 15 天的時(shí)間序列數(shù)據(jù)。它有這樣一個(gè)前提,即大多數(shù)監(jiān)控查詢和警報(bào)都是從最近的數(shù)據(jù)中生成的。
Prometheus的基本原理是通過(guò)HTTP協(xié)議周期性抓取被監(jiān)控組件的狀態(tài),任意組件只要提供對(duì)應(yīng)的HTTP接口就可以接入監(jiān)控。不需要任何SDK或者其他的集成過(guò)程。
輸出被監(jiān)控組件信息的HTTP接口被叫做exporter 。常用的組件大部分都有exporter可以直接使用,比如Nginx、MySQL、Linux系統(tǒng)信息等等。
大致工作流程如下:
-
Prometheus定時(shí)去目標(biāo)上抓取指標(biāo)監(jiān)控?cái)?shù)據(jù),抓取目標(biāo)需要暴露一個(gè)http服務(wù)的接口給它定時(shí)抓取。對(duì)于不能直接抓取的目標(biāo),Prometheus支持這些應(yīng)用服務(wù)主動(dòng)推送監(jiān)控指標(biāo)到PushGateway,而后Prometheus定時(shí)去這些網(wǎng)關(guān)上抓取數(shù)據(jù)。
-
Prometheus在本地存儲(chǔ)保存抓取的數(shù)據(jù),并按規(guī)則進(jìn)行過(guò)濾和整理數(shù)據(jù)。
-
Prometheus支持很多方式的圖表可視化,例如Grafana、自帶的Promdash以及自身提供的模版引擎等等。Prometheus還提供HTTP API的查詢方式,自定義所需要的輸出。
2.2 Prometheus 的優(yōu)勢(shì)
Prometheus 的主要優(yōu)勢(shì)有:
- 由指標(biāo)名稱和和鍵/值對(duì)標(biāo)簽標(biāo)識(shí)的時(shí)間序列數(shù)據(jù)組成的多維數(shù)據(jù)模型;
- 強(qiáng)大的查詢語(yǔ)言 PromQL;
- 不依賴分布式存儲(chǔ);單個(gè)服務(wù)節(jié)點(diǎn)具有自治能力;
- 時(shí)間序列數(shù)據(jù)是服務(wù)端通過(guò) HTTP 協(xié)議主動(dòng)拉取獲得的;
- 也可以通過(guò)中間網(wǎng)關(guān)來(lái)推送時(shí)間序列數(shù)據(jù);
- 可以通過(guò)靜態(tài)配置文件或服務(wù)發(fā)現(xiàn)來(lái)獲取監(jiān)控目標(biāo);
- 支持多種類型的圖表和儀表盤。
3. Prometheus 的組件與生態(tài)
3.1 cAdvisor
Prometheus 支持了多種方法來(lái)監(jiān)控 Docker,推薦的方法是使用 Google 的 cAdvisor 工具。cAdvisor是Google開(kāi)源的一款用于展示和分析容器運(yùn)行狀態(tài)的可視化工具。通過(guò)在主機(jī)上運(yùn)行cAdvisor用戶可以輕松的獲取到當(dāng)前主機(jī)上容器的運(yùn)行統(tǒng)計(jì)信息,并以圖表的形式向用戶展示。
cAdvisor是一個(gè)簡(jiǎn)單易用的工具,用戶不用再登錄到服務(wù)器中即可以可視化圖表的形式查看主機(jī)上所有容器的運(yùn)行狀態(tài)。cAdvisor 作為 Docker 容器運(yùn)行,它可以對(duì)宿主機(jī)上的資源及容器進(jìn)行實(shí)時(shí)監(jiān)控和性能數(shù)據(jù)采集,包括CPU使用情況、內(nèi)存使用情況、網(wǎng)絡(luò)吞吐量及文件系統(tǒng)使用情況。
cAdvisor默認(rèn)只保存幾分鐘分鐘的監(jiān)控?cái)?shù)據(jù),Prometheus 支持通過(guò)它導(dǎo)出指標(biāo),并將數(shù)據(jù)傳輸?shù)酱鎯?chǔ)系統(tǒng)中。
3.2 Grafana
Prometheus本身的界面比較簡(jiǎn)潔,為了給 Prometheus 添加一個(gè)功能更全面的可視化界面,我們可以與開(kāi)源儀表板工具 Grafana 集成。
Grafana 接受來(lái)自不同數(shù)據(jù)源的數(shù)據(jù),提供可視化儀表板。它支持多種數(shù)據(jù)源。
Tips:
數(shù)據(jù)可視化既是一門非常強(qiáng)大的分析和解釋技術(shù)。我們?cè)诓榭纯梢暬瘓D像時(shí),往往會(huì)從隨機(jī)無(wú)關(guān)聯(lián)的數(shù)據(jù)中找到有價(jià)值的聯(lián)系,而數(shù)據(jù)的顆粒度或分辨率、表示數(shù)據(jù)的方式以及數(shù)據(jù)的規(guī)??赡軙?huì)進(jìn)一步加劇這種飛躍。
理想的可視化應(yīng)該能夠清晰地顯示數(shù)據(jù),避免不重要的數(shù)據(jù)堆砌,突出重點(diǎn)。
3.3 Alertmanager
Prometheus 服務(wù)器沒(méi)有內(nèi)置警報(bào)工具,而是將警報(bào)從 Prometheus 服務(wù)器推送到 Alertmanager警報(bào)管理器的單獨(dú)服務(wù)器。Alertmanager 可以管理、整合和分發(fā)各種警報(bào)到不同目的地,并能夠防止重復(fù)發(fā)送。
我們將在 Prometheus 服務(wù)器上編寫(xiě)警報(bào)規(guī)則 ,這些規(guī)則將使用我們收集的指標(biāo)并在指定的閾值或標(biāo)準(zhǔn)上觸發(fā)警報(bào)。當(dāng)指標(biāo)達(dá)到閾值時(shí),會(huì)生成一個(gè)警報(bào),并將其推送到 Alertmanager。
4. 小結(jié)
目前,Prometheus 已成為企業(yè)構(gòu)建容器云架構(gòu)的首選開(kāi)源監(jiān)控工具。下一節(jié)我們將進(jìn)入實(shí)戰(zhàn)環(huán)節(jié),運(yùn)用這些工具,搭建一個(gè)完整的監(jiān)控平臺(tái)。