新公司要上監(jiān)控,面試提到了 Prometheus 是公司需要的監(jiān)控解決方案,我當(dāng)然是選擇跟風(fēng)了。
之前主要做的是 Zabbix,既然公司需要 Prometheus,那沒辦法,只能好好對(duì)比一番,了解下,畢竟技多不壓身。
但稍稍深入一點(diǎn),我就體會(huì)到了 Prometheus 的優(yōu)點(diǎn),總結(jié)一下這兩種監(jiān)控方式。
兩種監(jiān)控工具的歷史簡(jiǎn)介
Prometheus
Kubernetes 自從 2012 年開源以來便以不可阻擋之勢(shì)成為容器領(lǐng)域調(diào)度和編排的領(lǐng)頭羊。
Kubernetes 是 Google Borg 系統(tǒng)的開源實(shí)現(xiàn),于此對(duì)應(yīng) Prometheus 則是 Google BorgMon 的開源實(shí)現(xiàn)。
Prometheus 是由 SoundCloud 開發(fā)的開源監(jiān)控報(bào)警系統(tǒng)和時(shí)序列數(shù)據(jù)庫。
從字面上理解,Prometheus 由兩個(gè)部分組成,一個(gè)是監(jiān)控報(bào)警系統(tǒng),另一個(gè)是自帶的時(shí)序數(shù)據(jù)庫(TSDB)。
2016 年,由 Google 發(fā)起的 Linux 基金會(huì)旗下的原生云基金會(huì)(Cloud Native Computing Foundation)將 Prometheus 納入其第二大開源項(xiàng)目。
Prometheus 在開源社區(qū)也十分活躍,在 GitHub 上擁有兩萬多 Star,并且系統(tǒng)每隔一兩周就會(huì)有一個(gè)小版本的更新,而 Prometheus 與它的“師兄”Kubernetes 都自帶云原生的光環(huán),天然能夠友好協(xié)作。
Zabbix
Zabbix 官方的發(fā)行版本時(shí)間可以追朔到 2012 年,時(shí)間上比 Prometheus 早了四年。
Zabbix 是由 Alexei Vladishev 開源的分布式監(jiān)控系統(tǒng),是一個(gè)企業(yè)級(jí)的分布式開源監(jiān)控方案。能夠監(jiān)控各種網(wǎng)絡(luò)參數(shù)以及服務(wù)器健康性和完整性的軟件。使用靈活的通知機(jī)制,允許用戶為幾乎任何事件配置基于郵件的告警。
這樣可以快速反饋服務(wù)器的問題?;谝汛鎯?chǔ)的數(shù)據(jù),提供了出色的報(bào)告和數(shù)據(jù)可視化功能。
架構(gòu)對(duì)比
Prometheus
Prometheus 的基本原理是通過 HTTP 周期性抓取被監(jiān)控組件的狀態(tài),任意組件只要提供對(duì)應(yīng)的 HTTP 接口并且符合 Prometheus 定義的數(shù)據(jù)格式,就可以接入 Prometheus 監(jiān)控。
Prometheus Server 負(fù)責(zé)定時(shí)在目標(biāo)上抓取 Metrics(指標(biāo))數(shù)據(jù)并保存到本地存儲(chǔ)里面。
Prometheus 采用了一種 Pull(拉)的方式獲取數(shù)據(jù),不僅降低客戶端的復(fù)雜度,客戶端只需要采集數(shù)據(jù),無需了解服務(wù)端情況,而且服務(wù)端可以更加方便的水平擴(kuò)展。
如果監(jiān)控?cái)?shù)據(jù)達(dá)到告警閾值 Prometheus Server 會(huì)通過 HTTP 將告警發(fā)送到告警模塊 alertmanger,通過告警的抑制后觸發(fā)郵件或者 webhook。最新 HTTP 面試題整理好了,大家可以在Java面試庫小程序在線刷題。
Prometheus 支持 PromQL 提供多維度數(shù)據(jù)模型和靈活的查詢,通過監(jiān)控指標(biāo)關(guān)聯(lián)多個(gè) tag 的方式,將監(jiān)控?cái)?shù)據(jù)進(jìn)行任意維度的組合以及聚合。
Zabbix
Zabbix 由 2 部分構(gòu)成,Zabbix Server 與可選組件 Zabbix Agent。Zabbix Server 可以通過 SNMP,Zabbix Agent,ping,端口監(jiān)視等方法提供對(duì)遠(yuǎn)程服務(wù)器/網(wǎng)絡(luò)狀態(tài)的監(jiān)視,數(shù)據(jù)收集等功能。
它可以運(yùn)行在 Linux,Solaris,HP-UX,AIX,F(xiàn)ree BSD,Open BSD,OS X 等平臺(tái)上。最新 Linux 面試題整理好了,大家可以在Java面試庫小程序在線刷題。
核心組件主要是 Agent 和 Server,其中 Agent 主要負(fù)責(zé)采集數(shù)據(jù)并通過主動(dòng)或者被動(dòng)的方式采集數(shù)據(jù)發(fā)送到 Server/Proxy,除此之外,為了擴(kuò)展監(jiān)控項(xiàng),Agent 還支持執(zhí)行自定義腳本。
Server 主要負(fù)責(zé)接收 Agent 發(fā)送的監(jiān)控信息,并進(jìn)行匯總存儲(chǔ),觸發(fā)告警等。
Zabbix Server 將收集的監(jiān)控?cái)?shù)據(jù)存儲(chǔ)到 Zabbix Database 中。Zabbix Database 支持常用的關(guān)系型數(shù)據(jù)庫,如果 MySQL、PostgreSQL、Oracle 等,默認(rèn)是 MySQL,并提供 Zabbix Web 頁面(PHP 編寫)數(shù)據(jù)查詢。
Zabbix 由于使用了關(guān)系型數(shù)據(jù)存儲(chǔ)時(shí)序數(shù)據(jù),所以在監(jiān)控大規(guī)模集群時(shí)常常在數(shù)據(jù)存儲(chǔ)方面捉襟見肘。
所以從 Zabbix 4.2 版本后開始支持 TimescaleDB 時(shí)序數(shù)據(jù)庫,不過目前成熟度還不高。
綜合對(duì)比
上面的表格,從開發(fā)語言上看,為了應(yīng)對(duì)高并發(fā)和快速迭代的需求,監(jiān)控系統(tǒng)的開發(fā)語言已經(jīng)慢慢從 C 語言轉(zhuǎn)移到 Go。
不得不說,Go 憑借簡(jiǎn)潔的語法和優(yōu)雅的并發(fā),在 Java 占據(jù)業(yè)務(wù)開發(fā),C 占領(lǐng)底層開發(fā)的情況下,準(zhǔn)確定位中間件開發(fā)需求,在當(dāng)前開源中間件產(chǎn)品中被廣泛應(yīng)用。
從系統(tǒng)成熟度上看,Zabbix 是老牌的監(jiān)控系統(tǒng):Zabbix 是在 1998 年就出現(xiàn)的,系統(tǒng)功能比較穩(wěn)定,成熟度較高。
而 Prometheus 是最近幾年才誕生的,雖然功能還在不斷迭代更新,但站在巨人的肩膀之上,在架構(gòu)設(shè)計(jì)上借鑒了很多老牌監(jiān)控系統(tǒng)的經(jīng)驗(yàn)。
從數(shù)據(jù)存儲(chǔ)方面來看,Zabbix 采用關(guān)系數(shù)據(jù)庫保存,這極大限制了 Zabbix 采集的性能,而 Prometheus 自研一套高性能的時(shí)序數(shù)據(jù)庫,在 V3 版本可以達(dá)到每秒千萬級(jí)別的數(shù)據(jù)存儲(chǔ),通過對(duì)接第三方時(shí)序數(shù)據(jù)庫擴(kuò)展歷史數(shù)據(jù)的存儲(chǔ)。
從配置復(fù)雜度上看,Prometheus 只有一個(gè)核心 server 組件,一條命令便可以啟動(dòng),相比而言,其他系統(tǒng)配置相對(duì)麻煩。
從社區(qū)活躍度上看,目前 Zabbix 比較活躍,但基本都是國(guó)內(nèi)的公司參與,Prometheus 在這方面占據(jù)絕對(duì)優(yōu)勢(shì),社區(qū)活躍度雖然不如,但是受到 CNCF 的支持,后期的發(fā)展值得期待。
從容器支持角度看,由于 Zabbix 出現(xiàn)得比較早,當(dāng)時(shí)容器還沒有誕生,自然對(duì)容器的支持也比較差。
而 Prometheus 的動(dòng)態(tài)發(fā)現(xiàn)機(jī)制,不僅可以支持 Swarm 原生集群,還支持 Kubernetes 容器集群的監(jiān)控,是目前容器監(jiān)控最好解決方案。
總結(jié)
綜合來看,Zabbix 的成熟度更高,上手更快,但更好的集成導(dǎo)致靈活性較差,問題更大是,監(jiān)控?cái)?shù)據(jù)的復(fù)雜度增加后,Zabbix 做進(jìn)一步定制難度很高,即使做好了定制,也沒法利用之前收集到的數(shù)據(jù)了(關(guān)系型數(shù)據(jù)庫造成的問題)。
Prometheus 基本上是正相反,上手難度大一些,但由于定制靈活度高,數(shù)據(jù)也有更多的聚合可能,起步后的使用難度遠(yuǎn)小于 Zabbix。
但如果已經(jīng)對(duì)傳統(tǒng)監(jiān)控系統(tǒng)有技術(shù)積累的話,還是要謹(jǐn)慎考慮更換監(jiān)控。
如果監(jiān)控的是物理機(jī),用 Zabbix 沒毛病,Zabbix 在傳統(tǒng)監(jiān)控系統(tǒng)中,尤其是在服務(wù)器相關(guān)監(jiān)控方面,占據(jù)絕對(duì)優(yōu)勢(shì)。
甚至環(huán)境變動(dòng)不會(huì)很頻繁的情況下,Zabbix 也會(huì)比 Prometheus 好使;但如果是云環(huán)境的話,除非是 Zabbix 玩的非常溜,可以做各種定制,否則還是 Prometheus 吧,畢竟人家就是干這個(gè)的。
Prometheus 開始成為主導(dǎo)及容器監(jiān)控方面的標(biāo)配,并且在未來可見的時(shí)間內(nèi)被廣泛應(yīng)用。
如果是剛剛要上監(jiān)控系統(tǒng)的話,不用猶豫了,Prometheus 準(zhǔn)沒錯(cuò)。
-
Zabbix
+關(guān)注
關(guān)注
0文章
24瀏覽量
3327 -
Prometheus
+關(guān)注
關(guān)注
0文章
26瀏覽量
1703
原文標(biāo)題:Zabbix 和 Prometheus 到底怎么選?千萬別用錯(cuò)了
文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論