劉遠超, 李樹彬
(1.山東警察學院現代教育中心,山東 濟南,250014;2.山東警察學院交通管理工程系,山東 濟南,250014)
基于Zabbix和微信企業號實現網絡監控的研究
劉遠超1, 李樹彬2
(1.山東警察學院現代教育中心,山東 濟南,250014;2.山東警察學院交通管理工程系,山東 濟南,250014)
本文提出了Zabbix和微信企業號結合的方法,實現告警信息的即時推送。二者的有效結合,可以大幅度地提升網絡運維的管理效率,保證網絡的高可用性和持續性,從而為運維自動化提供幫助。
網絡監控;Zabbix;微信企業號;觸發策略
2.Department Traffic Management Engineering, Shandong Police College, Jinan 250014, China)
近年來,信息化不斷深入到人們的工作、學習和生活的各個方面,因此而產生的數據量呈指數式增長,網絡設備、服務器、業務系統、數據庫等軟硬件設備的紛繁林復雜總以及用戶對IT業務的高可用性需求使得網絡運維工作任務更加艱巨[1]。傳統的網絡運維仍然是由用戶在使用過程中發現故障,然后通知網絡運維部門,經過運維人員故障驗證后再開始采取相應措施解決故障。這種被動、孤立的運維方式,不僅用戶對網絡的可用性提出異議,而且運維人員疲于處理各種故障、效率低下,即使加班加點地調試、部署、維護,也經常會因設備故障而導致業務中斷,嚴重影響單位的正常運轉[2]。部署高效可靠的網絡監控系統,通過監視各種網絡參數,并提供便捷、及時的通知機制讓運維人員快速定位并解決故障,對于保證網絡的高可用性具有非常重要的作用。
Zabbix作為一款企業級的開源網絡監控項目,提供分布式系統監視以及網絡監視功能,其高度集成的解決方案目前廣泛應用于各行各業[3]。Zabbix是基于WEB界面,具有node和proxy兩種分布式部署方式;能夠監控幾乎所有類型的設備;提供完善API,能夠實現與其他運維管理系統的完美對接;提供開放接口,支持自定義告警,方便及時有效的通知發布,這對于構建分布式監控系統具有重要作用[4]。借助Zabbix,可以減輕運維人員繁重的網絡運維管理工作,實現網絡的高可用性和持續性。
Zabbix默認支持郵件告警功能,但是郵件接收不及時甚至容易被運維人員擱置。Zabbix可以通過外接短信貓或者調用短信網關方式實現短信告警,但是使用短信網關會產生費用。微信作為最大用戶群體的即時通訊軟件,方便快捷,其可用性和持續性已經獲得用戶認可。微信公眾號提供了豐富的第三方接口,其官網也提供了詳細的API文檔,越來越多的政府機關、企事業單位和團體使用公眾號來提供服務、推送消息[5]。Zabbix通過調用微信的免費接口,不僅可以實現告警零成本,而且可以及時高效地將告警信息推送給運維人員,以便及時處理。本文將Zabbix與微信公眾號結合,實現對網絡運行狀態的監控。
1.1 Zabbix架構
Zabbix主要由Zabbix Server、proxy、agent、web前端和數據庫等部分組成[6]。其主要架構如圖1所示。

圖1 Zabbix架構示意圖Fig.1 Architecture diagram of Zabbix
Server是Zabbix的核心組件,主要負責接收agent發送的信息數據,管理系統配置信息和歷史數據。proxy即代理服務器,可視為Server的擴展部分,可以代替Server收集監控設備上的數據然后轉發給Server,主要適用于分布式環境中[7]。agent部署在被監控設備上,主要負責收集監控數據并發往Server或proxy。Web前端主要是方便運維管理人員對Zabbix進行配置和查看監控設備的狀態,通常和Server部署在同一臺服務器中。Database主要用于存儲收集的監控數據和Zabbix的配置信息。
1.2 Zabbix安裝部署
Zabbix Server可以運行在Linux、Solaris、Free BSD等平臺上,還需要一些第三方軟件的支持,如Apache、PHP、數據庫等。通常運行在LAMP環境下,部署比較簡單、靈活。以LAMP為例,環境為CentOS7+Apache+MySQL+PHP,PHP需要添加部分插件支持[8]。
Server端部署包括Server包安裝、MySQL安裝及數據導入和Web前端配置。可以通過Zabbix官方網站獲得Zabbix的最新版本及歷史版本,目前最新版本為3.2.1。
Proxy端部署類似于Server端,同時需要在Server中配置proxy并將其自身添加到監控設備中。
agent端分為Linux和Windows兩種不同系統的安裝。Linux下可以直接采用yum安裝最新版本的RPM包,采用RPM方式安裝比較簡單,結合自動化配置工具,適用于監控規模比較大的場景。Windows下可直接下載exe執行文件,修改zabbix_agent.conf并添加到開機啟動。
1.3 Zabbix配置管理
Zabbix配置流程如圖2所示。

圖2 Zabbix配置流程圖Fig.2 Flowchart of Zabbix configuration
被監控設備稱之為主機,可通過IP指定。主機可以通過SNMP、agent、IPMI等多種方式與服務器通信,對于網絡環境而言,目前絕大多數的網絡設備都支持SNMP,配置簡單方便、協議公開,適用于網絡監控環境中[9]。條目作為特定的監控數據,來源于被監控主機,是整個監控數據收集的核心。觸發器可以理解為表達式,通過預設閾值方式與監控數據比較,當條目中接收到的監控數據在閾值范圍之內,觸發器狀態為OK,當監控數據超過閾值時觸發器狀態變為Problem。事件為關注事件,例如觸發器狀態變化、主機上線等。行為會預定義特定事件發生的處理機制,如當條目的數據內容異常引起觸發器狀態變化時,行為執行相應的動作。媒介指監控數據異常時的通知機制,通過與微信(WeChat)的結合可以及時高效地通知運維人員處理。Zabbix作為分布式監控系統,優勢之一在于提供了自動發現功能,可以自動發現并添加主機,這對于大規模的網絡管理非常有幫助。模板用于快速定義主機的預設條目集合,是主機中共性的抽象,主要包含了條目、觸發器等項目,可以直接關聯至主機,當模板關聯至某個主機時,模板中包含的所有項目都會被添加到主機中。實際網絡環境中,許多主機都有相同或者類似的屬性,利用模板可以避免重復性工作。
在智能化越來越普及的今天,微信作為目前最主流的即時通信軟件,幾乎裝備了所有的智能設備。微信公眾平臺是為個人、企業和組織提供服務與管理的全新服務平臺。目前主要分為訂閱號、服務號和企業號。訂閱號主要是構建與用戶之間的溝通與交流,聚焦于信息傳播方式,旨在為用戶提供信息和資訊,適用于個人、企業和組織。其消息顯示在“訂閱號”文件夾中,每天可以群發1條消息。服務號主要是為企業和組織提供新的服務途徑,側重于服務和用戶管理能力,旨在為用戶提供服務,適用于企業和組織。其消息直接顯示在好友對話列表中,每月可群發4條消息。企業號主要服務于企業和組織內部,幫助建立員工、合作伙伴與業務系統之間的關聯,適用于企業和組織。消息直接顯示在對話列表中,每天可群發消息數量為帳號上限數×30人次,每條消息長度不超過600字。企業號可以開啟二次認證功能,對于通過身份認證的用戶方可讓其關注成功,極大地提高了企業號的信息安全。目前騰訊對企業號僅收取每年300元的認證費用,各項服務均為免費,利用企業號推送Zabbix的告警信息,費用成本較低。運維人員關注關聯Zabbix的企業號,通過身份認證后關注成功,告警信息推送到運維人員微信端,既保證了消息推送的及時高效,又保證告警信息不會外泄,提高了信息的安全性[10]。
微信企業號申請注冊地址為https://qy.weixin.qq.com,帳號主體類型為團體時,可免于上傳營業執照。企業號申請成功后,登錄管理平臺,在組織架構中添加運維管理部門及接收推送消息的運維人員,如圖3所示。

圖3 企業號添加部門和人員Fig.3 Department and personnel added in WeChat enterprise accounts
部門和人員添加完成后,接著創建應用。告警信息主要是通知發送,內容為文字描述,因此創建消息型應用。應用的可見范圍選擇運維管理部門。然后對此應用進行權限設置,如圖4所示。其中注意CorpID和Secret 兩個密鑰,CorpID是企業號的標識,Secret是管理組憑證密鑰。Zabbix調用微信的腳本中會利用CorpID和Secret生成token,通過token發送消息。配置完成后,可以根據微信官網提供的API進行測試。微信官網還提供了接口調試的工具,地址為http://qydev.weixin.qq.com/debug,可幫助驗證結果。

圖4 權限設置Fig.4 Permission setting
Zabbix搭建完成和企業號申請完成后,還需要在Zabbix上配置,使其調用企業號進行消息推送。
3.1 Zabbix調用企業號
Zabbix調用企業號的腳本的路徑為/usr/local/zabbix/share/zabbix/alertscripts,其腳本內容如下:
#!/usr/bin/python
import urllib,urllib2,json
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
defgettoken(corpid,corpsecret):
gettoken_url = 'https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=' + CorpID + '&secret=' + Secret
printgettoken_url
try:
token_file = urllib2.urlopen(gettoken_url)
except urllib2.HTTPError as e:
printe.code
printe.read().decode("utf8")
sys.exit()
token_data = token_file.read().decode('utf-8')
token_json = json.loads(token_data)
token_json.keys()
token =token_json['access_token']
return token
defsendMessage(access_token,user,subject,content):
send_url = 'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + access_token
send_values = {
'touser':touser,
'toparty':'2',
'msgtype':'text',
'agentid':'2',
'text':{
'content':message
},
'safe':"0"
}
#send_data = json.dumps(send_values, ensure_ascii=False)
send_data = simplejson.dumps(send_values, ensure_ascii=False).encode('utf-8')
send_request = urllib2.Request(send_url, send_data)
response =json.loads(urllib2.urlopen(send_request).read())
printstr(response)
if __name__ == '__main__':
user =str(sys.argv[1])
subject =str(sys.argv[2])
content =str(sys.argv[3])
CorpID = 'CorpID'
Secret = 'Secret'
accesstoken = gettoken(CorpID, Secret)
sendMessage(accesstoken,user,subject,content)
其中,CorpID是企業號的標識,Secret是管理組憑證密鑰,在申請完企業號后即可獲得CorpID和Secret。toparty指部門id。msgtype指消息類型。agentid指企業號中的應用id,可在應用的設置頁面查看。sys.argv[1], sys.argv[2],sys.argv[3]是Zabbix傳遞給腳本的參數。
3.2 Zabbix添加Media
在Zabbix平臺上添加微信的告警媒介Media和動作Action,如圖5所示[11]。

圖5 Media和Action設置Fig.5 Setting for Media and Action
設置完成后,可通過主動發出告警事件測試消息推送。
3.3 網絡監控實例
本文通過虛擬化搭建監控環境,配置為CentOS 7+mysql+apache+PHP,Zabbix版本為3.0.5。由于監控主機相對較少,且分布較集中,因此搭建了1臺Zabbix服務器。目前通過SNMP方式監控交換機90多臺,監控條目700余條。網絡拓撲如圖6所示。

圖6 網絡拓撲圖Fig.6 Network topology
通過Zabbix平臺監控某互聯網出口的一天的流量狀態如圖7所示。因主機故障通過微信企業號推送的告警信息如圖8所示。

圖7 某互聯網出口的一天流量圖Fig.7 Daily traffic map of an Internet export

圖8 微信企業號推送的告警信息 Fig.8 Alarm message pushed by WeChat enterprise accounts
本文通過廣泛使用的微信企業號及時推送告警信息,使用開源監控項目Zabbix檢測網絡狀態,可以實現對網絡運行狀況的有效監測。通過配置不同的觸發策略,能夠監測幾乎所有網絡設備,并可根據設備重要程度推送不同級別的告警信息。通過微信企業號推送告警信息具有高效性通知,但成本幾乎為零。該研究為網絡運維的自動化提供了有效的支撐手段。
[1]蔣東興.我國高校信息化發展狀況與對策建議[J].中國信息界, 2011(09):20-22.
[2]劉慧敏.以ITIL為基礎的IT服務管理應用研究[J].計算機技術與發展, 2012,22(5):195-197.
[3]VLADISHEV A. Open source enterprise monitoring with Zabbix[C].Open Source Data Center Conference, Nurnberg. 2009, 60.
[4]TADER P. Server monitoring with Zabbix[J]. Linux Journal, 2010(195):7.
[5]周解敏.微信公共平臺的營運開發—關于企業號的實踐與應用現代經濟信息[J].現代經濟信息,2015(10):153.
[6]Zabbix LLC. Zabbix Documentation 3.0 [EB/OL].[2016-10-1].https://www.zabbix.com/documentation/3.0/manual.
[7]吳兆松.Zabbix企業級分布式監控系統[M]. 北京:電子工業出版社, 2014.
[8]MESCHERYAKOV S V, SHCHEMELININD A. Analytical overview of Zabbix international conference 2013 [J]. SPbSPU Journal. Computer Science. Telecommunication and Control Systems, 2014, 1(188):91-98.
[9]郭曉慧, 李潤知, 張茜,等.基于Zabbix的分布式服務器監控應用研究[J]. 通信學報,2013(S2):94-98.
[10]騰訊公司. 微信JS-SDK說明文檔[EB/OL].[2016-10-1].http://qydev.weixin.qq.com/wiki/index.php?title=%E9%A6%96%E9%A1%B5.
[11]姚仁捷. Zabbix監控系統深度實踐[M].2版. 北京:電子工業出版社, 2014.
Research and implementation of network monitoring based on Zabbix and WeChat enterprise accounts
LIU Yuan-chao1, LI Shu-bin2
(1.Department Modern Education Center, Shandong Police College, Jinan 250014, China;
∶A combination method of Zabbix and WeChat enterprise accounts was proposed in this paper to realize the instant pushing of alarm information. With the effective combination of Zabbix and WeChat enterprise accounts, it can greatly enhance the management efficiency of network operation and maintenance, and ensure high availability and persistence of network, thus providing assistance for the automation of network operation and maintenance.
∶network monitoring; Zabbix; WeChat enterprise accounts; trigger straegy
10.3976/j.issn.1002-4026.2017.04.020
2016-11-22
山東警察學院科研計劃(YKJYB201604);山東省高等學校科技計劃(J17KA211);山東省公安廳科技專項(GATHT2015-236);濟南市社會民生重大專項(201509005)
劉遠超(1987—),男,助理實驗師,研究方向為網絡管理,網絡安全。E-mail:lyc136564@163.com
TP393
A
1002-4026(2017)04-0124-07