班晏子婧,李 暉,陳 梅,孫 武
(貴州大學 計算機科學與技術學院,貴陽 550025)
近年來,隨著信息技術的快速發展和大數據的蓬勃興起,人們對Web應用和網絡平臺的性能要求越來越高,倘若應用的響應時間超出用戶所能接受的范圍或者系統存在崩潰的風險,可能會造成用戶放棄使用該Web應用平臺的負面后果,甚至導致項目徹底失敗。根據亞馬遜的報告,系統延遲每增加100 ms,會導致銷售額下降1%。搜索引擎、電子商務等Web應用服務出現故障問題會造成一定的經濟損失,還會影響人們的日常生活,所以系統性能問題逐漸受到學界與技術界的關注和重視。如何高效、持續不斷地監控和分析應用系統的運行狀態,現今已經成為亟待解決的重要問題之一。
Web應用的性能好壞評價需要借助可量化的數據指標來反映,基于細粒度的評價指標數據更能準確反映具體的性能問題。所以,用于采集Web應用平臺性能指標數據的監控工具顯得至關重要。目前市面上常見的監控產品有企業級分布式監控系統Zabbix、阿里巴巴的Java診斷工具Arthas、監視系統運行狀態和網絡信息的監控系統Nagios和Apache開源的應用性能管理平臺SkyWalking等。然而,大多數的性能監控平臺主要是對Web應用平臺進行性能數據的采集和可視化,并未能深入地挖掘和分析應用中性能指標的潛在價值和信息。同時,這些復雜又海量的監控數據和閾值設置的限制性都增加了運維人員的壓力和工作量,當前監控系統常用的預警方式是通過設置固定閾值來實現,即當監控數據超過設定的閾值時,就會觸發報警。但運維人員通過監控系統無法提前預測數據的未來趨勢并規劃資源,這樣就很難在短時間內解決相應的問題。因此,對Web應用平臺所使用的資源進行趨勢預測即已成為熱點研究內容,不僅可以深入分析性能數據中潛在的有用信息,還能幫助運維人員提前預估故障,及時采取措施,提高運維效率。
對性能指標數據進行預測是根據Web應用在過去一段時間內的數據表現預測未來一段時間內可能的發展趨勢。監控系統中要處理的數據往往是具有時間特征的時間序列數據,而時間序列趨勢預測就是先分析已有時間序列,根據發展方向和過程找到時間趨勢規律并得出一定模式,最后用模式來預測將來的情況,例如預測網站系統的用戶增長趨勢和CPU使用率等。常見的時間序列趨勢預測算法有神經網絡算法、ARIMA自回歸移動平均模型、貝葉斯模型等。Sezer等人在2018年基于二維卷積神經網絡提出CNN-TA算法用于金融交易的趨勢預測。Lu等人在2020年基于ARIMA時間序列算法預測鋰離子電池RUL趨勢。Sara等人在2021年采用貝葉斯模型預測兒童Covid-19嚴重程度趨勢。而循環神經網絡RNN是一種專門用于處理序列數據的神經網絡,1997年Hochreiter等人就在RNN的基礎上提出了增加記憶單元的長短期記憶神經網絡LSTM,可以控制歷史信息的記憶程度,相比普通的RNN能夠在更長的序列中有更好的表現。Song等人在2018年使用LSTM網絡模型對服務器平均CPU利用率進行多步預測,并在真實數據集中進行驗證。譚宇寧等人在2019年設計了一種基于LSTM神經網絡的軟件老化資源預測方法,對Web服務器資源消耗進行預測。趙春生等人在2021年利用LSTM算法對服務器內存使用率、磁盤使用率和消息隊列數等性能指標進行預測,實驗證明預測值與真實值之間的均方根誤差較小。從中可以發現,對于具有時序性特點的性能數據,LSTM神經網絡在預測精度和穩定性方面上都有一定的優勢。
因此,為保障Web應用的穩定運行,降低企業成本,提高運維人員的工作效率,本文設計并實現了一種面向Web應用的智能監控系統。研發后的系統具有采集應用性能指標數據以及對性能數據進行基于LSTM模型趨勢預測的功能。
由Telegraf和InfluxDB構建的運維監控平臺作為可快速搭建的輕量級實時監控系統,目前已廣泛用于各類市場,主要針對運維監控數據量大、實時、高效的存儲需求而提出的。Telegraf和InfluxDB運維監控平臺架構圖如圖1所示。本文選用Telegraf和InfluxDB工具實現智能監控系統的監控功能。對此擬做闡釋論述如下。

圖1 Telegraf和InfluxDB運維監控平臺Fig.1 Telegraf and InfluxDB O&M monitoring platform
Telegraf是一個開源的數據采集工具,是InfluxData公司的時間序列平臺TICK技術棧中的一部分,使用Go語言實現,主要用于從運行的系統中采集時間序列型數據指標,其中包括CPU、內存、磁盤和網絡帶寬等相關資源的性能數據,還可以根據需求生成相應的配置文件。同時,Telegraf提供了廣泛的插件,會定時執行輸入插件以采集數據,數據經過處理插件和聚合插件進行清理和聚合,繼而批量轉發到各種其他數據存儲、服務和消息隊列,包括Kafka、InfluxDB、MQTT、OpenTSDB等。Telegraf不需要自己手工編寫腳本,定時采集且配置簡單,可快速完成監控數據采集,并獲取到多種組件的運行信息。
InfluxDB是一個開源的時間序列平臺,其核心是支持與時間有關的求和、最小和最大等一系列函數的分布式時序、事件和指標數據庫,專門用于處理由應用程序和基礎設施生成的海量數據和無數來源的時間戳數據。InfluxDB是由Go語言編寫,不需要外部依賴,設計目標是為了實現分布式和水平伸縮擴展,內置HTTP API,方便存儲和檢索,允許非常靈活的數據查詢。并具有可度量性和可擴展性,可以實時對大量數據進行計算,同時支持任意的事件數據。
Telegraf和InfluxDB構建的輕量級性能監控平臺通過實時數據采集和可視化面板提高了運維效率和水平,不僅實現了運維工作便捷化管理,同時也能夠適當降低企業成本。因此,本文采用這種輕量級運維監控平臺作為智能監控系統的監控部分,先使用Telegraf代理器采集被測系統的性能數據,再利用InfluxDB數據庫針對采集得到的時間序列數據完成分析計算和存儲等操作。
時間序列數據是一串按時間維度索引的數據,用于描述某個或者某些隨機變量隨時間發展的變化趨勢,通常時間間隔為1 s、1 min等恒定值。時間序列數據實際應用場景豐富,廣泛用于地震預測、通信工程、數理統計及絕大多數涉及到時間數據測量的應用科學與工程學中。而時間序列預測問題的核心就是從這些數據中挖掘出其歷史規律,并用其對未來的數據做出估計。時間序列分析主要是根據獲取的歷史數據變化趨勢對未來發展進行預測,而基于對這種數據的分析方法,建立Web應用性能數據的預測模型,預測性能數據在未來一段時間內的發展情況,以便輔助應用的運維人員進行決策,同時提供數據依據。
神經網絡是目前對于時間序列數據而言常用的預測方法之一。神經網絡算法是由多個神經元交叉成多個網絡節點、節點層相互連接構建成的一個多維度復雜網絡虛擬空間,可以存儲大量的形式多樣化的數據信息。在傳統的神經網絡模型中,層與層之間是全連接的,每層之間的節點是無連接的,這種模型對時間序列數據處理十分低效。而循環神經網絡(RNN)是一種專門用于處理序列數據的神經網絡,比一般的神經網絡要更能夠處理序列變化的數據,RNN網絡會對前面的信息進行記憶,保存在網絡的內部狀態中,并應用于當前輸出的計算中,這種記憶的能力大大增強了神經網絡對時間序列問題的學習和泛化輸入能力。
本文采用的預測方法是長短記憶神經網絡LSTM,這是一種特殊的循環神經網絡,允許數據在網絡中向前和向后流動。LSTM主要是為了解決RNN存在的長距離依賴問題和在長序列訓練過程中會出現的梯度消失、梯度爆炸問題,相比普通的RNN能夠在更長的序列中有更好的表現。LSTM模型單元結構如圖2所示。

圖2 LSTM單元結構Fig.2 LSTM cell architecture
LSTM在RNN的基礎上增加了一個細胞狀態c,細胞狀態保存的是當前時刻隱藏狀態信息,隱藏狀態信息包含上一時刻的隱藏狀態和當前時刻的臨時隱藏狀態。LSTM通過遺忘門、輸入門和輸出門三個門來控制傳輸狀態。總地來說,遺忘門控制上一時刻的單元狀態c里的信息是否保留到當前時刻細胞狀態c,記為f;輸入門控制細胞狀態中信息的加入,記為i;輸出門控制當前時刻細胞狀態c中的信息是否輸出為當前隱藏狀態h,記為o。在時刻,LSTM模型前向計算方法可以表示為:

其中,是sigmoid激活函數,用于決定保留多少信息進入下一記憶單元;tanh是雙曲正切激活函數,用于將任意值映射到[-1,1]區間;和分別為對應門限的權重系數矩陣和偏置項。
計算過程中,矩陣在最開始時隨機生成,接著在傳遞的過程中每次都通過反向傳播不斷迭代,得到準確的矩陣后對前一單元的信息進行保留和更新。
由于運維監控平臺采集得到的性能數據屬于長時間序列,而LSTM模型是最適合利用長時間序列之間的關系來預測趨勢。所以,本文在面向Web應用的智能監控系統中采用了基于LSTM的時間序列網絡模型,對經過數據處理的Web應用平臺性能數據進行時間序列預測,得到接下來一段時間性能數據變化趨勢,為Web應用的運維工作提供參考。
本文系統的功能模塊如圖3所示。由圖3可知,對系統中各組成部分模塊的設計功能可逐項展開分述如下。

圖3 智能監控系統功能模塊Fig.3 Intelligent monitoring system functional modules
(1)用戶模塊。智能監控系統主要面向Web應用的開發人員、測試人員以及運維人員,不僅可以對用戶信息進行管理,還可以對不同的特殊用戶分配不同模塊的使用權限。
(2)測試管理模塊。智能監控系統管理針對被測Web應用設計并錄制的Jmeter測試腳本,運維人員可以根據自身實際情況和工作環境上傳和下載測試腳本,以便后期進行復用。這些測試腳本用于模擬用戶使用Web應用的真實場景,產生Web應用運行的工作負載。
(3)監控存儲模塊。智能監控系統根據Web應用運行的性能狀況采集其資源指標數據,并存儲至時間序列數據庫InfluxDB中,前端將通過圖表形式展現結果實現數據可視化以便運維人員觀察,同時為預測分析模塊提供數據支撐。當需要排查故障時也可以通過數據庫調取歷史性能數據,但由于數據不需要保存太長時間,智能監控系統將數據保留策略設置為7天,并定期清除過期數據。
(4)預測分析模塊。運維人員可以根據監控采集的核心性能指標選擇時間范圍內的數據,系統會調用LSTM神經網絡模型進行趨勢預測,每次預測使用最新60個時間點的值預測未來一個時間點的值,接著將最新預測的值作為己知值繼續預測,直到成功預測未來60個時間點的值停止,并將結果通過ECharts折線圖展示,運維人員可以根據預測的趨勢提前做好預防措施。
面向Web應用的智能監控系統總體架構分為4層,也就是:數據采集層、數據處理層、數據應用層和數據展示層?;炯軜嬋鐖D4所示。這里,將對各部分架構依次給出研究論述如下。

圖4 智能監控系統架構Fig.4 Intelligent monitoring system architecture
在數據采集層中,通過Telegraf數據采集工具采集Web應用平臺運行狀況下服務器、網絡和中間件等多個維度的性能指標數據,采集過程中可以設置刷新頻率、時間顯示等范圍,同時本文基于JMeter測試工具和自動化腳本,模擬用戶在使用Web應用平臺時的運行狀況,從而持續產生應用運行的工作負載。在建立對Web應用平臺的測試環境時,需要考慮真實的業務需求與用戶實際使用情況,從而設計多種用戶訪問不同的應用場景,以使測試接近真實的運行狀態,為對Web應用進行性能分析獲取準確的數據支撐。
在數據處理層中,通過Telegraf數據采集工具采集Web應用平臺運行時的細粒度性能指標數據,再利用InfluxDB時間序列數據庫進行存儲,其中指標數據主要包括硬件資源開銷、容器啟動時間、進程數量和平均負載數值等。將所采集到的數據通過數據清洗(如空值處理和修改字段名)、數據聚集(如統計一段時間內系統資源使用情況)以及內置函數計算等方式進行數據處理。同時,本文將InfluxDB時序型數據庫部署到智能監控系統的服務器上,以便接下來對性能指標數據進行可視化。
在數據應用層中,智能監控系統結合從應用服務器中采集的細粒度指標數據對Web應用平臺進行綜合分析,采用單層隱藏層的LSTM神經網絡模型對性能數據進行趨勢預測,為運維工作提供數據支撐。同時,只有監控數據對于運維工作來說還遠遠不夠,大量多維的數據會增加運維人員的工作壓力,因此還需要有報警模塊來進一步做好預警處理和分析。在InfluxDB時序數據庫的Monitoring/Alerting模塊中根據不同的監控項設置了報警規則,當被監控的時間序列數據達到規則設定的閾值時,就會發布告警信息。在進行趨勢預測分析時,如果Web應用的服務器可能出現異常情況時,智能監控系統會通過彈框方式對運維人員進行提醒,真正讓整個運維監控工作實現了智能化。
在數據展示層中,智能監控系統先通過InfluxDB數據庫中提供的Dashboard編輯工具展示Telegraf采集的監控數據,通過圖表形式將綜合分析的性能數據和可能存在的異常數據(如硬件資源居高不下的情況)展示到系統前端。同時,對于趨勢預測分析后的結果,系統利用ECharts可視化工具將最新60個時間點和預測后60個時間點的數據以折線圖方式報告給運維人員。通過數據可視化,運維人員能夠方便快速了解到Web應用平臺整體的性能狀況,為運維人員后期排查性能瓶頸和決策性能問題提供了相應的數據支持,減少運維時間,提高工作效率,還能協助開發人員對Web應用平臺進行更新優化,方便觀察性能變化趨勢。
面向Web應用的智能監控系統后臺開發構建選擇的是Java語言和Spring boot框架,前端使用Vue.js框架和Element UI搭建,前后端使用的集成開發環境分別為WebStorm和IntelliJ IDEA。
本文搭建了某Web應用作為測試系統,該應用基于Java開發,可直接在應用頁面進行數據集成、可視化分析和數據挖掘等數據分析操作,并新增了500個用戶專門用于測試。首先使用壓力測試工具Jmeter錄制并運行相應的操作腳本,模擬500個用戶在應用平臺上進行實驗操作,以產生應用負載。其次部署了Telegraf數據采集工具和InfluxDB時序數據庫作為智能監控系統的監控模塊,利用采集工具獲取Web應用運行時的性能數據,同時根據本文系統的需求修改Telegraf中相應配置文件,比如將寫入間隔設置為10 s。Telegraf代理器啟動后會定時執行輸入插件收集各種時間序列型數據,接著數據經過處理插件和聚合插件,這里的處理插件是對收集到的數據流進行簡單的處理,例如給所有指標去重、重命名、格式轉換等。聚合插件是對一段時間內流經該插件的指標數據流進行處理和平均值計算。最后,經過輸出插件將處理后的批量數據輸出到數據存儲系統InfluxDB中。
InfluxDB的數據模型與關系型數據庫不同,Measurement是存儲數據的容器,包含了時間戳列Timestamp、維度列Tags和數值列Fields,類似于關系型數據庫中表的概念。圖5為InfluxDB數據模型的示例。分析圖5可知,該數據集記錄了Web應用服務器CPU的使用情況。其中,容器Measurement的名稱為“cpu”,維度列Tags由服務器的CPU編號、即cpu列和主機名host列組成,數值列Fields由IO等待使用CPU占比time_iowait列、用戶使用CPU占比time_system列、系統使用CPU占比time_user列等構成,其內容為各項指標的數據值,time為時間戳列。

圖5 InfluxDB數據模型Fig.5 FluxDB data model
采集的細粒度性能指標數據維度為86,其中包括CPU類指標7個,比如用戶用量百分比、系統用量百分比、軟中斷時間占比等;內存類指標20個,比如活躍使用的內存總數、已用內存數、文件buffer內存數等;磁盤類指標41個,比如磁盤用量、使用的inode數量、運行中的每秒IO數據量、磁盤讀取總用時等;系統負載類指標3個,比如1 min平均load值、5 min平均load值等;進程類指標4個,比如回收中的進程數、暫停狀態進程數等;以及網絡類指標11個,比如網卡收丟包數量、網卡發包錯誤數量等。以性能數據中CPU類指標為例的數據見表1。

表1 CPU類型性能指標數據信息Tab.1 CPU type performance indicators data information
鑒于采集到智能監控系統數據庫中的性能指標數據具有時序性的特點,本文通過使用LSTM神經網絡模型對其未來發展趨勢進行時間序列預測。在系統實現過程中,使用Tensorflow的Java版本API接口實現Java調用LSTM神經網絡模型,先將Tensorflow的jar包導入Maven項目的POM文件中,在項目中放入模型文件后創建MilkPowderUtils接口類和靜態模型調用方法,并使用SaveModelBundle類完成Java程序和模型文件之間的連接。以預測過程為參數,實例化輸出類,同時將創建的形參傳入、且轉換為Tensor類型,賦值給Tensor對象_。接著,調用模型會話對象和輸入數據,計算預測結果,再將其處理后作為方法返回值。Java程序查詢數據庫中要預測的數據,在標準化處理和封裝后,就會調用靜態模型方法,傳遞封裝的數據,得到相應的預測值,最后使用ECharts可視化反標準化后的預測結果。
圖6是面向Web應用的智能監控系統中性能指標數據的可視化界面。首頁將采集的核心性能指標進行展示,運維人員可以繼續通過需求在側方導航欄內選擇想要查看的相應類型的資源指標性能數據,比如CPU類型、內存類型、磁盤類型等,系統會根據用戶的選擇展示該類型下的細粒度性能數據。

圖6 智能監控系統首頁Fig.6 Homepage of the intelligent monitoring system
同時,對于需要進行趨勢預測的性能指標,運維人員可以通過點擊界面按鈕開啟預測分析,智能監控系統會調用LSTM模型對選擇的性能指標項進行預測,根據最新60個時間點的值來預測未來60個時間點的數值趨勢,性能指標數據趨勢預測結果如圖7所示。

圖7 智能監控系統預測結果Fig.7 Intelligent monitoring system prediction results
目前,在Web應用發展復雜的大環境下,本文設計并實現了一種不僅能夠監控Web應用性能指標數據,同時還可以對性能數據進行基于LSTM模型趨勢預測的智能監控系統,以便運維人員隨時監測Web應用的整體性能情況和運行狀況,在出現問題和故障時也能夠通過監控系統輔助排查,而利用神經網絡根據歷史的性能數據預測出未來趨勢,更利于提前做好準備工作和預防措施。在未來研究和開發的過程中,還需要更進一步地提高監控指標數據的精確度和預測網絡模型的準確率。