監(jiān)控系統(tǒng)不完全發(fā)展史
監(jiān)控系統(tǒng)的發(fā)展可以粗略地劃分為三個(gè)時(shí)代。
最初是SNMP監(jiān)控時(shí)代,那時(shí)候的監(jiān)控系統(tǒng)基于 SNMP 協(xié)議抓取信息;多用于監(jiān)控網(wǎng)絡(luò)設(shè)備,以硬件監(jiān)控為主。典型代表有 Cadvisor + InfluxDB + Grafana,這一代監(jiān)控系統(tǒng)只能從主機(jī)維度采集信息,沒有 NameSpace、Pod 等維度的匯聚功能。
而后出現(xiàn)了第二代,算是第一代的改良版,可以對(duì)數(shù)據(jù)進(jìn)行匯總。典型代表有 Heapster + InfluxDB + Grafana。其中,Heapster 負(fù)責(zé)調(diào)用各 node 中的 Cadvisor 接口,對(duì)數(shù)據(jù)進(jìn)行匯總,然后導(dǎo)到 InfluxDB,可以從 cluster、node、pod 各個(gè)層面提供詳細(xì)的資源使用情況。

第三代是云原生監(jiān)控系統(tǒng)。云計(jì)算時(shí)代到來后,云原生監(jiān)控系統(tǒng)成為新的主流。監(jiān)控系統(tǒng)具備監(jiān)控目標(biāo)的數(shù)據(jù)采集、存儲(chǔ)、報(bào)警等一套監(jiān)控系統(tǒng)必備的功能,基于指標(biāo)、日志和鏈路三個(gè)立體維度進(jìn)行立體的系統(tǒng)監(jiān)控。典型代表有 Metrics- Server + Prometheus。

如上圖,Resource Metrics 對(duì)應(yīng)的接口是metrics.k8s.io,主要的實(shí)現(xiàn)就是 metrics-server,它提供資源監(jiān)控能力,比較常見的是節(jié)點(diǎn)級(jí)別,pod級(jí)別,namespace級(jí)別,class級(jí)別,這類的監(jiān)控指標(biāo)都可以通過 metrics.k8s.io 接口獲取。
Custom Metrics 對(duì)應(yīng)的接口是 custom metrics.k8s.io,主要的實(shí)現(xiàn)是 Prometheus,它提供的是資源監(jiān)控和自定義監(jiān)控。
常見監(jiān)控系統(tǒng)的三個(gè)立體維度:
指標(biāo)監(jiān)控(metrics):隨時(shí)間推移產(chǎn)生的一些與監(jiān)控相關(guān)的可聚合的數(shù)據(jù)點(diǎn),該類數(shù)據(jù)具備:零散信息和可聚合的特性。
日志監(jiān)控(logging):整體日志或分層次的日志和事件。
鏈路跟蹤(tracing):分布式系統(tǒng),對(duì)分布式鏈路跟蹤、調(diào)用過程中發(fā)生的一系列事情(性能數(shù)據(jù))做的收集。
Prometheus 簡介
Prometheus 由 SoundCloud 開發(fā)的開源監(jiān)控報(bào)警系統(tǒng)和時(shí)序列數(shù)據(jù)庫(TSDB),主要用 Go 編寫。自2012年起,許多公司及組織已經(jīng)采用 Prometheus,并且該項(xiàng)目有著非?;钴S的開發(fā)者和用戶社區(qū),現(xiàn)在已經(jīng)成為一個(gè)獨(dú)立的開源項(xiàng)目,并且保持獨(dú)立于任何公司,Prometheus 在2016加入 CNCF ( Cloud Native Computing Foundation ), 作為在 kubernetes 之后的第二個(gè)由基金會(huì)主持的項(xiàng)目。github地址(https://github.com/prometheus)
Prometheus 的主要特征
- 多維數(shù)據(jù)模型(時(shí)序列數(shù)據(jù)有metric和一組key/value組成)
- 在多維度上靈活的查詢語言(PromQl)
- 不依賴分布式存儲(chǔ),單主節(jié)點(diǎn)工作.
- 可以通過pushgateway進(jìn)行時(shí)序列數(shù)據(jù)推送(pushing)
- 可以通過服務(wù)發(fā)現(xiàn)或者靜態(tài)配置去獲取要采集的目標(biāo)服務(wù)器
- 多種可視化圖表及儀表盤支持
Prometheus 架構(gòu)

prometheus生態(tài)系統(tǒng)由多個(gè)組件組成,其中許多組件是可選的。
- promethues server:主要獲取和存儲(chǔ)時(shí)間序列數(shù)據(jù)。
- client libraries:用于對(duì)接 Prometheus Server, 可以查詢和上報(bào)數(shù)據(jù)。右下角部分。
- exporters:主要是作為agent收集數(shù)據(jù)發(fā)送到prometheus server,不同的數(shù)據(jù)收集由不同的exporters實(shí)現(xiàn),如監(jiān)控主機(jī)有node-exporters,mysql有MySQL server exporters。
- pushgateway:允許短暫和批處理的jobs推送它們的數(shù)據(jù)到prometheus;由于這類工作的存在時(shí)間不夠長,所以需要他們主動(dòng)將數(shù)據(jù)推送到pushgateway,然后由pushgateway將數(shù)據(jù)發(fā)送的prometheus。總結(jié):類似于zabbix proxy
- alertmanager:實(shí)現(xiàn)prometheus的告警功能。
prometheus 直接或通過pushgateway抓取數(shù)據(jù)。將數(shù)據(jù)存儲(chǔ)在本地,并對(duì)這些數(shù)據(jù)運(yùn)行規(guī)則,以便從現(xiàn)有數(shù)據(jù)聚合和記錄新時(shí)間序列,或者生成警報(bào)。然后利用 grafana 等工具可視化數(shù)據(jù)。
Prometheus 適合做什么
Prometheus適用于錄制任何純數(shù)字時(shí)間序列。它適用于以機(jī)器為中心的監(jiān)控以及高度動(dòng)態(tài)的面向服務(wù)架構(gòu)的監(jiān)控。在微服務(wù)的世界中,它對(duì)多維數(shù)據(jù)收集和查詢的支持是一種特殊的優(yōu)勢。
Prometheus專為提高可靠性而設(shè)計(jì),是您在停電期間可以快速診斷問題的系統(tǒng)。每個(gè)Prometheus服務(wù)器都是獨(dú)立的,不依賴于網(wǎng)絡(luò)存儲(chǔ)或其他遠(yuǎn)程服務(wù)。當(dāng)基礎(chǔ)架構(gòu)的其他部分損壞時(shí),您可以依賴它,并且您不需要設(shè)置大量的基礎(chǔ)架構(gòu)來使用它。
Prometheus 不適合做什么
雖然 Prometheus 是一個(gè)全面的監(jiān)控解決方案,但它不適合某些角色。Prometheus 的設(shè)計(jì)以可靠性和性能為核心原則。這會(huì)導(dǎo)致衡量指標(biāo)準(zhǔn)確性的權(quán)衡。
Prometheus 不保證收集到的數(shù)據(jù)是 100% 準(zhǔn)確的。它適用于偶爾丟失的事件不會(huì)影響全局的高容量場景。如果您正在跟蹤需要正確的敏感統(tǒng)計(jì)數(shù)據(jù),您應(yīng)該使用其他平臺(tái)來處理這些指標(biāo)。對(duì)于系統(tǒng)中不太重要的值,您仍然可以采用 Prometheus。
此外,Prometheus 可能不是您想要的監(jiān)控堆棧中的唯一組件。它專注于存儲(chǔ)和查詢您的事件,主要使用 HTTP API。內(nèi)置的 Web UI 提供基本的繪圖功能,但不支持高級(jí)自定義儀表板。數(shù)據(jù)可視化場景通常通過部署一個(gè)Grafana實(shí)例來處理;這通過內(nèi)置的Prometheus 集成提供儀表板和指標(biāo)分析功能。
**注:以上內(nèi)容參考 **prometheus官網(wǎng)