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