左晨歡, 張 磊, 褚 彪
(合肥水泥研究設計院有限公司, 安徽 合肥 230051)
隨著科技的飛速發展,數字化轉型已經成為了當今企業發展的重要趨勢,自 “十四五” 以來,我國政府提出了加快數字化轉型部署的戰略,旨在推動傳統產業與數字技術的深度融合,提升企業的競爭力和創新能力[1]。
在數字化轉型過程中,企業需要投入大量資源在生產管理(MES)、企業資源計劃(ERP)等信息化軟件中,而這些信息化軟件的后續運行和維護需要人力、時間和金錢等資源的持續投入。因此企業亟需一套高效可靠的軟件監控系統,該系統可以持續監控其他軟件的運行狀態,并在目標運行出現異常時輸出警報,從而減少系統監控、故障排查、性能優化等環節所需的人工操作,達到節約企業資源的效果。
以某傳統企業部署的數字化平臺為研究對象,該平臺搭建了一套分布式軟件用于企業生產數據的信息化,其中包括基于Java 的管理系統、基于Golang 的設備數據采集系統、基于Python 開發的機理模型系統等。平臺涉及了企業生產數據從源頭采集到聚合計算展示,以及深度學習模型開發等多個功能,不同模塊之間的數據調用相互依賴。信息化軟件監控系統則以該平臺為監控對象進行統一的架構設計與實現[2],保證監控系統的通用性與可參考性。
在監控系統引入之前,該平臺的運行和維護完全依賴人工,需要等用戶發現前端頁面狀態異常再去處理,技術人員每次都需要去逐個排查關聯系統之間的問題所在點。而軟件監控系統的設計目標恰恰是解決這種多軟件環境下運行和維護難度大的問題,通過編寫軟件的狀態采集接口與展示界面,將信息化軟件的運行狀態數據進行采集和展示,配合告警模塊的警報輸出,可以達成提前預知故障信息的效果。以此為基礎,可實時自動監控企業中各類信息化軟件的運行狀態,減少潛在的風險[3]。
由于信息化是一項持續改造的工作,監控系統會逐步接入更多的軟件應用,這將導致監控系統的復雜度和流量逐漸增大。因此,為了應對這一挑戰,采用了基于構件設計的架構方法來構建監控系統,將監控系統分為多個構件組合運行,每個構件可以獨立運行,并通過接口進行數據交互。根據流量分布和功能邊界,監控系統的構件劃分為數據采集模塊、數據存儲與管理模塊、數據展示模塊以及警報處理模塊。
在該架構下,數據流量較大的數據采集器放置在各個目標程序的服務器上,可分散監控系統壓力,采集系統定時從各個目標程序的接口采集狀態數據,最終經過匯總存儲在Prometheus 數據庫中。基于Grafana 的數據展示模塊和基于AlertManager 的告警模塊由于實時流量較小但更面向用戶,所以為了保障可用性,也單獨作為構件與采集/存儲端分開部署。監控系統的總體技術架構見圖1。

圖1 技術架構設計
2.2.1 數據采集模塊
監控數據的采集方式主要分為推送和拉取。推送模式是指由被監控點位主動向PushGateway 組件推送狀態數據,而Prometheus Server 則定期從Push-Gateway 拉取指標數據;拉取模式是指采集器主動去各個監控節點上直接拉取數據。采集方式常見設計規則如下:
1)推送式采集:需要實時監控的場景;數據量較小,但需要快速響應的場景;臨時和批處理作業數據采集的場景。
2)拉取式采集:大量數據需要離線處理分析的場景;需要保持數據完整且快速到達存儲模塊的場景。
隨著數字化業務的轉型和迭代,采集對象的信息也會產生變更,因此及時地維護監控列表也是一項很重要的工作。每當監控目標的信息產生變動后,運維人員都需要去Prometheus Server 監控列表做更新。采集模塊的結構設計見圖2。

圖2 數據采集模塊結構設計
2.2.2 數據存儲模塊
在設計軟件監控系統時,考慮到軟件的狀態數據往往是按照時間序列進行變化且采集頻率較高(對于監控要求較高的可能達到1 s 一條),例如監控應用程序的響應時間、程序的接口訪問頻次、存儲系統中磁盤的讀寫次數[4]等等。由于Prometheus 是開源且生態較為完善的時序數據庫,因此使用Prometheus 為核心模塊進行存儲,并實現了以下功能。數據存儲模塊功能結構設計參考圖3。

圖3 數據存儲模塊結構
1)數據存儲/規則引擎:數據存儲默認選擇存儲在本地文件系統中,開發者也可選擇配置遠程HTTP端口進行讀寫,或者自主編寫格式轉換器存儲在其他的OLAP 數據庫中,轉換的方式需要依據規則引擎中的配置。
2)目標/監控/節點管理:用戶需要管理虛擬機、應用程序或容器等對象的IP、URL、端口和節點關聯等信息。
3)用戶管理:系統管理員需要根據用戶工作內容分配不同等級的讀寫權限。存儲模塊的用戶一般包括管理人員、監控人員和運維人員等。
4)警報管理:對于分布式軟件的集群來說,不同軟件的集群都需要單獨告警,因此需要進行分組且在分組基礎上配置不同的閾值規則。
5)API 接口:用戶通過存儲系統的接口可對外開放數據查詢和數據接入功能。接口配置包括URL、數據格式、接口描述等字段。
2.2.3 數據展示模塊
Grafana 作為一款開源且成熟的數據展示軟件,在軟件開發者的一定配置下即可投入使用,因此選用Grafana 作為展示模塊的基礎,在Grafana 軟件的后臺上編輯出符合用戶需求的監控面板,這樣監控系統既可以更快速展示監控數據,又可以減少軟件監控系統的開發量。監控系統數據展示模塊具有以下功能:
1)數據導入/可視化數據:導入多種數據源,包括數據庫、文件和API 等,將原始數據以圖表、表格、儀表板等形式進行展示。
2)自定義報表/報表模塊化:用戶利用拖拉拽形式可自主修改報表樣式,修改完成后的圖表組件可以轉化為JSON 在模塊間復用。
3)實時數據分析/大屏輪播:數據面板以及報表可根據刷新頻率的設置實時更新數據,并且面板可設置為大屏模式進行輪播。
相比于寫代碼的方式編寫前端界面,低代碼操作的技術要求更低。在數據展示模塊中可采用低代碼的方式完成界面的編輯與發布,簡化運維人員修改監控頁面的工作量。數據展示模塊功能結構設計參考圖4。

圖4 數據展示模塊結構設計
2.2.4 數據告警模塊
告警模塊負責異常信息的管理與發送,運維人員可通過告警信息直接定位到問題軟件的IP、并發狀態和資源占用等信息,降低系統故障對業務的影響時長[5]。
AlertManager 是Prometheus 的一個開源適配組件,可以負責處理和發送告警通知,當Prometheus 收集到的數據滿足預設的告警規則時,AlertManager 會處理并發送告警信息給指定的接收者,數據告警模塊功能結構設計參考圖5。

圖5 數據告警模塊結構設計
最終達到以下功能效果:
1)規則配置:規則指的是警報出現時告警系統針對警報的處理邏輯,配置方法包含規則配置文件、調用系統API 或終端客戶端。
2)監控告警:告警系統從Prometheus 中持續獲取監控數據,當發現數據出現異常時,將會按照告警規則進行判斷并處理。
3)存儲歷史告警:告警記錄默認存儲在內存中,開發人員可以借助webhook 方式轉發至關系型數據庫存儲過去發生的告警記錄。
4)接收者配置:系統支持多種接收者類型,如郵件、短信、IM 軟件等,企業可以根據實際需求配置告警接收者。
5)分組和去重:分組機制可以將相似性質的告警分類為單個通知,去重功能則有助于減少重復的告警,提高告警處理的效率。
6)抑制和靜默:抑制和靜默功能用于控制告警通知的發送。抑制的概念是指如果指定類型警報已經觸發,則抑制其他類型警報的通知,靜默是一種在給定時間內使警報靜音的簡單方法。
7)自動化操作:聯動自動化工具在報警之后運行一些應急的腳本操作。
結合數據采集、存儲、展示和告警模塊的功能,軟件監控系統可以實現信息化軟件的自動監控與告警,減少企業中信息化系統的運維難度。
通過圖6 所示的監控系統展示中心,用戶可觀察到各監控目標的歷史數據與實時數據。對于數字化平臺一類的分布式部署場景,展示中心可以匯總Java、Python、Mysql 等不同應用的指標進行聚合展示,從而提升運維的效率。

圖6 軟件監控系統展示中心
通過圖7 中的警報管理中心,用戶可以查看警報的統計數據、詳細的警報內容和管理告警消息模板。當監控目標出現異常時,警報中心會解析異常數據并填充消息模板,然后將加工后的告警消息發送給指定接收人。通過系統及時地發送告警信息,企業可以有效避免因軟件故障而導致的資產損失。

圖7 軟件監控系統警報管理中心
隨著《中國制造2025》和 “數字化轉型” 戰略的推動,我國眾多傳統企業正在積極地邁向數字化的新階段,企業生產經營活動也更加信息化與智能化[6]。軟件監控系統旨在提升企業數字化轉型的軟件運維效率,減少轉型帶來的成本,主要完成以下工作:
1)在充分調研的基礎上,對企業中常見信息化軟件的維護方式進行了分析;對軟件監控系統所需的關鍵功能進行了深入調研,包括數據采集器選型規則、Prometheus 數據庫選型依據、展示模塊和告警模塊所需功能等;完成了軟件監控系統的總體設計,包括技術架構設計和功能結構設計。
2)根據信息化軟件的數據結構和流向,選擇了某企業內的數字化平臺作為監測對象,詳細設計了數據采集、數據存儲、數據展示和數據告警功能模塊,并進行了軟件監控系統的開發和部署。
監控系統目前在該企業的信息化部門運維工作中得到了廣泛應用,并取得了顯著的成果。通過精準的數據監控,運維人員能夠及時發現和解決潛在的信息化系統問題,提高了工作效率,有效減輕了企業數字化轉型的負擔。