對于運維監控來說,最為廣泛使用的開源監控系統是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