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