總結(jié):白盒監(jiān)控杭隙,或者需要監(jiān)控一個(gè)動態(tài)的云環(huán)境渣慕,Prometheus更優(yōu)。
一、適用范圍
Graphite:
- 一個(gè)Python寫的web應(yīng)用,企業(yè)級的系統(tǒng)監(jiān)控工具,可以在廉價(jià)機(jī)硬件上運(yùn)行
- 作為被動機(jī)制的時(shí)間序列數(shù)據(jù)庫,有自己的查詢語言和繪圖方式。其他特性需要通過外部組件來實(shí)現(xiàn)
- 由三個(gè)軟件組件組成:
- carbon:一個(gè)Twisted守護(hù)進(jìn)程踪区,監(jiān)聽并接收時(shí)間序列數(shù)據(jù)
- whisper:固定大小文件的數(shù)據(jù)庫,用來存儲時(shí)間序列數(shù)據(jù)吊骤,在設(shè)計(jì)上類似于RRD(Round Robin Database缎岗,一種環(huán)形數(shù)據(jù)庫,專門設(shè)計(jì)來存儲時(shí)序數(shù)據(jù))
- graphite-web:Django框架實(shí)現(xiàn)的一個(gè)webapp白粉,可以從whisper數(shù)據(jù)庫獲取時(shí)間序列數(shù)據(jù)并且進(jìn)行展示
小結(jié):Graphite是一個(gè)被動接收的時(shí)間序列數(shù)據(jù)庫传泊,但提供了數(shù)據(jù)展示的功能。數(shù)據(jù)采集agent鸭巴、警報(bào)等其它的功能眷细,需要引入第三方軟件來支持。
Prometheus
有一套完整的監(jiān)控和趨勢系統(tǒng)鹃祖,在時(shí)序數(shù)據(jù)基礎(chǔ)上內(nèi)建主動抓取溪椎,搜索,繪圖和報(bào)警系統(tǒng),有豐富的官方和第三方貢獻(xiàn)的監(jiān)控收集工具(exporters).
全能監(jiān)控校读,提供了基于時(shí)間序列數(shù)據(jù)的數(shù)據(jù)采集沼侣、存儲、查詢歉秫、畫圖和告警的功能
采用主動(pull)采集的方式蛾洛,知道被監(jiān)控的系統(tǒng)是什么樣子的(哪個(gè)endpoints應(yīng)該存在,那種時(shí)間序列模式意味著出問題)端考,能夠?yàn)閱栴}診斷提供強(qiáng)力的支持
二、數(shù)據(jù)模型
- 兩者大體一致揭厚,Prometheus提供更加豐富的metadata模型:
- Graphite 的metric名稱以點(diǎn)"."分割組件却特,這種方式是一種維度的編碼方式,通過"."來潛在的提供分割數(shù)據(jù)標(biāo)識筛圆。
- Prometheus 在提供metric名稱之外裂明,明確的通過標(biāo)簽鍵值對標(biāo)識metric不同的維度,更易于通過查詢語句來過濾太援、分組闽晦、匹配metrics。
- 當(dāng)Graphite和StatsD結(jié)合使用時(shí)提岔,它存儲的數(shù)據(jù)一般是聚合過后的數(shù)據(jù)(維度降低)仙蛉,Prometheus存原維度數(shù)據(jù)(這些數(shù)據(jù)有不同的維度,能夠根據(jù)這些數(shù)據(jù)來定位更細(xì)節(jié)的問題)碱蒙。
例子
- 使用Graphite/StatsD存儲狀態(tài)碼為500荠瘪、方法是POST、路徑是"/tracks"赛惩、服務(wù)名稱為api-server(api-server有多個(gè)實(shí)例)的http請求數(shù)哀墓,這樣一個(gè)監(jiān)控指標(biāo):
stats.api-server.tracks.post.500 -> 93
- 使用Prometheus存儲同樣的監(jiān)控指標(biāo):
api_server_http_requests_total{method="POST",handler="/tracks",status="500",instance="<sample1>"} -> 34
api_server_http_requests_total{method="POST",handler="/tracks",status="500",instance="<sample2>"} -> 28
api_server_http_requests_total{method="POST",handler="/tracks",status="500",instance="<sample3>"} -> 31
即:Prometheus支持更高維度的監(jiān)控指標(biāo)
三、存儲
- Graphite 使用Whisper格式在本地磁盤存儲時(shí)間序列數(shù)據(jù)喷兼。Whisper是RRD-style database篮绰,它要求到達(dá)的采樣數(shù)據(jù)間隔固定。每一個(gè)時(shí)間序列存儲在一個(gè)單獨(dú)的文件季惯,在一定時(shí)間之后新的采樣數(shù)據(jù)會覆蓋老得數(shù)據(jù)吠各。
- Prometheus 也為每一個(gè)時(shí)間序列創(chuàng)建一個(gè)本地文件,但是允許以任意時(shí)間間隔存儲采樣數(shù)據(jù)(數(shù)據(jù)采集勉抓、規(guī)則計(jì)算評估時(shí)間任意)走孽。舊數(shù)據(jù)可以是任意長度,新的采樣數(shù)據(jù)只是簡單的附加在老數(shù)據(jù)的后面琳状。Prometheus針對短生命周期磕瓷、頻繁更改標(biāo)簽集合的時(shí)間序列也能和好的支持。
四、總結(jié)
- Prometheus提供更豐富的數(shù)據(jù)模型和查詢語句困食,此外還易于運(yùn)行边翁、整合到已有環(huán)境中。
- 如果想要集群化的解決方案硕盹,能夠存儲長期的歷史數(shù)據(jù)符匾,Graphite可能是更好的選擇。
- 白盒監(jiān)控瘩例,或者需要監(jiān)控一個(gè)動態(tài)的云環(huán)境啊胶,Prometheus更優(yōu)。