選型背景
這次采用開(kāi)源監(jiān)控系統(tǒng)主要是為了監(jiān)控一些自定義業(yè)務(wù)并進(jìn)行告警,所以重點(diǎn)關(guān)注了上傳自定義數(shù)據(jù)、監(jiān)控、顯示、存儲(chǔ)、告警四個(gè)方面,由于公司運(yùn)維已經(jīng)有監(jiān)控機(jī)器指標(biāo)的工具,所以監(jiān)控機(jī)器指標(biāo)這方面不是重點(diǎn)。
各監(jiān)控告警系統(tǒng)簡(jiǎn)介
Zabbix
官方文檔:https://www.zabbix.com/documentation/3.4/zh/manual
官方文檔比較詳細(xì),中英文都有。
后端用C開(kāi)發(fā),界面用PHP開(kāi)發(fā)。
圖形化界面比較成熟,界面上基本能完成全部的配置操作。
Prometheus
第三方中文文檔:https://songjiayang.gitbooks.io/prometheus/content/introduction/what.html
go語(yǔ)言開(kāi)發(fā),前端支持Grafana展示
抓取數(shù)據(jù)是通過(guò)node_exporter插件,這些插件有官方的也有第三方的。引入插件的同時(shí)必須配置監(jiān)控的指標(biāo)。
與其他監(jiān)控框架顯著的不同是支持靈活的查詢(xún)語(yǔ)句(PromQL)
在常用查詢(xún)和統(tǒng)計(jì)方面,PromQL 比 MySQL 簡(jiǎn)單和豐富很多,而且查詢(xún)性能也高不少。
注意
- Prometheus 的數(shù)據(jù)是基于時(shí)序的 float64 的值,如果你的數(shù)據(jù)值有更多類(lèi)型,無(wú)法滿(mǎn)足。
- Prometheus 不適合做審計(jì)計(jì)費(fèi),因?yàn)樗臄?shù)據(jù)是按一定時(shí)間采集的,關(guān)注的更多是系統(tǒng)的運(yùn)行瞬時(shí)狀態(tài)以及趨勢(shì),即使有少量數(shù)據(jù)沒(méi)有采集也能容忍,但是審計(jì)計(jì)費(fèi)需要記錄每個(gè)請(qǐng)求,并且數(shù)據(jù)長(zhǎng)期存儲(chǔ),這個(gè) Prometheus 無(wú)法滿(mǎn)足,可能需要采用專(zhuān)門(mén)的審計(jì)系統(tǒng)。
open-Falcon
官方文檔:http://book.open-falcon.com/zh_0_2/dev/support_grafana.html
后臺(tái)是go語(yǔ)言開(kāi)發(fā),前端支持Grafana展示
抓取數(shù)據(jù)通過(guò)腳本插件抓取日志或調(diào)用CLI,腳本組裝數(shù)據(jù)發(fā)送給主服務(wù)端,配置是可選項(xiàng),在腳本插件處進(jìn)行配置。
- 現(xiàn)在的策略表達(dá)式中只能配置一條規(guī)則,此處應(yīng)該支持配置多條,任何一條觸發(fā),就要發(fā)報(bào)警,不同規(guī)則之間應(yīng)該支持覆蓋
監(jiān)控自定義指標(biāo)
prometheus
Pushgateway是prometheus的一個(gè)重要組件,利用該組件可以實(shí)現(xiàn)自動(dòng)以監(jiān)控指標(biāo),從字面意思來(lái)看,該部件不是將數(shù)據(jù)push到prometheus,而是作為一個(gè)中間組件收集外部push來(lái)的數(shù)據(jù)指標(biāo),prometheus會(huì)定時(shí)從pushgateway上pull數(shù)據(jù)。
pushgateway并不是將Prometheus的pull改成了push,它只是允許用戶(hù)向他推送指標(biāo)信息,并記錄。而Prometheus每次從 pushgateway拉取的數(shù)據(jù)并不是期間用戶(hù)推送上來(lái)的所有數(shù)據(jù),而是client端最后一次push上來(lái)的數(shù)據(jù)。因此需設(shè)置client端向pushgateway端push數(shù)據(jù)的時(shí)間小于等于prometheus去pull數(shù)據(jù)的時(shí)間,這樣一來(lái)可以保證prometheus的數(shù)據(jù)是最新的。
需要注意的點(diǎn)
如果client一直沒(méi)有推送新的指標(biāo)到pushgateway,那么Prometheus獲取到的數(shù)據(jù)是client最后一次push的數(shù)據(jù),直到指標(biāo)消失(默認(rèn)5分鐘)。
Prometheus本身是不會(huì)存儲(chǔ)指標(biāo)的,但是為了防止pushgateway意外重啟、工作異常等情況的發(fā)送,在pushgateway處允許指標(biāo)暫存,參數(shù)--persistence.interval=5m,默認(rèn)保存5分鐘,5分鐘后,本地存儲(chǔ)的指標(biāo)會(huì)刪除。
prometheus官方提供了Java工具類(lèi)用來(lái)上傳自定義指標(biāo)到pushgateway
特點(diǎn)
- prometheus默認(rèn)采用pull模式,由于不在一個(gè)網(wǎng)絡(luò)或者防火墻的問(wèn)題,導(dǎo)致prometheus 無(wú)法拉取各個(gè)節(jié)點(diǎn)的數(shù)據(jù)。
- 監(jiān)控業(yè)務(wù)數(shù)據(jù)時(shí),需要將不同數(shù)據(jù)匯總,然后由prometheus統(tǒng)一收集
缺陷
將多個(gè)節(jié)點(diǎn)數(shù)據(jù)匯總到 pushgateway, 如果 pushgateway 掛了,受影響比多個(gè) target 大。
Prometheus 拉取狀態(tài)
up
只針對(duì) pushgateway, 無(wú)法做到對(duì)每個(gè)節(jié)點(diǎn)有效。Pushgateway 可以持久化推送給它的所有監(jiān)控?cái)?shù)據(jù)。
因此,即使你的監(jiān)控已經(jīng)下線,prometheus 還會(huì)拉取到舊的監(jiān)控?cái)?shù)據(jù),需要手動(dòng)清理 pushgateway 不要的數(shù)據(jù)。
Open-falcon
如果需要監(jiān)控自定義指標(biāo),有兩種方式
- 需要自己通過(guò)Http Push指標(biāo)數(shù)據(jù)到Client的Agent組件提供的接口,再通過(guò)組件Agent上報(bào)數(shù)據(jù)到open-falcon主服務(wù)上的Transfer組件做一個(gè)匯總。
- 編寫(xiě)采集腳本,用什么語(yǔ)言寫(xiě)沒(méi)關(guān)系,只要目標(biāo)機(jī)器上有運(yùn)行環(huán)境就行,腳本本身要有可執(zhí)行權(quán)限。采集到數(shù)據(jù)之后直接打印到stdout即可,agent會(huì)截獲并push給server。數(shù)據(jù)格式是json。
官方推薦把采集腳本放到業(yè)務(wù)程序發(fā)布包中,隨著業(yè)務(wù)代碼上線而上線,隨著業(yè)務(wù)代碼升級(jí)而升級(jí),這樣會(huì)比較容易管理。
Agent上傳數(shù)據(jù)的間隔時(shí)間是可配置的。
transfer是數(shù)據(jù)轉(zhuǎn)發(fā)服務(wù)。它接收agent上報(bào)的數(shù)據(jù),然后按照哈希規(guī)則進(jìn)行數(shù)據(jù)分片、并將分片后的數(shù)據(jù)分別push給graph&judge等組件。
Transfer接收數(shù)據(jù)時(shí)會(huì)做少量緩存,提供重試機(jī)制。
自定義數(shù)據(jù)格式
[
{
"endpoint": "test-endpoint",
"metric": "test-metric",
"timestamp": ts,
"step": 60,
"value": 1,
"counterType": "GAUGE",
"tags": "idc=lg,loc=beijing",
}
]
字段說(shuō)明:
- metric: 最核心的字段,代表這個(gè)采集項(xiàng)具體度量的是什么, 比如是cpu_idle呢,還是memory_free, 還是qps
- endpoint: 標(biāo)明Metric的主體(屬主),比如metric是cpu_idle,那么Endpoint就表示這是哪臺(tái)機(jī)器的cpu_idle
- timestamp: 表示匯報(bào)該數(shù)據(jù)時(shí)的unix時(shí)間戳,注意是整數(shù),代表的是秒
- value: 代表該metric在當(dāng)前時(shí)間點(diǎn)的值,float64
- step: 表示該數(shù)據(jù)采集項(xiàng)的匯報(bào)周期,這對(duì)于后續(xù)的配置監(jiān)控策略很重要,必須明確指定。
- counterType: 只能是COUNTER或者GAUGE二選一,前者表示該數(shù)據(jù)采集項(xiàng)為計(jì)時(shí)器類(lèi)型,后者表示其為原值 (注意大小寫(xiě))
- GAUGE:即用戶(hù)上傳什么樣的值,就原封不動(dòng)的存儲(chǔ)
- COUNTER:指標(biāo)在存儲(chǔ)和展現(xiàn)的時(shí)候,會(huì)被計(jì)算為speed,即(當(dāng)前值 - 上次值)/ 時(shí)間間隔
- tags: 一組逗號(hào)分割的鍵值對(duì), 對(duì)metric進(jìn)一步描述和細(xì)化, 可以是空字符串. 比如idc=lg,比如service=xbox等,多個(gè)tag之間用逗號(hào)分割
說(shuō)明:這7個(gè)字段都是必須指定
Zabbix
zabbix中監(jiān)控項(xiàng)叫做item,監(jiān)控項(xiàng)的取值方法叫做key。
item: Items是從agnet主機(jī)里面獲取的所有數(shù)據(jù)。通常情況下我叫itme為監(jiān)控項(xiàng),item由key+參數(shù)組成。
Key:我們可以理解為key是item的唯一標(biāo)識(shí),在agent端有很多監(jiān)控項(xiàng),zabbix-server根據(jù)key區(qū)分不同的監(jiān)控項(xiàng)。
zabbix_server通過(guò)發(fā)送key給zabbix_agent,然后agent端口根據(jù)key執(zhí)行設(shè)定好的sheel腳本,把所要監(jiān)控的item的最新數(shù)據(jù)返回給server端。同Open-falcon的第二種方式大致相同,不同點(diǎn)在于數(shù)據(jù)格式。zabbix是k-v鍵值串。value支持五種格式:數(shù)字(無(wú)正負(fù))、浮點(diǎn)數(shù)、字符、日志、文本。
總結(jié)
Zabbix創(chuàng)建自定義監(jiān)控任務(wù),獲取自定義數(shù)據(jù)指標(biāo)只能通過(guò)執(zhí)行設(shè)定好的腳本獲取腳本print出的值,如果希望實(shí)現(xiàn)java業(yè)務(wù)上的監(jiān)控,沒(méi)有現(xiàn)成的插件或Api調(diào)用,只能通過(guò)調(diào)用腳本(比如腳本調(diào)用Mysql客戶(hù)端直接查庫(kù)或者Curl訪問(wèn))的方式,比較迂回,沒(méi)有像Prometheus直接調(diào)用官方Java的Api、Open-falcon通過(guò)Http上傳數(shù)據(jù)這樣來(lái)的方便且安全。
顯示
Open-falcon
前后端組件可以分開(kāi)部署
默認(rèn)的Dashboard監(jiān)控指標(biāo)效果圖
除了默認(rèn)的之外,支持Grafana視圖展現(xiàn),Grafana可以很有彈性的自定義圖表,并且可以針對(duì)Dashboard 做權(quán)限控管、上標(biāo)簽以及查詢(xún),圖表的展示選項(xiàng)也更多樣化。
Grafana監(jiān)控指標(biāo)效果圖
Prometheus
Prometheus 自帶了 Web Console, 安裝成功后可以訪問(wèn) http://localhost:9090/graph
頁(yè)面,用它可以進(jìn)行 PromQL 查詢(xún)和調(diào)試工作
效果圖
Prometheus同樣支持Grafana數(shù)據(jù)展示。
Zabbix
Zabbix的使用手冊(cè)文檔很全面,頁(yè)面的功能及使用方式介紹的很清晰。
默認(rèn)的頁(yè)面顯示效果圖
Zabbix也支持Grafana視圖展示。
存儲(chǔ)
Open-falcon
Open-falcon存儲(chǔ)數(shù)據(jù)用了三個(gè)數(shù)據(jù)庫(kù)分別是MySQL、Redis、RRDTool(一種時(shí)序數(shù)據(jù)庫(kù))。
Open-falcon存儲(chǔ)過(guò)程主要是靠Graph組件,將索引部署保存在MySQL中,監(jiān)控?cái)?shù)據(jù)保存在RRD中,使用一致性哈希來(lái)對(duì)數(shù)據(jù)做均勻的分片。
Redis主要用于存儲(chǔ)judge產(chǎn)生的報(bào)警event,alarm從redis讀取處理event,已經(jīng)發(fā)送的報(bào)警事件會(huì)寫(xiě)入MySQL。
數(shù)據(jù)存儲(chǔ)的流程大致為:
大致流程為:
- 接收數(shù)據(jù)=>保存監(jiān)控?cái)?shù)據(jù)=>保存索引=>保存歷史數(shù)據(jù)
- 定期將內(nèi)存數(shù)據(jù)GraphItems寫(xiě)入磁盤(pán)
- 定期更新索引到mysql
1、2、3這三個(gè)過(guò)程并行運(yùn)行。
流程圖:
Prometheus
Prometheus內(nèi)部主要分為三大塊,Retrieval是負(fù)責(zé)定時(shí)去暴露的目標(biāo)頁(yè)面上去抓取采樣指標(biāo)數(shù)據(jù),Storage是負(fù)責(zé)將采樣數(shù)據(jù)寫(xiě)磁盤(pán),PromQL是Prometheus提供的查詢(xún)語(yǔ)言模塊。
通過(guò)這張架構(gòu)圖可以看出,Prometheus的本地存儲(chǔ)使用了tsdb時(shí)序數(shù)據(jù)庫(kù)。本地存儲(chǔ)的優(yōu)勢(shì)就是運(yùn)維簡(jiǎn)單,缺點(diǎn)就是無(wú)法海量的metrics持久化和數(shù)據(jù)存在丟失的風(fēng)險(xiǎn)。
為了解決單節(jié)點(diǎn)存儲(chǔ)的限制,prometheus沒(méi)有自己實(shí)現(xiàn)集群存儲(chǔ),而是提供了遠(yuǎn)程讀寫(xiě)的接口,讓用戶(hù)自己選擇合適的時(shí)序數(shù)據(jù)庫(kù)來(lái)實(shí)現(xiàn)prometheus的擴(kuò)展性。
Prometheus通過(guò)下面兩種方式來(lái)實(shí)現(xiàn)與其他的遠(yuǎn)端存儲(chǔ)系統(tǒng)對(duì)接
- Prometheus 按照標(biāo)準(zhǔn)的格式將metrics寫(xiě)到遠(yuǎn)端存儲(chǔ)
- Prometheus 按照標(biāo)準(zhǔn)格式從遠(yuǎn)端的url來(lái)讀取metrics
Zabbix
數(shù)據(jù)存儲(chǔ)在Mysql中,Zabbix 3.4.6版本開(kāi)始支持歷史數(shù)據(jù)存儲(chǔ)到Elasticsearch。
總結(jié)
如果只是短期存儲(chǔ)和查詢(xún),那么Prometheus、Open-falcon、zabbix現(xiàn)有的都能滿(mǎn)足要求。但如果要對(duì)大量數(shù)據(jù)進(jìn)行分析預(yù)測(cè)等過(guò)程,則三者都需要轉(zhuǎn)用其他可接入spark、mapreduce等的數(shù)據(jù)庫(kù)。Open-falcon需要進(jìn)行二次開(kāi)發(fā),Prometheus提供了遠(yuǎn)程讀寫(xiě)的接口。Zabbix網(wǎng)上沒(méi)查到二次開(kāi)發(fā)使用MySQL、ES外其他數(shù)據(jù)庫(kù)的,而且Zabbix后臺(tái)用C開(kāi)發(fā),二次開(kāi)發(fā)的難度也比較大。
報(bào)警
Open-falcon
Open-falcon的報(bào)警主要通過(guò)judge、Alarm、AlarmManager三個(gè)組件來(lái)實(shí)現(xiàn)。
Judge用于告警判斷,agent將數(shù)據(jù)push給Transfer,Transfer不但會(huì)轉(zhuǎn)發(fā)給Graph組件來(lái)繪圖,還會(huì)轉(zhuǎn)發(fā)給Judge用于判斷是否觸發(fā)告警。
alarm模塊是處理報(bào)警event的,judge產(chǎn)生的報(bào)警event寫(xiě)入redis,alarm從redis讀取處理,并進(jìn)行不同渠道的發(fā)送。
AlarmManager模塊主要有兩大功能,一個(gè)用于注冊(cè)告警數(shù)據(jù)接收服務(wù)、提供告警事件多條件查詢(xún)功能;另外一個(gè)是針對(duì)告警事件升級(jí)為故障,定制化處理功能。
目前功能有:
- 可配置報(bào)警級(jí)別,比如P0/P1/P2等等,每個(gè)及別的報(bào)警都會(huì)對(duì)應(yīng)不同的redis隊(duì)列
- 報(bào)警消息聚類(lèi),針對(duì)同一個(gè)策略發(fā)出的多條報(bào)警,在MySQL存儲(chǔ)的時(shí)候會(huì)聚類(lèi)
- 報(bào)警合并,有的時(shí)候報(bào)警短信、郵件太多,對(duì)于優(yōu)先級(jí)比較低的報(bào)警,希望做報(bào)警合并,這些邏輯都是在alarm中做的。
- 針對(duì)告警信息生成一個(gè)跟進(jìn)事件(事件定義為故障),可以將告警事件的處理過(guò)程通過(guò)時(shí)間軸管理起來(lái),可新增、更改故障、增加告警時(shí)間、關(guān)注、狀態(tài)變更(關(guān)閉、廢棄、重新打開(kāi))、輸出故障時(shí)間軸
- 告警管理,可指定接收者和其他條件快速過(guò)濾關(guān)注的告警、告警數(shù)量、已經(jīng)添加至故障的告警信息等
目前告警管理數(shù)據(jù)來(lái)源于alarm組件推的方式。alarm-manager組件實(shí)現(xiàn)告警數(shù)據(jù)的自管理,組件提供專(zhuān)門(mén)的接收數(shù)據(jù)接口,其它告警數(shù)據(jù)通道可按照一定數(shù)據(jù)格式進(jìn)行推動(dòng),用于其它監(jiān)控平臺(tái)的數(shù)據(jù)流入、告警管理。
配置報(bào)警策略的時(shí)候open-falcon支持多種報(bào)警觸發(fā)函數(shù),比如all(#3)
diff(#10)
等等。 這些#后面的數(shù)字表示的是最新的歷史點(diǎn),比如#3
代表的是最新的三個(gè)點(diǎn)。該數(shù)字默認(rèn)不能大于10
,大于10
將當(dāng)作10
處理,即只計(jì)算最新10
個(gè)點(diǎn)的值。(#
后面的數(shù)字的最大值,即在 judge 內(nèi)存中保留最近幾個(gè)點(diǎn),是支持自定義的,)
報(bào)警策略:
all(#3): 最新的3個(gè)點(diǎn)都滿(mǎn)足閾值條件則報(bào)警
max(#3): 對(duì)于最新的3個(gè)點(diǎn),其最大值滿(mǎn)足閾值條件則報(bào)警
min(#3): 對(duì)于最新的3個(gè)點(diǎn),其最小值滿(mǎn)足閾值條件則報(bào)警
sum(#3): 對(duì)于最新的3個(gè)點(diǎn),其和滿(mǎn)足閾值條件則報(bào)警
avg(#3): 對(duì)于最新的3個(gè)點(diǎn),其平均值滿(mǎn)足閾值條件則報(bào)警
diff(#3): 拿最新push上來(lái)的點(diǎn)(被減數(shù)),與歷史最新的3個(gè)點(diǎn)(3個(gè)減數(shù))相減,得到3個(gè)差,只要有一個(gè)差滿(mǎn)足閾值條件則報(bào)警
pdiff(#3): 拿最新push上來(lái)的點(diǎn),與歷史最新的3個(gè)點(diǎn)相減,得到3個(gè)差,再將3個(gè)差值分別除以減數(shù),得到3個(gè)商值,只要有一個(gè)商值滿(mǎn)足閾值則報(bào)警
lookup(#2,3): 最新的3個(gè)點(diǎn)中有2個(gè)滿(mǎn)足條件則報(bào)警;
stddev(#7) = 3:離群點(diǎn)檢測(cè)函數(shù),取最新 **7** 個(gè)點(diǎn)的數(shù)據(jù)分別計(jì)算得到他們的標(biāo)準(zhǔn)差和均值,分別計(jì)為 σ 和 μ,其中當(dāng)前值計(jì)為 X,那么當(dāng) X 落在區(qū)間 [μ-3σ, μ+3σ] 之外時(shí),則認(rèn)為當(dāng)前值波動(dòng)過(guò)大,觸發(fā)報(bào)警;更多請(qǐng)參考3-sigma算法:https://en.wikipedia.org/wiki/68%E2%80%9395%E2%80%9399.7_rule。
支持的通知方式:
- 短信
- 微信
- 郵件
- 電話(huà)
需要提供Http的發(fā)送接口。
Prometheus
Prometheus的告警通過(guò)組件AlertManager來(lái)實(shí)現(xiàn)。報(bào)警過(guò)程分為兩步,根據(jù)創(chuàng)建的告警規(guī)則發(fā)送警報(bào)給Altermanager。Altermanager然后管理這些警告,包括沉默,禁用,聚合和通過(guò)各種方式例如email,pagerDuty和HipChat發(fā)送通知。
配置配置報(bào)警和發(fā)送通知的主要步驟有:
- 設(shè)置和配置Alertmanager。
- 配置Prometheu去通知Alertmanager。
- 在Prometheus中創(chuàng)建報(bào)警規(guī)則。
告警流程圖:
目前功能有:
- 告警分組,作為用戶(hù)同類(lèi)報(bào)警只想看到單一的報(bào)警頁(yè)面,同時(shí)仍然能夠清楚的看到哪些實(shí)例受到影響,因此,人們通過(guò)配置Alertmanager將警報(bào)分組打包,并發(fā)送一個(gè)相對(duì)看起來(lái)緊湊的通知。
- 抑制,抑制是指當(dāng)警報(bào)發(fā)出后,停止重復(fù)發(fā)送由此警報(bào)引發(fā)其他錯(cuò)誤的警報(bào)的機(jī)制。
- 靜默,其實(shí)就相當(dāng)于限流,一定時(shí)間內(nèi)不再為滿(mǎn)足設(shè)定規(guī)則的用戶(hù)發(fā)送告警。
- 告警延時(shí),假設(shè)系統(tǒng)發(fā)生故障產(chǎn)生告警,每分鐘發(fā)送一條告警消息,這樣的告警信息十分令人崩潰。Alertmanager提供第一個(gè)參數(shù)是repeat interval,可以將重復(fù)的告警以更大頻率發(fā)送。
通知方式則是使用WebHook來(lái)實(shí)現(xiàn),支持釘釘機(jī)器人、企業(yè)微信、電話(huà)、短信、郵件等,資料比較少。
Zabbix
報(bào)警流程:
首先item(監(jiān)控項(xiàng))拿到server端的數(shù)據(jù),收集到數(shù)據(jù)后,如果它和一個(gè)trigger(觸發(fā)器)綁定了,那么會(huì)檢查trigger的狀態(tài)。
是否變成異常狀態(tài),然后按照trigger的狀態(tài)生成一個(gè)事件(無(wú)論狀態(tài)變與不變都會(huì)生成),最后檢查報(bào)警動(dòng)作。其實(shí)也就是滿(mǎn)足Trigger的觸發(fā)條件便會(huì)執(zhí)行綁定的Action(動(dòng)作)
定義觸發(fā)器的表達(dá)式,其實(shí)就是配置報(bào)警的觸發(fā)條件,定義頁(yè)面如下圖
配置觸發(fā)器頁(yè)面
選擇觸發(fā)器級(jí)別
創(chuàng)建Action的頁(yè)面大同小異。
總結(jié)
Zabbix文檔資料較少,配置項(xiàng)不多,功能不夠豐富,優(yōu)點(diǎn)是直接可以在頁(yè)面上進(jìn)行配置;Prometheus功能比Zabbix多,比Open-falcon少,配置項(xiàng)多但文檔不夠詳細(xì);Open-falcon功能豐富,官方文檔也比較詳細(xì)。
整體總結(jié)
這次采用開(kāi)源監(jiān)控系統(tǒng)主要是為了監(jiān)控一些自定義業(yè)務(wù)并進(jìn)行告警,所以重點(diǎn)關(guān)注了上傳自定義數(shù)據(jù)、監(jiān)控、顯示、存儲(chǔ)、告警五個(gè)方面,由于公司運(yùn)維已經(jīng)有監(jiān)控機(jī)器指標(biāo)的工具,所以監(jiān)控機(jī)器指標(biāo)這方面不是重點(diǎn)。
Zabbix后臺(tái)采用了C語(yǔ)言,監(jiān)控?cái)?shù)據(jù)存儲(chǔ)在關(guān)系型數(shù)據(jù)庫(kù)內(nèi),如MySQL,很難從現(xiàn)有數(shù)據(jù)擴(kuò)展維度,定制化難度較高,自定義監(jiān)控指標(biāo)的接入只能依靠shell腳本的運(yùn)行,監(jiān)控及告警的配置功能不夠豐富,所以?xún)?yōu)先排除。
Prometheus和Open-falcon后臺(tái)都是采用Go編寫(xiě),相對(duì)C而言要好二次開(kāi)發(fā)一些。Prometheus支持PromQL數(shù)據(jù)查詢(xún)語(yǔ)言,對(duì)比常用的SQL語(yǔ)言而言查詢(xún)性能高、Prometheus在集群存儲(chǔ)方面官方提供了接口方便擴(kuò)展對(duì)流處理有優(yōu)勢(shì)的數(shù)據(jù)庫(kù),如果需要對(duì)數(shù)據(jù)進(jìn)行預(yù)測(cè)的話(huà)Prometheus有著較大的優(yōu)勢(shì),Open-falcon雖然不方便擴(kuò)展,但目前功能也足夠使用。監(jiān)控自定義指標(biāo)Prometheus官方也提供了對(duì)應(yīng)的Java接口,Open-falcon雖然沒(méi)有提供,但是編寫(xiě)上傳數(shù)據(jù)接口的難度也不大。Open-falcon在報(bào)警規(guī)則、告警通知配置方面功能要比Prometheus豐富。
最后總結(jié),如果有需要對(duì)監(jiān)控指標(biāo)趨勢(shì)進(jìn)行預(yù)測(cè)的話(huà),選擇Prometheus。如果不需要預(yù)測(cè)的話(huà),選擇Open-falcon。
文中如果有錯(cuò)誤,歡迎批評(píng)指正。