班晏子婧,李 暉,陳 梅,孫 武
(貴州大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,貴陽 550025)
近年來,隨著信息技術(shù)的快速發(fā)展和大數(shù)據(jù)的蓬勃興起,人們對(duì)Web應(yīng)用和網(wǎng)絡(luò)平臺(tái)的性能要求越來越高,倘若應(yīng)用的響應(yīng)時(shí)間超出用戶所能接受的范圍或者系統(tǒng)存在崩潰的風(fēng)險(xiǎn),可能會(huì)造成用戶放棄使用該Web應(yīng)用平臺(tái)的負(fù)面后果,甚至導(dǎo)致項(xiàng)目徹底失敗。根據(jù)亞馬遜的報(bào)告,系統(tǒng)延遲每增加100 ms,會(huì)導(dǎo)致銷售額下降1%。搜索引擎、電子商務(wù)等Web應(yīng)用服務(wù)出現(xiàn)故障問題會(huì)造成一定的經(jīng)濟(jì)損失,還會(huì)影響人們的日常生活,所以系統(tǒng)性能問題逐漸受到學(xué)界與技術(shù)界的關(guān)注和重視。如何高效、持續(xù)不斷地監(jiān)控和分析應(yīng)用系統(tǒng)的運(yùn)行狀態(tài),現(xiàn)今已經(jīng)成為亟待解決的重要問題之一。
Web應(yīng)用的性能好壞評(píng)價(jià)需要借助可量化的數(shù)據(jù)指標(biāo)來反映,基于細(xì)粒度的評(píng)價(jià)指標(biāo)數(shù)據(jù)更能準(zhǔn)確反映具體的性能問題。所以,用于采集Web應(yīng)用平臺(tái)性能指標(biāo)數(shù)據(jù)的監(jiān)控工具顯得至關(guān)重要。目前市面上常見的監(jiān)控產(chǎn)品有企業(yè)級(jí)分布式監(jiān)控系統(tǒng)Zabbix、阿里巴巴的Java診斷工具Arthas、監(jiān)視系統(tǒng)運(yùn)行狀態(tài)和網(wǎng)絡(luò)信息的監(jiān)控系統(tǒng)Nagios和Apache開源的應(yīng)用性能管理平臺(tái)SkyWalking等。然而,大多數(shù)的性能監(jiān)控平臺(tái)主要是對(duì)Web應(yīng)用平臺(tái)進(jìn)行性能數(shù)據(jù)的采集和可視化,并未能深入地挖掘和分析應(yīng)用中性能指標(biāo)的潛在價(jià)值和信息。同時(shí),這些復(fù)雜又海量的監(jiān)控?cái)?shù)據(jù)和閾值設(shè)置的限制性都增加了運(yùn)維人員的壓力和工作量,當(dāng)前監(jiān)控系統(tǒng)常用的預(yù)警方式是通過設(shè)置固定閾值來實(shí)現(xiàn),即當(dāng)監(jiān)控?cái)?shù)據(jù)超過設(shè)定的閾值時(shí),就會(huì)觸發(fā)報(bào)警。但運(yùn)維人員通過監(jiān)控系統(tǒng)無法提前預(yù)測(cè)數(shù)據(jù)的未來趨勢(shì)并規(guī)劃資源,這樣就很難在短時(shí)間內(nèi)解決相應(yīng)的問題。因此,對(duì)Web應(yīng)用平臺(tái)所使用的資源進(jìn)行趨勢(shì)預(yù)測(cè)即已成為熱點(diǎn)研究?jī)?nèi)容,不僅可以深入分析性能數(shù)據(jù)中潛在的有用信息,還能幫助運(yùn)維人員提前預(yù)估故障,及時(shí)采取措施,提高運(yùn)維效率。
對(duì)性能指標(biāo)數(shù)據(jù)進(jìn)行預(yù)測(cè)是根據(jù)Web應(yīng)用在過去一段時(shí)間內(nèi)的數(shù)據(jù)表現(xiàn)預(yù)測(cè)未來一段時(shí)間內(nèi)可能的發(fā)展趨勢(shì)。監(jiān)控系統(tǒng)中要處理的數(shù)據(jù)往往是具有時(shí)間特征的時(shí)間序列數(shù)據(jù),而時(shí)間序列趨勢(shì)預(yù)測(cè)就是先分析已有時(shí)間序列,根據(jù)發(fā)展方向和過程找到時(shí)間趨勢(shì)規(guī)律并得出一定模式,最后用模式來預(yù)測(cè)將來的情況,例如預(yù)測(cè)網(wǎng)站系統(tǒng)的用戶增長(zhǎng)趨勢(shì)和CPU使用率等。常見的時(shí)間序列趨勢(shì)預(yù)測(cè)算法有神經(jīng)網(wǎng)絡(luò)算法、ARIMA自回歸移動(dòng)平均模型、貝葉斯模型等。Sezer等人在2018年基于二維卷積神經(jīng)網(wǎng)絡(luò)提出CNN-TA算法用于金融交易的趨勢(shì)預(yù)測(cè)。Lu等人在2020年基于ARIMA時(shí)間序列算法預(yù)測(cè)鋰離子電池RUL趨勢(shì)。Sara等人在2021年采用貝葉斯模型預(yù)測(cè)兒童Covid-19嚴(yán)重程度趨勢(shì)。而循環(huán)神經(jīng)網(wǎng)絡(luò)RNN是一種專門用于處理序列數(shù)據(jù)的神經(jīng)網(wǎng)絡(luò),1997年Hochreiter等人就在RNN的基礎(chǔ)上提出了增加記憶單元的長(zhǎng)短期記憶神經(jīng)網(wǎng)絡(luò)LSTM,可以控制歷史信息的記憶程度,相比普通的RNN能夠在更長(zhǎng)的序列中有更好的表現(xiàn)。Song等人在2018年使用LSTM網(wǎng)絡(luò)模型對(duì)服務(wù)器平均CPU利用率進(jìn)行多步預(yù)測(cè),并在真實(shí)數(shù)據(jù)集中進(jìn)行驗(yàn)證。譚宇寧等人在2019年設(shè)計(jì)了一種基于LSTM神經(jīng)網(wǎng)絡(luò)的軟件老化資源預(yù)測(cè)方法,對(duì)Web服務(wù)器資源消耗進(jìn)行預(yù)測(cè)。趙春生等人在2021年利用LSTM算法對(duì)服務(wù)器內(nèi)存使用率、磁盤使用率和消息隊(duì)列數(shù)等性能指標(biāo)進(jìn)行預(yù)測(cè),實(shí)驗(yàn)證明預(yù)測(cè)值與真實(shí)值之間的均方根誤差較小。從中可以發(fā)現(xiàn),對(duì)于具有時(shí)序性特點(diǎn)的性能數(shù)據(jù),LSTM神經(jīng)網(wǎng)絡(luò)在預(yù)測(cè)精度和穩(wěn)定性方面上都有一定的優(yōu)勢(shì)。
因此,為保障Web應(yīng)用的穩(wěn)定運(yùn)行,降低企業(yè)成本,提高運(yùn)維人員的工作效率,本文設(shè)計(jì)并實(shí)現(xiàn)了一種面向Web應(yīng)用的智能監(jiān)控系統(tǒng)。研發(fā)后的系統(tǒng)具有采集應(yīng)用性能指標(biāo)數(shù)據(jù)以及對(duì)性能數(shù)據(jù)進(jìn)行基于LSTM模型趨勢(shì)預(yù)測(cè)的功能。
由Telegraf和InfluxDB構(gòu)建的運(yùn)維監(jiān)控平臺(tái)作為可快速搭建的輕量級(jí)實(shí)時(shí)監(jiān)控系統(tǒng),目前已廣泛用于各類市場(chǎng),主要針對(duì)運(yùn)維監(jiān)控?cái)?shù)據(jù)量大、實(shí)時(shí)、高效的存儲(chǔ)需求而提出的。Telegraf和InfluxDB運(yùn)維監(jiān)控平臺(tái)架構(gòu)圖如圖1所示。本文選用Telegraf和InfluxDB工具實(shí)現(xiàn)智能監(jiān)控系統(tǒng)的監(jiān)控功能。對(duì)此擬做闡釋論述如下。
圖1 Telegraf和InfluxDB運(yùn)維監(jiān)控平臺(tái)Fig.1 Telegraf and InfluxDB O&M monitoring platform
Telegraf是一個(gè)開源的數(shù)據(jù)采集工具,是InfluxData公司的時(shí)間序列平臺(tái)TICK技術(shù)棧中的一部分,使用Go語言實(shí)現(xiàn),主要用于從運(yùn)行的系統(tǒng)中采集時(shí)間序列型數(shù)據(jù)指標(biāo),其中包括CPU、內(nèi)存、磁盤和網(wǎng)絡(luò)帶寬等相關(guān)資源的性能數(shù)據(jù),還可以根據(jù)需求生成相應(yīng)的配置文件。同時(shí),Telegraf提供了廣泛的插件,會(huì)定時(shí)執(zhí)行輸入插件以采集數(shù)據(jù),數(shù)據(jù)經(jīng)過處理插件和聚合插件進(jìn)行清理和聚合,繼而批量轉(zhuǎn)發(fā)到各種其他數(shù)據(jù)存儲(chǔ)、服務(wù)和消息隊(duì)列,包括Kafka、InfluxDB、MQTT、OpenTSDB等。Telegraf不需要自己手工編寫腳本,定時(shí)采集且配置簡(jiǎn)單,可快速完成監(jiān)控?cái)?shù)據(jù)采集,并獲取到多種組件的運(yùn)行信息。
InfluxDB是一個(gè)開源的時(shí)間序列平臺(tái),其核心是支持與時(shí)間有關(guān)的求和、最小和最大等一系列函數(shù)的分布式時(shí)序、事件和指標(biāo)數(shù)據(jù)庫(kù),專門用于處理由應(yīng)用程序和基礎(chǔ)設(shè)施生成的海量數(shù)據(jù)和無數(shù)來源的時(shí)間戳數(shù)據(jù)。InfluxDB是由Go語言編寫,不需要外部依賴,設(shè)計(jì)目標(biāo)是為了實(shí)現(xiàn)分布式和水平伸縮擴(kuò)展,內(nèi)置HTTP API,方便存儲(chǔ)和檢索,允許非常靈活的數(shù)據(jù)查詢。并具有可度量性和可擴(kuò)展性,可以實(shí)時(shí)對(duì)大量數(shù)據(jù)進(jìn)行計(jì)算,同時(shí)支持任意的事件數(shù)據(jù)。
Telegraf和InfluxDB構(gòu)建的輕量級(jí)性能監(jiān)控平臺(tái)通過實(shí)時(shí)數(shù)據(jù)采集和可視化面板提高了運(yùn)維效率和水平,不僅實(shí)現(xiàn)了運(yùn)維工作便捷化管理,同時(shí)也能夠適當(dāng)降低企業(yè)成本。因此,本文采用這種輕量級(jí)運(yùn)維監(jiān)控平臺(tái)作為智能監(jiān)控系統(tǒng)的監(jiān)控部分,先使用Telegraf代理器采集被測(cè)系統(tǒng)的性能數(shù)據(jù),再利用InfluxDB數(shù)據(jù)庫(kù)針對(duì)采集得到的時(shí)間序列數(shù)據(jù)完成分析計(jì)算和存儲(chǔ)等操作。
時(shí)間序列數(shù)據(jù)是一串按時(shí)間維度索引的數(shù)據(jù),用于描述某個(gè)或者某些隨機(jī)變量隨時(shí)間發(fā)展的變化趨勢(shì),通常時(shí)間間隔為1 s、1 min等恒定值。時(shí)間序列數(shù)據(jù)實(shí)際應(yīng)用場(chǎng)景豐富,廣泛用于地震預(yù)測(cè)、通信工程、數(shù)理統(tǒng)計(jì)及絕大多數(shù)涉及到時(shí)間數(shù)據(jù)測(cè)量的應(yīng)用科學(xué)與工程學(xué)中。而時(shí)間序列預(yù)測(cè)問題的核心就是從這些數(shù)據(jù)中挖掘出其歷史規(guī)律,并用其對(duì)未來的數(shù)據(jù)做出估計(jì)。時(shí)間序列分析主要是根據(jù)獲取的歷史數(shù)據(jù)變化趨勢(shì)對(duì)未來發(fā)展進(jìn)行預(yù)測(cè),而基于對(duì)這種數(shù)據(jù)的分析方法,建立Web應(yīng)用性能數(shù)據(jù)的預(yù)測(cè)模型,預(yù)測(cè)性能數(shù)據(jù)在未來一段時(shí)間內(nèi)的發(fā)展情況,以便輔助應(yīng)用的運(yùn)維人員進(jìn)行決策,同時(shí)提供數(shù)據(jù)依據(jù)。
神經(jīng)網(wǎng)絡(luò)是目前對(duì)于時(shí)間序列數(shù)據(jù)而言常用的預(yù)測(cè)方法之一。神經(jīng)網(wǎng)絡(luò)算法是由多個(gè)神經(jīng)元交叉成多個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)、節(jié)點(diǎn)層相互連接構(gòu)建成的一個(gè)多維度復(fù)雜網(wǎng)絡(luò)虛擬空間,可以存儲(chǔ)大量的形式多樣化的數(shù)據(jù)信息。在傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)模型中,層與層之間是全連接的,每層之間的節(jié)點(diǎn)是無連接的,這種模型對(duì)時(shí)間序列數(shù)據(jù)處理十分低效。而循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)是一種專門用于處理序列數(shù)據(jù)的神經(jīng)網(wǎng)絡(luò),比一般的神經(jīng)網(wǎng)絡(luò)要更能夠處理序列變化的數(shù)據(jù),RNN網(wǎng)絡(luò)會(huì)對(duì)前面的信息進(jìn)行記憶,保存在網(wǎng)絡(luò)的內(nèi)部狀態(tài)中,并應(yīng)用于當(dāng)前輸出的計(jì)算中,這種記憶的能力大大增強(qiáng)了神經(jīng)網(wǎng)絡(luò)對(duì)時(shí)間序列問題的學(xué)習(xí)和泛化輸入能力。
本文采用的預(yù)測(cè)方法是長(zhǎng)短記憶神經(jīng)網(wǎng)絡(luò)LSTM,這是一種特殊的循環(huán)神經(jīng)網(wǎng)絡(luò),允許數(shù)據(jù)在網(wǎng)絡(luò)中向前和向后流動(dòng)。LSTM主要是為了解決RNN存在的長(zhǎng)距離依賴問題和在長(zhǎng)序列訓(xùn)練過程中會(huì)出現(xiàn)的梯度消失、梯度爆炸問題,相比普通的RNN能夠在更長(zhǎng)的序列中有更好的表現(xiàn)。LSTM模型單元結(jié)構(gòu)如圖2所示。
圖2 LSTM單元結(jié)構(gòu)Fig.2 LSTM cell architecture
LSTM在RNN的基礎(chǔ)上增加了一個(gè)細(xì)胞狀態(tài)c,細(xì)胞狀態(tài)保存的是當(dāng)前時(shí)刻隱藏狀態(tài)信息,隱藏狀態(tài)信息包含上一時(shí)刻的隱藏狀態(tài)和當(dāng)前時(shí)刻的臨時(shí)隱藏狀態(tài)。LSTM通過遺忘門、輸入門和輸出門三個(gè)門來控制傳輸狀態(tài)??偟貋碚f,遺忘門控制上一時(shí)刻的單元狀態(tài)c里的信息是否保留到當(dāng)前時(shí)刻細(xì)胞狀態(tài)c,記為f;輸入門控制細(xì)胞狀態(tài)中信息的加入,記為i;輸出門控制當(dāng)前時(shí)刻細(xì)胞狀態(tài)c中的信息是否輸出為當(dāng)前隱藏狀態(tài)h,記為o。在時(shí)刻,LSTM模型前向計(jì)算方法可以表示為:
其中,是sigmoid激活函數(shù),用于決定保留多少信息進(jìn)入下一記憶單元;tanh是雙曲正切激活函數(shù),用于將任意值映射到[-1,1]區(qū)間;和分別為對(duì)應(yīng)門限的權(quán)重系數(shù)矩陣和偏置項(xiàng)。
計(jì)算過程中,矩陣在最開始時(shí)隨機(jī)生成,接著在傳遞的過程中每次都通過反向傳播不斷迭代,得到準(zhǔn)確的矩陣后對(duì)前一單元的信息進(jìn)行保留和更新。
由于運(yùn)維監(jiān)控平臺(tái)采集得到的性能數(shù)據(jù)屬于長(zhǎng)時(shí)間序列,而LSTM模型是最適合利用長(zhǎng)時(shí)間序列之間的關(guān)系來預(yù)測(cè)趨勢(shì)。所以,本文在面向Web應(yīng)用的智能監(jiān)控系統(tǒng)中采用了基于LSTM的時(shí)間序列網(wǎng)絡(luò)模型,對(duì)經(jīng)過數(shù)據(jù)處理的Web應(yīng)用平臺(tái)性能數(shù)據(jù)進(jìn)行時(shí)間序列預(yù)測(cè),得到接下來一段時(shí)間性能數(shù)據(jù)變化趨勢(shì),為Web應(yīng)用的運(yùn)維工作提供參考。
本文系統(tǒng)的功能模塊如圖3所示。由圖3可知,對(duì)系統(tǒng)中各組成部分模塊的設(shè)計(jì)功能可逐項(xiàng)展開分述如下。
圖3 智能監(jiān)控系統(tǒng)功能模塊Fig.3 Intelligent monitoring system functional modules
(1)用戶模塊。智能監(jiān)控系統(tǒng)主要面向Web應(yīng)用的開發(fā)人員、測(cè)試人員以及運(yùn)維人員,不僅可以對(duì)用戶信息進(jìn)行管理,還可以對(duì)不同的特殊用戶分配不同模塊的使用權(quán)限。
(2)測(cè)試管理模塊。智能監(jiān)控系統(tǒng)管理針對(duì)被測(cè)Web應(yīng)用設(shè)計(jì)并錄制的Jmeter測(cè)試腳本,運(yùn)維人員可以根據(jù)自身實(shí)際情況和工作環(huán)境上傳和下載測(cè)試腳本,以便后期進(jìn)行復(fù)用。這些測(cè)試腳本用于模擬用戶使用Web應(yīng)用的真實(shí)場(chǎng)景,產(chǎn)生Web應(yīng)用運(yùn)行的工作負(fù)載。
(3)監(jiān)控存儲(chǔ)模塊。智能監(jiān)控系統(tǒng)根據(jù)Web應(yīng)用運(yùn)行的性能狀況采集其資源指標(biāo)數(shù)據(jù),并存儲(chǔ)至?xí)r間序列數(shù)據(jù)庫(kù)InfluxDB中,前端將通過圖表形式展現(xiàn)結(jié)果實(shí)現(xiàn)數(shù)據(jù)可視化以便運(yùn)維人員觀察,同時(shí)為預(yù)測(cè)分析模塊提供數(shù)據(jù)支撐。當(dāng)需要排查故障時(shí)也可以通過數(shù)據(jù)庫(kù)調(diào)取歷史性能數(shù)據(jù),但由于數(shù)據(jù)不需要保存太長(zhǎng)時(shí)間,智能監(jiān)控系統(tǒng)將數(shù)據(jù)保留策略設(shè)置為7天,并定期清除過期數(shù)據(jù)。
(4)預(yù)測(cè)分析模塊。運(yùn)維人員可以根據(jù)監(jiān)控采集的核心性能指標(biāo)選擇時(shí)間范圍內(nèi)的數(shù)據(jù),系統(tǒng)會(huì)調(diào)用LSTM神經(jīng)網(wǎng)絡(luò)模型進(jìn)行趨勢(shì)預(yù)測(cè),每次預(yù)測(cè)使用最新60個(gè)時(shí)間點(diǎn)的值預(yù)測(cè)未來一個(gè)時(shí)間點(diǎn)的值,接著將最新預(yù)測(cè)的值作為己知值繼續(xù)預(yù)測(cè),直到成功預(yù)測(cè)未來60個(gè)時(shí)間點(diǎn)的值停止,并將結(jié)果通過ECharts折線圖展示,運(yùn)維人員可以根據(jù)預(yù)測(cè)的趨勢(shì)提前做好預(yù)防措施。
面向Web應(yīng)用的智能監(jiān)控系統(tǒng)總體架構(gòu)分為4層,也就是:數(shù)據(jù)采集層、數(shù)據(jù)處理層、數(shù)據(jù)應(yīng)用層和數(shù)據(jù)展示層。基本架構(gòu)如圖4所示。這里,將對(duì)各部分架構(gòu)依次給出研究論述如下。
圖4 智能監(jiān)控系統(tǒng)架構(gòu)Fig.4 Intelligent monitoring system architecture
在數(shù)據(jù)采集層中,通過Telegraf數(shù)據(jù)采集工具采集Web應(yīng)用平臺(tái)運(yùn)行狀況下服務(wù)器、網(wǎng)絡(luò)和中間件等多個(gè)維度的性能指標(biāo)數(shù)據(jù),采集過程中可以設(shè)置刷新頻率、時(shí)間顯示等范圍,同時(shí)本文基于JMeter測(cè)試工具和自動(dòng)化腳本,模擬用戶在使用Web應(yīng)用平臺(tái)時(shí)的運(yùn)行狀況,從而持續(xù)產(chǎn)生應(yīng)用運(yùn)行的工作負(fù)載。在建立對(duì)Web應(yīng)用平臺(tái)的測(cè)試環(huán)境時(shí),需要考慮真實(shí)的業(yè)務(wù)需求與用戶實(shí)際使用情況,從而設(shè)計(jì)多種用戶訪問不同的應(yīng)用場(chǎng)景,以使測(cè)試接近真實(shí)的運(yùn)行狀態(tài),為對(duì)Web應(yīng)用進(jìn)行性能分析獲取準(zhǔn)確的數(shù)據(jù)支撐。
在數(shù)據(jù)處理層中,通過Telegraf數(shù)據(jù)采集工具采集Web應(yīng)用平臺(tái)運(yùn)行時(shí)的細(xì)粒度性能指標(biāo)數(shù)據(jù),再利用InfluxDB時(shí)間序列數(shù)據(jù)庫(kù)進(jìn)行存儲(chǔ),其中指標(biāo)數(shù)據(jù)主要包括硬件資源開銷、容器啟動(dòng)時(shí)間、進(jìn)程數(shù)量和平均負(fù)載數(shù)值等。將所采集到的數(shù)據(jù)通過數(shù)據(jù)清洗(如空值處理和修改字段名)、數(shù)據(jù)聚集(如統(tǒng)計(jì)一段時(shí)間內(nèi)系統(tǒng)資源使用情況)以及內(nèi)置函數(shù)計(jì)算等方式進(jìn)行數(shù)據(jù)處理。同時(shí),本文將InfluxDB時(shí)序型數(shù)據(jù)庫(kù)部署到智能監(jiān)控系統(tǒng)的服務(wù)器上,以便接下來對(duì)性能指標(biāo)數(shù)據(jù)進(jìn)行可視化。
在數(shù)據(jù)應(yīng)用層中,智能監(jiān)控系統(tǒng)結(jié)合從應(yīng)用服務(wù)器中采集的細(xì)粒度指標(biāo)數(shù)據(jù)對(duì)Web應(yīng)用平臺(tái)進(jìn)行綜合分析,采用單層隱藏層的LSTM神經(jīng)網(wǎng)絡(luò)模型對(duì)性能數(shù)據(jù)進(jìn)行趨勢(shì)預(yù)測(cè),為運(yùn)維工作提供數(shù)據(jù)支撐。同時(shí),只有監(jiān)控?cái)?shù)據(jù)對(duì)于運(yùn)維工作來說還遠(yuǎn)遠(yuǎn)不夠,大量多維的數(shù)據(jù)會(huì)增加運(yùn)維人員的工作壓力,因此還需要有報(bào)警模塊來進(jìn)一步做好預(yù)警處理和分析。在InfluxDB時(shí)序數(shù)據(jù)庫(kù)的Monitoring/Alerting模塊中根據(jù)不同的監(jiān)控項(xiàng)設(shè)置了報(bào)警規(guī)則,當(dāng)被監(jiān)控的時(shí)間序列數(shù)據(jù)達(dá)到規(guī)則設(shè)定的閾值時(shí),就會(huì)發(fā)布告警信息。在進(jìn)行趨勢(shì)預(yù)測(cè)分析時(shí),如果Web應(yīng)用的服務(wù)器可能出現(xiàn)異常情況時(shí),智能監(jiān)控系統(tǒng)會(huì)通過彈框方式對(duì)運(yùn)維人員進(jìn)行提醒,真正讓整個(gè)運(yùn)維監(jiān)控工作實(shí)現(xiàn)了智能化。
在數(shù)據(jù)展示層中,智能監(jiān)控系統(tǒng)先通過InfluxDB數(shù)據(jù)庫(kù)中提供的Dashboard編輯工具展示Telegraf采集的監(jiān)控?cái)?shù)據(jù),通過圖表形式將綜合分析的性能數(shù)據(jù)和可能存在的異常數(shù)據(jù)(如硬件資源居高不下的情況)展示到系統(tǒng)前端。同時(shí),對(duì)于趨勢(shì)預(yù)測(cè)分析后的結(jié)果,系統(tǒng)利用ECharts可視化工具將最新60個(gè)時(shí)間點(diǎn)和預(yù)測(cè)后60個(gè)時(shí)間點(diǎn)的數(shù)據(jù)以折線圖方式報(bào)告給運(yùn)維人員。通過數(shù)據(jù)可視化,運(yùn)維人員能夠方便快速了解到Web應(yīng)用平臺(tái)整體的性能狀況,為運(yùn)維人員后期排查性能瓶頸和決策性能問題提供了相應(yīng)的數(shù)據(jù)支持,減少運(yùn)維時(shí)間,提高工作效率,還能協(xié)助開發(fā)人員對(duì)Web應(yīng)用平臺(tái)進(jìn)行更新優(yōu)化,方便觀察性能變化趨勢(shì)。
面向Web應(yīng)用的智能監(jiān)控系統(tǒng)后臺(tái)開發(fā)構(gòu)建選擇的是Java語言和Spring boot框架,前端使用Vue.js框架和Element UI搭建,前后端使用的集成開發(fā)環(huán)境分別為WebStorm和IntelliJ IDEA。
本文搭建了某Web應(yīng)用作為測(cè)試系統(tǒng),該應(yīng)用基于Java開發(fā),可直接在應(yīng)用頁(yè)面進(jìn)行數(shù)據(jù)集成、可視化分析和數(shù)據(jù)挖掘等數(shù)據(jù)分析操作,并新增了500個(gè)用戶專門用于測(cè)試。首先使用壓力測(cè)試工具Jmeter錄制并運(yùn)行相應(yīng)的操作腳本,模擬500個(gè)用戶在應(yīng)用平臺(tái)上進(jìn)行實(shí)驗(yàn)操作,以產(chǎn)生應(yīng)用負(fù)載。其次部署了Telegraf數(shù)據(jù)采集工具和InfluxDB時(shí)序數(shù)據(jù)庫(kù)作為智能監(jiān)控系統(tǒng)的監(jiān)控模塊,利用采集工具獲取Web應(yīng)用運(yùn)行時(shí)的性能數(shù)據(jù),同時(shí)根據(jù)本文系統(tǒng)的需求修改Telegraf中相應(yīng)配置文件,比如將寫入間隔設(shè)置為10 s。Telegraf代理器啟動(dòng)后會(huì)定時(shí)執(zhí)行輸入插件收集各種時(shí)間序列型數(shù)據(jù),接著數(shù)據(jù)經(jīng)過處理插件和聚合插件,這里的處理插件是對(duì)收集到的數(shù)據(jù)流進(jìn)行簡(jiǎn)單的處理,例如給所有指標(biāo)去重、重命名、格式轉(zhuǎn)換等。聚合插件是對(duì)一段時(shí)間內(nèi)流經(jīng)該插件的指標(biāo)數(shù)據(jù)流進(jìn)行處理和平均值計(jì)算。最后,經(jīng)過輸出插件將處理后的批量數(shù)據(jù)輸出到數(shù)據(jù)存儲(chǔ)系統(tǒng)InfluxDB中。
InfluxDB的數(shù)據(jù)模型與關(guān)系型數(shù)據(jù)庫(kù)不同,Measurement是存儲(chǔ)數(shù)據(jù)的容器,包含了時(shí)間戳列Timestamp、維度列Tags和數(shù)值列Fields,類似于關(guān)系型數(shù)據(jù)庫(kù)中表的概念。圖5為InfluxDB數(shù)據(jù)模型的示例。分析圖5可知,該數(shù)據(jù)集記錄了Web應(yīng)用服務(wù)器CPU的使用情況。其中,容器Measurement的名稱為“cpu”,維度列Tags由服務(wù)器的CPU編號(hào)、即cpu列和主機(jī)名host列組成,數(shù)值列Fields由IO等待使用CPU占比time_iowait列、用戶使用CPU占比time_system列、系統(tǒng)使用CPU占比time_user列等構(gòu)成,其內(nèi)容為各項(xiàng)指標(biāo)的數(shù)據(jù)值,time為時(shí)間戳列。
圖5 InfluxDB數(shù)據(jù)模型Fig.5 FluxDB data model
采集的細(xì)粒度性能指標(biāo)數(shù)據(jù)維度為86,其中包括CPU類指標(biāo)7個(gè),比如用戶用量百分比、系統(tǒng)用量百分比、軟中斷時(shí)間占比等;內(nèi)存類指標(biāo)20個(gè),比如活躍使用的內(nèi)存總數(shù)、已用內(nèi)存數(shù)、文件buffer內(nèi)存數(shù)等;磁盤類指標(biāo)41個(gè),比如磁盤用量、使用的inode數(shù)量、運(yùn)行中的每秒IO數(shù)據(jù)量、磁盤讀取總用時(shí)等;系統(tǒng)負(fù)載類指標(biāo)3個(gè),比如1 min平均load值、5 min平均load值等;進(jìn)程類指標(biāo)4個(gè),比如回收中的進(jìn)程數(shù)、暫停狀態(tài)進(jìn)程數(shù)等;以及網(wǎng)絡(luò)類指標(biāo)11個(gè),比如網(wǎng)卡收丟包數(shù)量、網(wǎng)卡發(fā)包錯(cuò)誤數(shù)量等。以性能數(shù)據(jù)中CPU類指標(biāo)為例的數(shù)據(jù)見表1。
表1 CPU類型性能指標(biāo)數(shù)據(jù)信息Tab.1 CPU type performance indicators data information
鑒于采集到智能監(jiān)控系統(tǒng)數(shù)據(jù)庫(kù)中的性能指標(biāo)數(shù)據(jù)具有時(shí)序性的特點(diǎn),本文通過使用LSTM神經(jīng)網(wǎng)絡(luò)模型對(duì)其未來發(fā)展趨勢(shì)進(jìn)行時(shí)間序列預(yù)測(cè)。在系統(tǒng)實(shí)現(xiàn)過程中,使用Tensorflow的Java版本API接口實(shí)現(xiàn)Java調(diào)用LSTM神經(jīng)網(wǎng)絡(luò)模型,先將Tensorflow的jar包導(dǎo)入Maven項(xiàng)目的POM文件中,在項(xiàng)目中放入模型文件后創(chuàng)建MilkPowderUtils接口類和靜態(tài)模型調(diào)用方法,并使用SaveModelBundle類完成Java程序和模型文件之間的連接。以預(yù)測(cè)過程為參數(shù),實(shí)例化輸出類,同時(shí)將創(chuàng)建的形參傳入、且轉(zhuǎn)換為Tensor類型,賦值給Tensor對(duì)象_。接著,調(diào)用模型會(huì)話對(duì)象和輸入數(shù)據(jù),計(jì)算預(yù)測(cè)結(jié)果,再將其處理后作為方法返回值。Java程序查詢數(shù)據(jù)庫(kù)中要預(yù)測(cè)的數(shù)據(jù),在標(biāo)準(zhǔn)化處理和封裝后,就會(huì)調(diào)用靜態(tài)模型方法,傳遞封裝的數(shù)據(jù),得到相應(yīng)的預(yù)測(cè)值,最后使用ECharts可視化反標(biāo)準(zhǔn)化后的預(yù)測(cè)結(jié)果。
圖6是面向Web應(yīng)用的智能監(jiān)控系統(tǒng)中性能指標(biāo)數(shù)據(jù)的可視化界面。首頁(yè)將采集的核心性能指標(biāo)進(jìn)行展示,運(yùn)維人員可以繼續(xù)通過需求在側(cè)方導(dǎo)航欄內(nèi)選擇想要查看的相應(yīng)類型的資源指標(biāo)性能數(shù)據(jù),比如CPU類型、內(nèi)存類型、磁盤類型等,系統(tǒng)會(huì)根據(jù)用戶的選擇展示該類型下的細(xì)粒度性能數(shù)據(jù)。
圖6 智能監(jiān)控系統(tǒng)首頁(yè)Fig.6 Homepage of the intelligent monitoring system
同時(shí),對(duì)于需要進(jìn)行趨勢(shì)預(yù)測(cè)的性能指標(biāo),運(yùn)維人員可以通過點(diǎn)擊界面按鈕開啟預(yù)測(cè)分析,智能監(jiān)控系統(tǒng)會(huì)調(diào)用LSTM模型對(duì)選擇的性能指標(biāo)項(xiàng)進(jìn)行預(yù)測(cè),根據(jù)最新60個(gè)時(shí)間點(diǎn)的值來預(yù)測(cè)未來60個(gè)時(shí)間點(diǎn)的數(shù)值趨勢(shì),性能指標(biāo)數(shù)據(jù)趨勢(shì)預(yù)測(cè)結(jié)果如圖7所示。
圖7 智能監(jiān)控系統(tǒng)預(yù)測(cè)結(jié)果Fig.7 Intelligent monitoring system prediction results
目前,在Web應(yīng)用發(fā)展復(fù)雜的大環(huán)境下,本文設(shè)計(jì)并實(shí)現(xiàn)了一種不僅能夠監(jiān)控Web應(yīng)用性能指標(biāo)數(shù)據(jù),同時(shí)還可以對(duì)性能數(shù)據(jù)進(jìn)行基于LSTM模型趨勢(shì)預(yù)測(cè)的智能監(jiān)控系統(tǒng),以便運(yùn)維人員隨時(shí)監(jiān)測(cè)Web應(yīng)用的整體性能情況和運(yùn)行狀況,在出現(xiàn)問題和故障時(shí)也能夠通過監(jiān)控系統(tǒng)輔助排查,而利用神經(jīng)網(wǎng)絡(luò)根據(jù)歷史的性能數(shù)據(jù)預(yù)測(cè)出未來趨勢(shì),更利于提前做好準(zhǔn)備工作和預(yù)防措施。在未來研究和開發(fā)的過程中,還需要更進(jìn)一步地提高監(jiān)控指標(biāo)數(shù)據(jù)的精確度和預(yù)測(cè)網(wǎng)絡(luò)模型的準(zhǔn)確率。