天天看點

zabbix與prometheus的簡單對比

作者:運維雜談

對于運維監控來說,最為廣泛使用的開源監控系統是zabbix和prometheus。zabbix是運維監控系統裡面的一員老将了,其在基礎監控方面有着廣泛的使用者使用基礎;prometheus則是一位後起之秀,伴随着容器技術的逐漸發展越來越受到使用者的青睐,兩個監控系統各有其擅長的領域。

zabbix

功能強大的開源監控系統,主要覆寫主機、網絡、應用程式的監控,具有資料采集、告警觸發、告警通知等功能。資料采集上支援agent資料采集、被動式資料監控(通過SNMP, IPMI等),同時支援通過插件和自定義腳本的方式來擴充資料采集功能。

prometheus

雲原生開源監控系統,核心功能在于時序資料的收集與分析,其自帶資料庫,并有一套專門的PromQL查詢文法,其在容器監控方面相比zabbix具有極大的優勢,在雲原生時代,使用kubernetes的場景中,prometheus技術算是必備的監控手段。一般在使用時會搭配alertmanager。

表1是兩者的特點對比:

zabbix prometheus
功能 采集、分析、告警 采集、分析、告警
開發語言 C、PHP Golang
資料庫 MySQL PostgreSQL SQLite Oracle IBMDB2 自帶tsdb
使用規模 中小型規模 規模不限
資料模型/查詢語言 資料模型和查詢語言

計數器(counter)、儀表盤(gauge)、直方圖(histogram)、摘要(summary)

四種資料模型

包含名額、标簽,聚合函數

PromQL查詢文法

告警 自帶告警,web配置 結合alertmanager通知
可視化 Web功能較多 簡單的頁面、僅支援查詢
配置

手動配置

很難适應多變的環境

可自動化配置、自發現服務名額
擴充性 可擴充 可擴充
優勢場景 傳統監控 雲原生監控
資料采集 Agent/插件、腳本 自發現、exporter

表1. zabbix與prometheus特點對比

應該選擇哪一款監控系統,其實還需要企業根據自身的特點來決定。很多時候是将這些系統和其他系統進行組合使用,建構适合企業運維場景的監控體系。具體到實踐中該如何取舍,就需要更多地了解它們的特性。

zabbix會消耗更多的系統資源,一旦監控的規模上來之後,zabbix自身會存在性能瓶頸,而且由于預設使用的是關系DB存儲,是以在查詢性能以及存儲空間方面不如prometheus。實踐中可能會通過部署多套獨立的zabbix來解決規模問題,或者通過二次開發将資料轉存到opentsdb這種時序資料庫等方法來解決,也可以使用postgresql的擴充為TimescaleDB,不過目前該項技術還處于實驗性階段。

prometheus其本身在資料展示方面比較簡單,在告警的處理上也隻是簡單的通知,是以一般情況下會結合grafana進行資料展示,與alertmanager結合進行告警的抑制、屏蔽等。其告警規則由于采用PromQL文法,與zabbix在告警原理上存在本質不同,是以可以配置更加強大和複雜的告警規則,基本可以覆寫日常的所有告警場景,很多告警名額無需要提前生成。當然prometheus的告警也并非完美,比如某項監控名額如果在某段時間内沒有上報資料,就可能導緻告警誤報的情況,即nodata問題,這個在後續文章中将講述如何處理。

何時zabbix最優

1.規模較小,小于1000台裝置,無需處理海量名額

2.需要監控伺服器、網絡裝置等傳統基礎監控資訊

4. 需要豐富的監控功能元件和預定義模闆

何時prometheus最優

1.需要監控容器、服務網格、微服務等雲原生環境

2.規模較大、名額多、高可擴充性

3.需要更加豐富的告警規則、更加全面的資料分析

監控系統也不是一勞永逸,如何充分利用好這些系統,還有很多事情需要去做。比如zabbix中的主機監控,如何去維護hostgroup、配置各種模闆、網絡自發現、自動加監控、去監控、進行監控資料的後處理,分析等。promethues中如何進行資料清洗、資料豐富,如何配置告警規則生效時間,關聯cmdb、告警事件後續如何處理等等。

很多公司由于開展監控比較早,是以可能同時存在這兩套監控系統,各取所長。為了充分利用prometheus在資料分析處理方面的優勢,我們也可以将zabbix的數值型資料轉換到prometheus的tsdb資料庫中,統一對資料進行監控、分析等。

将zabbix監控資料轉換為prometheus的tsdb資料的方法一般有兩種,一種是直接通過讀取資料庫資料進行轉換,另一種是通過zabbix的api進行讀取,通過api讀取比較簡單,可以不用關注zabbix本身存儲的是哪種資料格式。

關于zabbix轉換到prometheus的方法,可以參考

ops-tools/monitor/collectors/zabbix2tsdb at main · veops/ops-tools · GitHub