說明
zabbix作為監控軟體,有時也會需要獲取歷史資料作進一步的分析,通常可以採用3種辦法:
- 透過zabbix API定期獲取(透過web)
- 透過後端資料庫定期讀取(透過db)
- 應用實時匯出功能配合filebeat或其他工具獲取(透過server)
對比以上三種方法:
- 實時性:毫無疑問,透過實時匯出功能將資料傳送出去是實時性最好的,週期性呼叫API或者讀取資料庫都存在一定的延時。
- 暴露面:透過API暴露資料是最合理的,因為web服務本身就是對外的;資料庫一般情況下不應該對外暴露,甚至不需要公網地址;而server則需要分情況討論,如果涉及外網proxy或者agent,則也需要有公網地址,而如果僅僅作內網的監控,則不需要具備公網地址。
- 安全性:透過實時匯出主動傳送資料是安全性最好的,因為不存在任何的入訪機會;而使用API或者讀取資料都必須要開放入訪和提供密碼或者token,需要透過做白名單、管控賬號許可權來保證安全性。
- 靈活性:實時匯出會把任何群組、任何主機的的歷史、趨勢和事件全部匯出,無法做任何篩選處理,API可以透過賬號許可權實現管控,資料庫可以設定賬號的具體許可權
本文將介紹第三種方法,將歷史資料匯出為檔案,以備其他工具處理。
配置
修改配置檔案
如果zabbix部署方式為編譯或者rpm,則修改zabbix_server.conf配置檔案,注意3個欄位的配置:
- ExportDir: 匯出檔案的目錄,注意此目錄一定要有寫許可權,會以history syncer程序的數量建立檔案
- ExportFileSize: 限制匯出檔案的大小,預設是1G,如果檔案超出,則以 .old 結尾重新命名該檔案,並建立一個和原名稱相同的新檔案
- ExportType: 匯出資料的型別,包括events、history、trends,如果不設定,則預設為全部
示例如下:
ExportDir:/zabbix/history/
ExportFileSize:500M
ExportType:history,trends
配置完成後重啟zabbix_server生效。
修改docker容器環境變數
如果zabbix部署方式為容器,則需要配置環境變數,相關的2個環境變數為:ZBX_EXPORTFILESIZE
、ZBX_EXPORTTYPE
,目錄變數無法修改,因為固定位於容器內的/var/lib/zabbix/export/
目錄下
為對歷史資料檔案進行讀取,需要做一個卷對映,將容器內的檔案對映到宿主機上
示例如下:
……
-e ZBX_EXPORTFILESIZE="500M" -e ZBX_EXPORTTYPE="history" \
……
-v /zabbix/history:/var/lib/zabbix/export \
以此配置建立容器
資料檔案處理
完成配置並啟動後,會在設定的目錄下(本例中為/zabbix/history/)生成名為history-history-syncer-*.ndjson(本例中只儲存了history資料)的一批檔案,數量對應history syncer程序,例如有10個程序,則會生成名為syncer-[1-10]的ndjson檔案。
檔案格式示例為:
{"host":{"host":"Host B","name":"Host B visible"},"groups":["Group X","Group Y","Group Z"],"item_tags":[{"tag":"Application","value":"system"}],"itemid":3,"name":"Agent availability","clock":1519304285,"ns":123456789,"value":1,"type":3}
可以透過filebeat之類工具進行資料的實時處理。
定時刪除檔案
如果監控項很多,資料的增長速度可能會比較快,本實驗環境中監控項有17萬,所有歷史資料檔案大小總和以7-10M/分鐘的速度增長。如果硬碟空間沒有預留足夠,可能不出幾天就會被寫滿。首先可以增加資料盤,以保留更久的資料,然而不管硬碟多大,時間久了總歸還是會寫滿的,可以設定一個crontab的指令碼,每隔一段時間去刪除.old檔案。
示例如下:
0 * * * * rm -f /zabbix/history/history-history-syncer-*.ndjson.old
每小時進行一次檢查,刪除/zabbix/history目錄下的history-history-syncer-*.ndjson.old檔案。