張世賢, 張少春, 謝曉東
1(泉州時刻防盜電子有限責任公司, 泉州 362212)
2(華僑大學 計算機科學與技術學院, 廈門 361021)
隨著互聯網技術的發展, 各種監控設備, 如監控攝像頭、網絡攝像機、環境監測設備、氣象數據采集設備、水文數據采集設備等得到了廣泛的應用[1-3]. 這些監控設備可以自動采集數據并通過網絡實時上傳, 節省了大量的人力物力, 提供更高的覆蓋范圍和精度, 給生活和工作帶來了很大方便, 在各個行業都有不可替代的作用.
然而規模龐大的監控設備給運行維護帶來了巨大的挑戰和沉重的壓力. 監控設備使用環境一般比較惡劣, 容易損壞; 維護和替換的代價較高[4]. 設備散布在廣闊的城鄉, 很多安裝地點偏僻, 維護工作強度大, 維護時間和代價巨大. 此外, 當監控設備離線時, 很難判斷故障原因是供電故障還是網絡故障, 無法精準維護. 實踐中, 大量故障只需斷電重啟即可排除, 卻需要花費大量時間和代價到現場解決. 因此, 監控設備運行狀態的監控, 以及故障原因的快速定位, 簡單故障的遠程排除等, 成為亟需解決的問題.
當前現有的運維管理平臺[5-9]存在以下不足:(1)前端狀態采集裝置和監控運維管理平臺不具有通用性, 不能應用到其他類型或其他廠家的監控設備上,也不能對已有設備升級. (2)產品沒有進行冗余設計,安全性可靠性不足. (3)監控運維管理平臺性能不足,可同時管理的監控設備數量有限.
針對上述不足, 我們研發了基于InfluxDB的通用監控設備運維管理平臺, 平臺主體包括狀態采集裝置、運維管理系統、運維人員移動終端APP以及可視化展示系統等4個部分.
狀態采集裝置安裝在前端監控設備的監控箱中,采集監控設備的各種運行狀態信息, 并將信息發送給運維管理平臺. 狀態采集裝置具有通用性、可擴展性、高可靠性和易維護性.
運維管理系統接收、存儲、管理從采集裝置收到的運行狀態數據. 由于監控設備的狀態數據具有鮮明的時序數據特征, 使用傳統的關系數據庫在存儲空間、查詢速度和可靠性方面難以滿足需求. 本系統使用了InfluxDB存儲時序數據, 其他業務數據使用MySQL存儲.
運維人員通過移動終端APP獲得維修工單; 并可以在現場通過WiFi連接到狀態采集裝置進行測試和操作. 可視化展示系統對監控運維數據進行可視化渲染呈現, 為系統的運維提供智能化的支持.
基于InfluxDB的通用監控設備運維管理平臺為監控設備的運維提供一個更加智能、低廉、高效的解決方案, 解決監控設備故障定位困難, 運維成本高昂的問題, 改變目前監控設備運行維護模式. 目前已有部分用戶部署試用. 平臺運行狀況良好, 能支持大量監控設備的運維管理工作, 展現出了良好的經濟社會效益和市場前景.
基于InfluxDB的通用監控設備運維管理平臺的體系結構如圖1所示. 其中狀態采集裝置能采集監控設備的供電情況、網絡狀態等支持和影響設備正常工作的基本狀態信息; 能遠程進行設備的重啟操作, 以排除設備的簡單故障. 狀態采集裝置具有很好的可擴展性, 能夠根據不同的監控需求進行擴展, 如接入各種不同類型的傳感器, 采集多種運行狀態相關數據, 如溫度、濕度等. 狀態采集裝置體積小巧, 能輕易地安裝在大多數監控箱中; 提供了基于移動設備的設備配置和管理功能; 在自身電源、網絡方面進行冗余設計, 安全可靠, 能在各種惡劣極端的環境下工作, 能在各種情況下有效可靠地發回信息.

圖1 體系結構示意圖
運維管理系統接收采集裝置發來的運行狀態數據并及時處理和存儲; 能對故障自動識別, 自動報警, 自動定位故障位置及故障類型; 為維修人員提供設備報修、情況錄入、跟蹤、問題流轉、結果反饋等流程管理; 為業務人員提供查看重點設備歷史運行狀況和歷史故障信息的功能. 運維管理系統融合了關系數據庫MySQL和時序數據庫InfluxDB, 能有效地支持大規模采集裝置的日常運行.
可視化展示系統對大量的監控設備運行狀態數據進行可視化渲染和呈現, 能有效地展示整個監控平臺的運行狀態, 便于管理人員從整體上把握系統運行態勢, 為系統的運維提供智能化的支持.
運維人員移動端APP可以接收到運維管理系統發來的維護工單; 可以方便查詢到將要維護的設備種類型號、故障類型預測、維護物料清單等內容; 可以通過藍牙或WiFi等遠程接口連接到狀態監控器, 進行遙控重啟、遠程測試、操控等工作, 能極大減輕維護的工作量.
如圖2所示, 前端狀態數據采集裝置由3部分功能模塊組成: 狀態數據采集模塊、通信模塊、電源管理模塊.

圖2 前端狀態采集裝置模塊結構示意圖
狀態數據采集模塊能接入各類傳感器, 用于采集監控設備的各種狀態信號, 如: 電源、網絡、門磁、補光燈、溫度/濕度傳感器等. 此外還允許通過485總線協議接入其他種類的傳感器信號, 便于設備在不同的系統和設備中使用, 具有很高的通用性和可擴展性.
通信模塊有多種通信方式, 其中在監控設備正常工作的情況下可以通過有線網與運維管理系統相連;當有線網中斷, 且導致監控設備不能正常工作的情況下, 可以通過無線網絡(4G或NB IOT)與運維管理系統相連, 并發送報警信息. 此外, 設備還可以通過WiFi模塊與運維人員的移動設備相連, 便于運維人員進行配置和管理.
電源管理模塊的功能是: 當監控設備正常工作的情況下, 狀態采集裝置本身也使用市電供電; 當監控設備出現故障, 運行運維人員遠程控制電源重啟, 以排除一些簡單的故障; 當監控設備的供電出現問題時, 前端狀態采集裝置本身可利用鋰電池進行供電, 保證監控設備的故障信息及時可靠地上報.
狀態采集裝置在通信和電源兩個模塊上進行了冗余設計, 充分考慮了在極端情況下的工作需求. 使得數據采集裝置在監控設備斷網斷電的情況下仍然能夠正常功能, 采集并發送數據到運維管理平臺. 而在網絡、供電正常的情況下, 使用監控設備的網絡和電源, 能大幅節約網絡流量和電池壽命. 這帶來了很高的可用性和可靠性.
狀態采集裝置的固件程序, 是基于LUAT進行開發. LUAT是一種新型物聯網開源架構, 依托于通信模塊做簡易快捷的開發, 將傳統的AT命令用Lua語言封裝成API, Lua語言具有高效性、可移植性、簡單強大、小巧輕便等特點[10]. 開發者可以通過調用API快捷地實現TTS、GPS、SOCKET等功能. 使用LUAT作為設備核心, 可以方便快捷地實現很多功能, 減少開發成本和時間, 降低設備成本. 同時LUAT還支持遠程升級, 減少了后期維護成本.
前端狀態采集裝置還為主流移動端平臺如Android、iOS等開發一個移動端的APP配置管理程序用于前端采集裝置的配置和管理. 該APP程序可以在現場通過WiFi與采集裝置相連, 從而檢測狀態采集裝置各模塊、傳感器等是否正常工作, 并可以通過狀態采集裝置收集監控設備詳細的運行狀態數據, 對監控設備進行測試和操控, 為現場運維提供了很好的支持.
運維管理系統不僅提供了狀態信息接入、存儲等功能, 還需要為管理人員提供報警、運維流程管理、設備遠程管理等功能, 系統負載很重. 由于運維管理平臺面向的應用場景可能接入成千上萬甚至幾十萬臺監控設備的狀態采集裝置. 大量的狀態采集裝置將不間斷地發送心跳包和運行狀態數據, 這些數據是重要的業務數據, 必須得到有效的存儲和管理. 狀態信息在平臺的處理流程如圖3所示.

圖3 狀態信息處理流程示意圖
然而, 監控設備的運行狀態數據具有時序特征, 經測算, 平均每臺狀態采集裝置每分鐘將產生20條左右的實時數據, 并需要寫入到數據庫中. 為支持可視化展示系統, 需要對實時數據進行統計, 分別產生3分鐘、20分鐘等6種不同時間段的最大值、最小值、平均值等不同形式的統計數據. 這些統計數據應及時生成, 避免信息的滯后.
當數據量較小時, 傳統關系型數據庫, 如MySQL,能夠滿足上述需求. 可以分別建立實時表、統計表, 并用觸發器程序完成對實時數據的統計工作. 然而, 當設備數目增加到數千臺時, MySQL難以滿足系統的存儲和讀寫需求. 表1給出了MySQL在3000臺和1000臺設備3個月數據的存儲空間需求.

表1 MySQL存儲空間需求
大規模的數據使得數據查詢效率急劇降低, 因此需要在常用的查詢關鍵字上建立多個索引, 這又帶來了巨量存儲空間需求. 而關系數據庫在進行數據并發讀寫時, 對數據和索引上鎖也導致了嚴重的性能問題.事實上, 當采集裝置達到1000+時, MySQL已無法通過觸發器完成統計數據的計算和插入工作. 而即使進行分庫分表的操作也不能圓滿解決大規模時序數據對存儲空間需求和數據讀寫時延帶來的問題. 此外, 巨大的空間需求也使得對實時數據進行備份和恢復非常困難.
InfluxDB是由InfluxData開發的開源時序型數據,主要用于高性能查詢與存儲時序型數據[11-14]. 目前,InfluxDB被廣泛應用于存儲系統的監控數據, IoT行業的實時數據等場景. 例如, 韓藝坤等使用InfluxDB存儲橋梁監測傳感器數據[11]; 孟宇等將InfluxDB用于冶金自動化相關業務[12]. 在工業數據庫引擎[13]和監控系統[14]中InfluxDB也得到了應用. 在上述應用實踐中,InfluxDB都有效地提高了整個系統的性能.
有鑒于此, 運維管理系統使用InfluxDB存儲狀態信息, 對實時數據的統計則通過連續查詢定時生成, 圖4給出了生成統計數據的連續查詢語句. 其他業務數據如監控設備基本信息、狀態采集裝置相關參數、用戶權限管理信息等都依然存放在MySQL中.

圖4 使用連續查詢生成統計數據
采用InfluxDB存儲狀態信息數據為系統帶來性能上極大的提高. 表2給出了設備為3000臺, 數據采集時間為3個月時, 使用MySQL和InfluxDB存儲數據的空間需求和查詢性能的對比. 其中MySQL的空間包含了表空間和索引空間. 查詢需求是3個月中某臺設備的1天的所有狀態數據.

表2 MySQL與InfluxDB對比
運維管理系統采用InfluxDB+MySQL的混合模式存儲數據, 針對不同類型數據采用不同的管理方式. 系統實際運行效率提升顯著.
平臺的4個組成部分中, 運維管理系統最為關鍵,功能相對最復雜. 運維管理系統采用了瀏覽器/服務器結構, 基于Spring MVC+ MyBatis+Vue.js進行開發. 其中前端使用Vue.js框架, 后端是Spring MVC框架, 數據庫采用MySQL存儲業務數據. 整個系統采用前后端分離的開發方式, 前后端通過HTTP協議完成交互.
如圖5所示, 運維管理系統劃分為3層結構: 表現層、服務層和數據層. 表現層用于與用戶交互, 是用戶功能接口; 服務層把運維管理的主要業務邏輯進行抽象, 并以服務形式提供接口; 數據層提供數據存儲、數據-對象轉換等數據功能需求的支持. 3層結構的劃分使得系統各模塊有較清晰的功能邊界, 便于維護和后續功能擴展.

圖5 運維管理系統結構圖
基于InfluxDB的通用監控設備運維平臺已開發完成, 并在海南、廣西等多個用戶單位安裝試運行, 運行狀況良好. 圖6為前端狀態采集裝置的實物圖, 圖7為運維管理系統運行的界面示例.

圖6 前端狀態采集裝置實物圖

圖7 系統界面示例
監控設備分布廣闊, 數量龐大, 工作環境惡劣, 給運維帶來巨大的困難. 現有監控設備運維平臺存在兼容性可擴展性差、可靠性可用性不高、不能承載大規模監控設備的運維工作等缺陷. 本文研發的基于InfluxDB的監控設備通用運維平臺, 前端狀態采集裝置能夠安裝到大多數監控箱, 能接入多種不同的傳感器, 具有很好的通用性和可擴展性; 通過冗余設計保證狀態采集裝置在斷網斷電的情況下也能正常工作, 極大提高了可靠性和可用性. 平臺的管理系統使用InfluxDB存儲時序數據, 能大幅度壓縮時序數據的空間需求, 提高對時序數據的查詢效率, 從而從整體上提高了平臺的性能和運維的規模.
基于InfluxDB的監控設備通用運維平臺已投入實際的應用, 已初步展現出社會效益和經濟效益. 下一步, 將根據用戶的反饋, 不斷對平臺改進, 提升系統性能, 增加貼近用戶需求的功能. 此外, 平臺的架構、軟硬件都具有很好的可擴展性, 可不斷關注相關市場需求, 拓展平臺的應用場景.