監(jiān)控系統(tǒng)不完全發(fā)展史
監(jiān)控系統(tǒng)的發(fā)展可以粗略地劃分為三個時代猾编。
最初是SNMP監(jiān)控時代桥爽,那時候的監(jiān)控系統(tǒng)基于 SNMP 協(xié)議抓取信息纳击;多用于監(jiān)控網(wǎng)絡(luò)設(shè)備续扔,以硬件監(jiān)控為主。典型代表有 Cadvisor + InfluxDB + Grafana焕数,這一代監(jiān)控系統(tǒng)只能從主機維度采集信息纱昧,沒有 NameSpace、Pod 等維度的匯聚功能堡赔。
而后出現(xiàn)了第二代识脆,算是第一代的改良版,可以對數(shù)據(jù)進行匯總善已。典型代表有 Heapster + InfluxDB + Grafana灼捂。其中,Heapster 負(fù)責(zé)調(diào)用各 node 中的 Cadvisor 接口换团,對數(shù)據(jù)進行匯總悉稠,然后導(dǎo)到 InfluxDB,可以從 cluster艘包、node的猛、pod 各個層面提供詳細(xì)的資源使用情況。
第三代是云原生監(jiān)控系統(tǒng)想虎。云計算時代到來后卦尊,云原生監(jiān)控系統(tǒng)成為新的主流。監(jiān)控系統(tǒng)具備監(jiān)控目標(biāo)的數(shù)據(jù)采集舌厨、存儲岂却、報警等一套監(jiān)控系統(tǒng)必備的功能,基于指標(biāo)、日志和鏈路三個立體維度進行立體的系統(tǒng)監(jiān)控淌友。典型代表有 Metrics- Server + Prometheus煌恢。
如上圖骇陈,Resource Metrics 對應(yīng)的接口是metrics.k8s.io震庭,主要的實現(xiàn)就是 metrics-server,它提供資源監(jiān)控能力你雌,比較常見的是節(jié)點級別器联,pod級別,namespace級別婿崭,class級別拨拓,這類的監(jiān)控指標(biāo)都可以通過 metrics.k8s.io 接口獲取。
Custom Metrics 對應(yīng)的接口是 custom metrics.k8s.io氓栈,主要的實現(xiàn)是 Prometheus渣磷,它提供的是資源監(jiān)控和自定義監(jiān)控。
常見監(jiān)控系統(tǒng)的三個立體維度:
指標(biāo)監(jiān)控(metrics):隨時間推移產(chǎn)生的一些與監(jiān)控相關(guān)的可聚合的數(shù)據(jù)點授瘦,該類數(shù)據(jù)具備:零散信息和可聚合的特性醋界。
日志監(jiān)控(logging):整體日志或分層次的日志和事件。
鏈路跟蹤(tracing):分布式系統(tǒng)提完,對分布式鏈路跟蹤形纺、調(diào)用過程中發(fā)生的一系列事情(性能數(shù)據(jù))做的收集。
Prometheus 簡介
Prometheus 由 SoundCloud 開發(fā)的開源監(jiān)控報警系統(tǒng)和時序列數(shù)據(jù)庫(TSDB)徒欣,主要用 Go 編寫逐样。自2012年起,許多公司及組織已經(jīng)采用 Prometheus,并且該項目有著非常活躍的開發(fā)者和用戶社區(qū)打肝,現(xiàn)在已經(jīng)成為一個獨立的開源項目脂新,并且保持獨立于任何公司,Prometheus 在2016加入 CNCF ( Cloud Native Computing Foundation ), 作為在 kubernetes 之后的第二個由基金會主持的項目粗梭。github地址(https://github.com/prometheus)
Prometheus 的主要特征
- 多維數(shù)據(jù)模型(時序列數(shù)據(jù)有metric和一組key/value組成)
- 在多維度上靈活的查詢語言(PromQl)
- 不依賴分布式存儲争便,單主節(jié)點工作.
- 可以通過pushgateway進行時序列數(shù)據(jù)推送(pushing)
- 可以通過服務(wù)發(fā)現(xiàn)或者靜態(tài)配置去獲取要采集的目標(biāo)服務(wù)器
- 多種可視化圖表及儀表盤支持
Prometheus 架構(gòu)
prometheus生態(tài)系統(tǒng)由多個組件組成,其中許多組件是可選的楼吃。
- promethues server:主要獲取和存儲時間序列數(shù)據(jù)始花。
- client libraries:用于對接 Prometheus Server, 可以查詢和上報數(shù)據(jù)。右下角部分孩锡。
- exporters:主要是作為agent收集數(shù)據(jù)發(fā)送到prometheus server酷宵,不同的數(shù)據(jù)收集由不同的exporters實現(xiàn),如監(jiān)控主機有node-exporters躬窜,mysql有MySQL server exporters浇垦。
- pushgateway:允許短暫和批處理的jobs推送它們的數(shù)據(jù)到prometheus;由于這類工作的存在時間不夠長荣挨,所以需要他們主動將數(shù)據(jù)推送到pushgateway男韧,然后由pushgateway將數(shù)據(jù)發(fā)送的prometheus朴摊。總結(jié):類似于zabbix proxy
- alertmanager:實現(xiàn)prometheus的告警功能此虑。
prometheus 直接或通過pushgateway抓取數(shù)據(jù)甚纲。將數(shù)據(jù)存儲在本地,并對這些數(shù)據(jù)運行規(guī)則朦前,以便從現(xiàn)有數(shù)據(jù)聚合和記錄新時間序列介杆,或者生成警報。然后利用 grafana 等工具可視化數(shù)據(jù)韭寸。
Prometheus 適合做什么
Prometheus適用于錄制任何純數(shù)字時間序列春哨。它適用于以機器為中心的監(jiān)控以及高度動態(tài)的面向服務(wù)架構(gòu)的監(jiān)控。在微服務(wù)的世界中恩伺,它對多維數(shù)據(jù)收集和查詢的支持是一種特殊的優(yōu)勢赴背。
Prometheus專為提高可靠性而設(shè)計,是您在停電期間可以快速診斷問題的系統(tǒng)晶渠。每個Prometheus服務(wù)器都是獨立的凰荚,不依賴于網(wǎng)絡(luò)存儲或其他遠(yuǎn)程服務(wù)。當(dāng)基礎(chǔ)架構(gòu)的其他部分損壞時乱陡,您可以依賴它浇揩,并且您不需要設(shè)置大量的基礎(chǔ)架構(gòu)來使用它。
Prometheus 不適合做什么
雖然 Prometheus 是一個全面的監(jiān)控解決方案憨颠,但它不適合某些角色胳徽。Prometheus 的設(shè)計以可靠性和性能為核心原則。這會導(dǎo)致衡量指標(biāo)準(zhǔn)確性的權(quán)衡爽彤。
Prometheus 不保證收集到的數(shù)據(jù)是 100% 準(zhǔn)確的养盗。它適用于偶爾丟失的事件不會影響全局的高容量場景。如果您正在跟蹤需要正確的敏感統(tǒng)計數(shù)據(jù)适篙,您應(yīng)該使用其他平臺來處理這些指標(biāo)往核。對于系統(tǒng)中不太重要的值,您仍然可以采用 Prometheus嚷节。
此外聂儒,Prometheus 可能不是您想要的監(jiān)控堆棧中的唯一組件。它專注于存儲和查詢您的事件硫痰,主要使用 HTTP API衩婚。內(nèi)置的 Web UI 提供基本的繪圖功能,但不支持高級自定義儀表板效斑。數(shù)據(jù)可視化場景通常通過部署一個Grafana實例來處理非春;這通過內(nèi)置的Prometheus 集成提供儀表板和指標(biāo)分析功能。
**注:以上內(nèi)容參考 **prometheus官網(wǎng)