王震
摘 要 本文主要闡述了一種基于 Grafana、Elasticsearch 和 Zabbix 等開源軟件搭建的一套運(yùn)維監(jiān)控及預(yù)警平臺,致力于解決在應(yīng)用平臺部署后會出現(xiàn)各種各樣的故障,類似但不限于:CPU 負(fù)載過高、磁盤容量使用超過指定閾值、內(nèi)存使用超過閾值和系統(tǒng)進(jìn)程死亡等場景的諸多事故問題。
關(guān)鍵詞 Grafana;Elasticsearch;Zabbix;日志搜集;監(jiān)控告警
1技術(shù)選型
構(gòu)建一個智能的運(yùn)維監(jiān)控平臺,必須以運(yùn)行監(jiān)控和故障報警這兩個方面為重點,將所有業(yè)務(wù)系統(tǒng)中所涉及的網(wǎng)絡(luò)資源、硬件資源、軟件資源、數(shù)據(jù)庫資源等納入統(tǒng)一的運(yùn)維監(jiān)控平臺中,并通過消除管理軟件的差別,數(shù)據(jù)采集手段的差別,對各種不同的數(shù)據(jù)來源實現(xiàn)統(tǒng)一管理、統(tǒng)一規(guī)范、統(tǒng)一處理、統(tǒng)一展現(xiàn)、統(tǒng)一用戶登錄、統(tǒng)一權(quán)限控制,最終實現(xiàn)運(yùn)維規(guī)范化、自動化、智能化的大運(yùn)維管理。
1.1 利用 Zabbix搭建運(yùn)維監(jiān)控數(shù)據(jù)源
Zabbix是一個企業(yè)級的分布式開源監(jiān)控解決方案。它能夠監(jiān)控各種服務(wù)器的健康性、網(wǎng)絡(luò)的穩(wěn)定性以及各種應(yīng)用系統(tǒng)的可靠性。當(dāng)監(jiān)控出現(xiàn)異常時,Zabbix通過靈活的告警策略,可以為任何事件配置基于郵件、短信、微信等告警機(jī)制。而這所有的一切,都可以通過Zabbix提供的Web界面進(jìn)行配置和操作,基于Web的前端頁面還提供了出色的報告和數(shù)據(jù)可視化功能。這些功能和特性使其非常適合作為搭建運(yùn)維平臺監(jiān)控的基礎(chǔ)組件。
1.2 利用Grafana搭建統(tǒng)一的數(shù)據(jù)展示層和統(tǒng)一的 Dashboard UI
Zabbix 作為企業(yè)級的分布式開源監(jiān)控平臺,本身提供了一套簡單的 UI 來供使用者查看Zab- bix? 相關(guān)的監(jiān)控數(shù)值以及曲線,但面對大型服務(wù)器集群以及應(yīng)用集群的數(shù)據(jù)可視化,Zabbix本身自帶的UI還是欠缺了許多。Grafana是一套開源的基于Golang和 Angular 構(gòu)建的開源的度量分析與可視化軟件,Grafana支持多種數(shù)據(jù)源類似但不限于:In?uxDB、Elasticsearch、KairosDB等等[1]。
1.3 基于MySQL、In?uxDB、Redis、Elasticsearch搭建數(shù)據(jù)存儲層
運(yùn)維平臺的基礎(chǔ)數(shù)據(jù)存儲方面選擇MySQL,MySQL作為市面上最流行的關(guān)系型數(shù)據(jù)庫,支持多種存儲引擎。
對于Zabbix 所采集的監(jiān)控數(shù)據(jù)選擇采用In?uxDB 來進(jìn)行統(tǒng)計和記錄,In?uxDB是一個由In?ux-Data開發(fā)的開源時序型數(shù)據(jù)。它由Go寫成,著力于高性能地查詢與存儲時序型數(shù)據(jù)。In?uxDB被廣泛應(yīng)用于存儲系統(tǒng)的監(jiān)控數(shù)據(jù),IoT行業(yè)的實時數(shù)據(jù)等場景。
Redis是一個開源的使用ANSI C語言編寫、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、Key-Value數(shù)據(jù)庫,并提供多種語言的API,在運(yùn)維平臺的數(shù)據(jù)存儲層的場景中主要負(fù)責(zé)臨時性的數(shù)據(jù)存儲。
對于日志數(shù)據(jù),選擇采用Elasticsearch 來做數(shù)據(jù)存儲及搜索功能支持。
1.4 基于Elasticsearch、Logstash和Kafka來搭建日志采集系統(tǒng)
對于各種業(yè)務(wù)系統(tǒng)的日志采集,目前可以采用 Elasticsearch來做日志存儲和搜索,使用Logstash來做日志采集,以Java應(yīng)用舉例,Java 常用的一些日志庫類似但不限于 Log4J、Log- back 等都支持對接Logstash,將日志內(nèi)容直接發(fā)送給Logstash,從而避免每臺應(yīng)用機(jī)上去安裝Logstash的煩瑣操作,避免多余的資源利用。Kafka在這套體系之中主要承擔(dān)者“Data Transfer”的作用,Logstash 來采集和過濾日志發(fā)送給Kafka 的消息隊列,Kafka 將數(shù)據(jù)異步交給Elasticsearch做處理。
2平臺架構(gòu)
我們將整個運(yùn)維平臺分為如下幾層:
(1)統(tǒng)一展示層;
(2)運(yùn)維平臺支持層;
(3)數(shù)據(jù)存儲層。
統(tǒng)一展示層主要負(fù)責(zé)統(tǒng)一風(fēng)格的UI管理臺和Dashboard 提供給用戶使用,并對業(yè)務(wù)集群內(nèi)其他應(yīng)用開放Open API;運(yùn)維平臺支持層主要集成一些基本的運(yùn)維平臺支撐組件:Kafka消息隊列服務(wù)、Logstash日志采集& 處理服務(wù)、Zabbix資源監(jiān)控系統(tǒng)、Grafana后端服務(wù);在數(shù)據(jù)存儲層包括了四種平臺支撐用數(shù)據(jù)庫:Redis、Elasticsearch、MySQL、In?uxDB[2]。
3一期平臺目標(biāo)
項目一期主要實現(xiàn)如下目標(biāo),平臺應(yīng)該具有如下特征:
(1)支持多種類型的用戶鑒權(quán)機(jī)制(如LDAP、API Key、Bearer Token 和Basic Auth),方便已有業(yè)務(wù)系統(tǒng)及未來業(yè)務(wù)系統(tǒng)的接入;
(2)安全審查包括登錄鑒權(quán)記錄、用戶操作記錄、訪問記錄;
(3)業(yè)務(wù)運(yùn)行關(guān)鍵指標(biāo)報警及監(jiān)控;
(4)靈活告警通知配置,支持系統(tǒng)消息、郵件、短信、微信的告警通知方式;
(5)自動服務(wù)器和虛擬云資產(chǎn)、應(yīng)用服務(wù)的信息及關(guān)聯(lián)關(guān)系抓取及資產(chǎn)、資源的生命周期管理;
(6)快速智能的日志文本搜索,友好的日志文本展示;
(7)豐富的可視化數(shù)據(jù)展示,如直方圖、曲線圖、散點圖、扇形圖、熱力圖、儀表盤。
4結(jié)束語
企業(yè)需要一個相對完整的監(jiān)控體系可以24小時針對內(nèi)網(wǎng)各種應(yīng)用進(jìn)行監(jiān)控,一旦發(fā)生異常,通過各種渠道通知預(yù)警;在此之上建立起一套日志收集和查詢平臺,來歸納各個應(yīng)用日志以供問題排查。
參考文獻(xiàn)
[1] 彭睿,成經(jīng)緯,秦勤.自動監(jiān)測站第三方運(yùn)維管理的思考[J].中國環(huán)境監(jiān)測,2016,32(3):21-24.
[2] 孫聯(lián).關(guān)于提高會計信息質(zhì)量的若干思考[J].中國鄉(xiāng)鎮(zhèn)企業(yè)會計,2009,(1):128-129.