監(jiān)控報(bào)警系統(tǒng)搭建及二次開發(fā)經(jīng)驗(yàn)
本次分享的內(nèi)容是監(jiān)控報(bào)警系統(tǒng)搭建,以及基于開源組件的二次開發(fā)。自從接受了公司監(jiān)控報(bào)警系統(tǒng)二期開發(fā)需求以來,我們完成了監(jiān)控?cái)?shù)據(jù)的補(bǔ)全完善、報(bào)警系統(tǒng)搭建調(diào)試和報(bào)警規(guī)則配置界面的開發(fā)。下圖是監(jiān)控報(bào)警系統(tǒng)的架構(gòu)圖,除了業(yè)務(wù)數(shù)據(jù)收集器外,其余全部基于原生開源組件或二次開發(fā)完成,整個(gè)系統(tǒng)采用TICK(telegraf + influxdb + chronograf + kapacitor)架構(gòu),使用go語言實(shí)現(xiàn)。
-
influxdb時(shí)間序列數(shù)據(jù)庫
influxdb數(shù)據(jù)庫是一個(gè)時(shí)間序列數(shù)據(jù)庫,他會(huì)為每行數(shù)據(jù)打上時(shí)間戳,即使數(shù)據(jù)被并發(fā)寫入,也會(huì)按照時(shí)間先后順序存儲(chǔ)。同時(shí)它也是一個(gè)關(guān)系型數(shù)據(jù)庫,可以通過sql語言進(jìn)行增刪改查,學(xué)習(xí)成本低。官方提供了一個(gè)簡(jiǎn)單實(shí)用的web界面,非常地人性化。在工程實(shí)踐中,我們發(fā)現(xiàn)了它的一個(gè)坑,在大數(shù)據(jù)量查詢時(shí)會(huì)crash,重啟后才能恢復(fù),這個(gè)問題仍待研究。不必?fù)?dān)心的是,因?yàn)楸O(jiān)控系統(tǒng)中不存在特別大數(shù)據(jù)量的查詢,生產(chǎn)環(huán)境下influxdb的性能表現(xiàn)十分良好。
-
telegraf數(shù)據(jù)收集器
telegraf是一個(gè)數(shù)據(jù)收集器,負(fù)責(zé)收集所有的原始數(shù)據(jù),格式化后存入influxdb。telegraf內(nèi)置了大量的數(shù)據(jù)輸入、輸出和分析插件,能夠收集php-fpm、nginx、access log、mysql、redis等組件的監(jiān)控?cái)?shù)據(jù)。telegraf的擴(kuò)展性很強(qiáng),開源社區(qū)也十分活躍,來自世界各地的開發(fā)者們會(huì)源源不斷地貢獻(xiàn)新的插件。我們基于它的插件架構(gòu)開發(fā)了redis queue input plugin和access log parser plugin,用于收集和分析Laravel框架隊(duì)列和access log數(shù)據(jù)。
-
collector業(yè)務(wù)數(shù)據(jù)收集器
collector是整個(gè)系統(tǒng)中唯一自研的組件。由于業(yè)務(wù)監(jiān)控?cái)?shù)據(jù)查詢規(guī)則復(fù)雜多變,我們開發(fā)了這個(gè)組件,用于從MySQL中查詢業(yè)務(wù)數(shù)據(jù),支持配置sql語句、收集頻率、時(shí)間延遲等,并且按照influxdb的格式發(fā)送給telegraf數(shù)據(jù)收集器。
-
kapacitor報(bào)警器
kapacitor是一個(gè)可以按照預(yù)先編寫好的規(guī)則,實(shí)時(shí)地訂閱influxdb數(shù)據(jù)或者批量查詢數(shù)據(jù),并進(jìn)行報(bào)警(郵件、短信、日志、exec等方式)的工具。官方為它設(shè)計(jì)了一個(gè)tickscript語言,可以方便地編寫規(guī)則腳本。我們的主要工作是tickscript的學(xué)習(xí)調(diào)試、報(bào)警規(guī)則的設(shè)計(jì)、報(bào)警周期(every字段)的調(diào)整和數(shù)據(jù)窗口(period字段)的調(diào)整。我們將報(bào)警腳本的修改重啟、報(bào)警腳本運(yùn)行狀態(tài)的查詢和influxdb數(shù)據(jù)訂閱狀態(tài)的查詢等命令編寫成了shell腳本,便于后期維護(hù)和自動(dòng)化。
-
grafana數(shù)據(jù)可視化界面
grafana是一個(gè)數(shù)據(jù)可視化的組件,類似著名ELK架構(gòu)中的kibana組件,支持多種數(shù)據(jù)源(influxdb、zabbix、elasticsearch等),還有很多插件可供安裝,在***版本中加入了簡(jiǎn)單的alert、電視模式等新功能。特別需要分享的是某些監(jiān)控?cái)?shù)據(jù)是隨時(shí)間不斷累加的,在展示時(shí)要應(yīng)用聚合函數(shù)(difference、max、min等)進(jìn)行處理。同時(shí)還可以為單個(gè)圖表配置超鏈接,增強(qiáng)交互性和可用性。還有很多有趣的功能,留待大家研究發(fā)現(xiàn)。
-
chronograf可視化界面
chronograf是influxdata官方提供的一個(gè)數(shù)據(jù)可視化組件,可視化功能不如grafana強(qiáng)大,亮點(diǎn)是附帶了kapacitor組件的web界面,可以方便地配置報(bào)警規(guī)則,自動(dòng)生成并啟用tickscript,還可以查詢報(bào)警歷史。我們對(duì)它進(jìn)行了修改,美化了報(bào)警郵件的模板,增加了報(bào)警周期(every字段)和報(bào)警時(shí)間段的配置,讓郵件內(nèi)容更加友好,并且可以自由調(diào)整報(bào)警周期。
綜上,我們?cè)赥ICK開源架構(gòu)上,結(jié)合我們自身業(yè)務(wù)特點(diǎn)和需求,研發(fā)了一整套包含數(shù)據(jù)采集格式化、可視化監(jiān)控、自動(dòng)化報(bào)警功能的監(jiān)控報(bào)警系統(tǒng),今后還將不斷調(diào)整優(yōu)化,更好地為公司業(yè)務(wù)發(fā)展和技術(shù)研發(fā)團(tuán)隊(duì)服務(wù)。