溫小斌


摘? 要: 傳統監控軟件不滿足物聯網系統的運維需求,為了彌補其不足之處,設計并實現了一個面向物聯網的自動化監控系統。除了常規的服務器性能指標以外,還能監控設備連接數、MQTT服務響應時間、CoAP服務響應時間等物聯網系統特有的指標。監控系統做到了對物聯網系統的零入侵,并且具備良好的擴展性。
關鍵詞: 物聯網; 自動化監控; MQTT; CoAP
中圖分類號:TP319? ? ? ? ? 文獻標志碼:A? ? ?文章編號:1006-8228(2019)06-34-04
Abstract: Traditional monitoring software does not meet the operation and maintenance requirements of IoT systems. To overcome the shortcomings, an automated monitoring system for IoT is designed and implemented. In addition to the conventional server performance metrics, it can also monitor metrics specific for IoT systems, such as number of device connection, MQTT service response time, and CoAP service response time. The monitoring system achieves zero intrusion into the IoT system and has good scalability.
Key words: IoT; automated monitoring; MQTT; CoAP
0 引言
監控是IT系統自動化運維的重要環節,可以第一時間把系統故障通知到運維工程師,所記錄的歷史日志,也有助于工程師定位到問題點。
與傳統IT系統的監控相比,物聯網系統的自動化監控,有許多不一樣的技術指標。除了服務器負載、CPU使用率、內存使用率、HTTP服務可用性等傳統的監控指標以外,物聯網系統還需要監控設備連接數、MQTT[1]服務響應時間、CoAP[2]服務響應時間、TCP/UDP Socket響應時間等其他指標。另外,接入到物聯網系統的設備數量,增長速度很快,提前做好系統擴容規劃,是物聯網系統自動化監控的重要目標。傳統的IT運維監控軟件,例如Nagios[3]和Zabbix[4],并不滿足物聯網系統的上述監控需求。
鑒于上述背景,設計并實現了一個面向物聯網的監控系統,它彌補了傳統監控軟件的不足之處,做到了對物聯網系統的全方位監控,具有高度自動化、可配置性高、擴展性強、對物聯網系統零入侵等特點。
1 系統設計
1.1 設計目標
⑴ 高度自動化。各種指標的監控、報警、歷史數據分析,全部采用程序實現,無需人工參與。
⑵ 可配置性高。報警閾值、報警方式、報警接收者等參數,均可配置,隨時可以調整。
⑶ 擴展性強。后續可以方便的增加新的監控指標,以及擴展新的功能。
⑷ 對物聯網系統零入侵。監控系統作為一個獨立的系統存在,不會對物聯網系統產生任何功能和性能方面的影響,無需對物聯網系統做任何修改。
1.2 系統架構
整個監控系統使用分布式架構,主要由監控模塊和監控中心兩大部分組成,如圖1所示。
其中監控模塊分三類:資源監控模塊、進程監控模塊、響應時間監控模塊,它們負責采集各項監控指標數據。監控中心則負責這些數據的接收、存儲、計算和展示,由HTTP API網關、配置模塊、報警模塊、報表生成模塊、Dashboard展示模塊等幾部分組成。
2 監控模塊
2.1 資源監控
該模塊用于監控服務器各種資源的使用情況。實現方式是:編寫Python腳本,在物聯網系統的每臺宿主服務器上運行,每分鐘執行一次,解析Linux下相應命令的結果,并把結果通過HTTP API接口發往監控中心,如果監控中心發現某資源的使用超過設定的閾值,則自動進行報警。
物聯網系統中,需要監控的服務器資源以及相對應的Linux命令,如表1所示。
2.2 進程監控
進程監控模塊用于監控服務器上各個進程是否處于運行狀態,以便檢測程序崩潰的現象。實現方式:編寫Python腳本,在物聯網系統的每臺宿主服務器上運行,每分鐘執行一次,解析Linux下ps命令的結果,并將結果通過HTTP API接口發往監控中心,如果監控中心發現進程不在運行狀態,則自動執行報警。
物聯網系統中,需要監控的進程主要分為如下幾類。
⑴ 數據庫進程:包括關系型數據庫MySQL,時間序列數據庫InfluxDB,緩存數據庫Redis等。
⑵ 網絡Server進程:包括MQTT Server、CoAP Server、WebSocket Server、TCP/UDP Socket Server、HTTP Server(Nginx和Tomcat)等。
⑶ 中間件進程:包括ZooKeeper、Kafka等。
⑷ 業務程序進程:如MQTT消息處理程序、Kafka消息處理程序等。
2.3 響應時間監控
該模塊用于監控各種網絡服務的響應時間。實現方式是:編寫Java程序,模擬設備往遠程物聯網服務器發送數據包,并接收回復的數據包,計算出服務器的響應時間,通過HTTP API接口把結果發往監控中心。為了避免偶然性的網絡傳輸延遲,每分鐘模擬發送一次設備數據包,監控中心如果連續兩次都判定超出閾值,則自動進行報警。
物聯網系統中,需要監控的網絡服務響應時間,包括:MQTT服務、CoAP服務、WebSocket服務、TCP/UDP Socket服務、HTTP服務等。以最常見的MQTT服務為例,響應時間監控的過程如圖2所示,其他網絡服務的監控過程是類似的。
值得注意的是,與其他兩個監控模塊不同,響應時間監控模塊,不是運行在物聯網系統的宿主服務器上,而是需要模擬設備遠程訪問物聯網系統。
3 監控中心
3.1 功能模塊
監控中心由如下幾個功能模塊組成。
⑴ HTTP API網關:用于接收各個監控模塊提交的監控數據。
⑵ 配置模塊:對監控系統的參數進行配置,包括各監控指標的報警閾值、報警方式、報警接收者等。
⑶ 報警模塊:一旦監控指標超過設定的閾值,則通過郵件、短信、電話等方式告知運維工程師和系統管理員。
⑷ 報表生成模塊:每天晚上零點定時執行任務,生成當天的運維監控報表,報表數據記錄到PDF文件中,通過郵件把PDF文件發送給運維工程師和系統管理員,并把PDF文件保存到MongoDB的GridFS文件系統,以便日后隨時查看歷史報表。
⑸ Dashboard展示模塊:使用表格、折線圖、柱狀圖、火焰圖等方式,直觀展示物聯網系統的實時監控數據、歷史監控數據。結合歷史數據趨勢圖,監控中心可以給出是否需要進行擴容的建議。
3.2 分層模式
監控中心使用分層模式進行設計,從上到下依次為展示層、接口層、業務服務層、數據訪問層、數據存儲層,如圖3所示。層次結構清晰,代碼易于維護。展示層、接口層和業務服務層均可獨立部署,方便后續擴展和二次開發。
監控中心使用Java編程語言開發,API層基于Spring Boot框架實現,業務服務層基于Dubbo框架實現。為了獲得更好的系統性能,監控中心同時使用三種數據庫,分別存儲不同的數據:MySQL存儲關系型業務數據,數據訪問層基于MyBatis框架實現;MongoDB存儲日志數據、歷史數據和文檔數據,數據訪問層基于Spring Data MongoDB實現;Redis用于存放Cache數據,數據訪問層基于Spring Data Redis實現。
4 結束語
本文設計了一個專門針對物聯網的監控系統,實現了物聯網系統的全方位自動化監控。得益于其對物聯網系統零入侵的特點,該監控系統已經應用到多個正式商用的物聯網項目,取得了不錯的效果。同時,該系統具備良好的可擴展性,下一步,計劃研究數據庫性能監控、物聯網系統日志監控等新的功能點,并將這些新功能添加到監控系統中。
參考文獻(References):
[1] 姚丹,謝雪松,楊建軍.基于MQTT協議的物聯網通信系統的研究與實現[J].信息通信,2016.3:33-35
[2] 徐凱.IoT開發實戰:CoAP卷[M].機械工業出版社,2017.
[3] 魏根芽.基于Linux的Nagios服務器監控系統的研究與實現[J].計算機與現代化,2010.6:170-172
[4] 趙哲,譚海波,趙赫,王衛東,李曉風.基于Zabbix的網絡監控系統[J].計算機技術與發展,2018.1:144-149