劉遠(yuǎn)超, 李樹(shù)彬
(1.山東警察學(xué)院現(xiàn)代教育中心,山東 濟(jì)南,250014;2.山東警察學(xué)院交通管理工程系,山東 濟(jì)南,250014)
基于Zabbix和微信企業(yè)號(hào)實(shí)現(xiàn)網(wǎng)絡(luò)監(jiān)控的研究
劉遠(yuǎn)超1, 李樹(shù)彬2
(1.山東警察學(xué)院現(xiàn)代教育中心,山東 濟(jì)南,250014;2.山東警察學(xué)院交通管理工程系,山東 濟(jì)南,250014)
本文提出了Zabbix和微信企業(yè)號(hào)結(jié)合的方法,實(shí)現(xiàn)告警信息的即時(shí)推送。二者的有效結(jié)合,可以大幅度地提升網(wǎng)絡(luò)運(yùn)維的管理效率,保證網(wǎng)絡(luò)的高可用性和持續(xù)性,從而為運(yùn)維自動(dòng)化提供幫助。
網(wǎng)絡(luò)監(jiān)控;Zabbix;微信企業(yè)號(hào);觸發(fā)策略
2.Department Traffic Management Engineering, Shandong Police College, Jinan 250014, China)
近年來(lái),信息化不斷深入到人們的工作、學(xué)習(xí)和生活的各個(gè)方面,因此而產(chǎn)生的數(shù)據(jù)量呈指數(shù)式增長(zhǎng),網(wǎng)絡(luò)設(shè)備、服務(wù)器、業(yè)務(wù)系統(tǒng)、數(shù)據(jù)庫(kù)等軟硬件設(shè)備的紛繁林復(fù)雜總以及用戶對(duì)IT業(yè)務(wù)的高可用性需求使得網(wǎng)絡(luò)運(yùn)維工作任務(wù)更加艱巨[1]。傳統(tǒng)的網(wǎng)絡(luò)運(yùn)維仍然是由用戶在使用過(guò)程中發(fā)現(xiàn)故障,然后通知網(wǎng)絡(luò)運(yùn)維部門(mén),經(jīng)過(guò)運(yùn)維人員故障驗(yàn)證后再開(kāi)始采取相應(yīng)措施解決故障。這種被動(dòng)、孤立的運(yùn)維方式,不僅用戶對(duì)網(wǎng)絡(luò)的可用性提出異議,而且運(yùn)維人員疲于處理各種故障、效率低下,即使加班加點(diǎn)地調(diào)試、部署、維護(hù),也經(jīng)常會(huì)因設(shè)備故障而導(dǎo)致業(yè)務(wù)中斷,嚴(yán)重影響單位的正常運(yùn)轉(zhuǎn)[2]。部署高效可靠的網(wǎng)絡(luò)監(jiān)控系統(tǒng),通過(guò)監(jiān)視各種網(wǎng)絡(luò)參數(shù),并提供便捷、及時(shí)的通知機(jī)制讓運(yùn)維人員快速定位并解決故障,對(duì)于保證網(wǎng)絡(luò)的高可用性具有非常重要的作用。
Zabbix作為一款企業(yè)級(jí)的開(kāi)源網(wǎng)絡(luò)監(jiān)控項(xiàng)目,提供分布式系統(tǒng)監(jiān)視以及網(wǎng)絡(luò)監(jiān)視功能,其高度集成的解決方案目前廣泛應(yīng)用于各行各業(yè)[3]。Zabbix是基于WEB界面,具有node和proxy兩種分布式部署方式;能夠監(jiān)控幾乎所有類型的設(shè)備;提供完善API,能夠?qū)崿F(xiàn)與其他運(yùn)維管理系統(tǒng)的完美對(duì)接;提供開(kāi)放接口,支持自定義告警,方便及時(shí)有效的通知發(fā)布,這對(duì)于構(gòu)建分布式監(jiān)控系統(tǒng)具有重要作用[4]。借助Zabbix,可以減輕運(yùn)維人員繁重的網(wǎng)絡(luò)運(yùn)維管理工作,實(shí)現(xiàn)網(wǎng)絡(luò)的高可用性和持續(xù)性。
Zabbix默認(rèn)支持郵件告警功能,但是郵件接收不及時(shí)甚至容易被運(yùn)維人員擱置。Zabbix可以通過(guò)外接短信貓或者調(diào)用短信網(wǎng)關(guān)方式實(shí)現(xiàn)短信告警,但是使用短信網(wǎng)關(guān)會(huì)產(chǎn)生費(fèi)用。微信作為最大用戶群體的即時(shí)通訊軟件,方便快捷,其可用性和持續(xù)性已經(jīng)獲得用戶認(rèn)可。微信公眾號(hào)提供了豐富的第三方接口,其官網(wǎng)也提供了詳細(xì)的API文檔,越來(lái)越多的政府機(jī)關(guān)、企事業(yè)單位和團(tuán)體使用公眾號(hào)來(lái)提供服務(wù)、推送消息[5]。Zabbix通過(guò)調(diào)用微信的免費(fèi)接口,不僅可以實(shí)現(xiàn)告警零成本,而且可以及時(shí)高效地將告警信息推送給運(yùn)維人員,以便及時(shí)處理。本文將Zabbix與微信公眾號(hào)結(jié)合,實(shí)現(xiàn)對(duì)網(wǎng)絡(luò)運(yùn)行狀態(tài)的監(jiān)控。
1.1 Zabbix架構(gòu)
Zabbix主要由Zabbix Server、proxy、agent、web前端和數(shù)據(jù)庫(kù)等部分組成[6]。其主要架構(gòu)如圖1所示。
圖1 Zabbix架構(gòu)示意圖Fig.1 Architecture diagram of Zabbix
Server是Zabbix的核心組件,主要負(fù)責(zé)接收agent發(fā)送的信息數(shù)據(jù),管理系統(tǒng)配置信息和歷史數(shù)據(jù)。proxy即代理服務(wù)器,可視為Server的擴(kuò)展部分,可以代替Server收集監(jiān)控設(shè)備上的數(shù)據(jù)然后轉(zhuǎn)發(fā)給Server,主要適用于分布式環(huán)境中[7]。agent部署在被監(jiān)控設(shè)備上,主要負(fù)責(zé)收集監(jiān)控?cái)?shù)據(jù)并發(fā)往Server或proxy。Web前端主要是方便運(yùn)維管理人員對(duì)Zabbix進(jìn)行配置和查看監(jiān)控設(shè)備的狀態(tài),通常和Server部署在同一臺(tái)服務(wù)器中。Database主要用于存儲(chǔ)收集的監(jiān)控?cái)?shù)據(jù)和Zabbix的配置信息。
1.2 Zabbix安裝部署
Zabbix Server可以運(yùn)行在Linux、Solaris、Free BSD等平臺(tái)上,還需要一些第三方軟件的支持,如Apache、PHP、數(shù)據(jù)庫(kù)等。通常運(yùn)行在LAMP環(huán)境下,部署比較簡(jiǎn)單、靈活。以LAMP為例,環(huán)境為CentOS7+Apache+MySQL+PHP,PHP需要添加部分插件支持[8]。
Server端部署包括Server包安裝、MySQL安裝及數(shù)據(jù)導(dǎo)入和Web前端配置??梢酝ㄟ^(guò)Zabbix官方網(wǎng)站獲得Zabbix的最新版本及歷史版本,目前最新版本為3.2.1。
Proxy端部署類似于Server端,同時(shí)需要在Server中配置proxy并將其自身添加到監(jiān)控設(shè)備中。
agent端分為L(zhǎng)inux和Windows兩種不同系統(tǒng)的安裝。Linux下可以直接采用yum安裝最新版本的RPM包,采用RPM方式安裝比較簡(jiǎn)單,結(jié)合自動(dòng)化配置工具,適用于監(jiān)控規(guī)模比較大的場(chǎng)景。Windows下可直接下載exe執(zhí)行文件,修改zabbix_agent.conf并添加到開(kāi)機(jī)啟動(dòng)。
1.3 Zabbix配置管理
Zabbix配置流程如圖2所示。
圖2 Zabbix配置流程圖Fig.2 Flowchart of Zabbix configuration
被監(jiān)控設(shè)備稱之為主機(jī),可通過(guò)IP指定。主機(jī)可以通過(guò)SNMP、agent、IPMI等多種方式與服務(wù)器通信,對(duì)于網(wǎng)絡(luò)環(huán)境而言,目前絕大多數(shù)的網(wǎng)絡(luò)設(shè)備都支持SNMP,配置簡(jiǎn)單方便、協(xié)議公開(kāi),適用于網(wǎng)絡(luò)監(jiān)控環(huán)境中[9]。條目作為特定的監(jiān)控?cái)?shù)據(jù),來(lái)源于被監(jiān)控主機(jī),是整個(gè)監(jiān)控?cái)?shù)據(jù)收集的核心。觸發(fā)器可以理解為表達(dá)式,通過(guò)預(yù)設(shè)閾值方式與監(jiān)控?cái)?shù)據(jù)比較,當(dāng)條目中接收到的監(jiān)控?cái)?shù)據(jù)在閾值范圍之內(nèi),觸發(fā)器狀態(tài)為OK,當(dāng)監(jiān)控?cái)?shù)據(jù)超過(guò)閾值時(shí)觸發(fā)器狀態(tài)變?yōu)镻roblem。事件為關(guān)注事件,例如觸發(fā)器狀態(tài)變化、主機(jī)上線等。行為會(huì)預(yù)定義特定事件發(fā)生的處理機(jī)制,如當(dāng)條目的數(shù)據(jù)內(nèi)容異常引起觸發(fā)器狀態(tài)變化時(shí),行為執(zhí)行相應(yīng)的動(dòng)作。媒介指監(jiān)控?cái)?shù)據(jù)異常時(shí)的通知機(jī)制,通過(guò)與微信(WeChat)的結(jié)合可以及時(shí)高效地通知運(yùn)維人員處理。Zabbix作為分布式監(jiān)控系統(tǒng),優(yōu)勢(shì)之一在于提供了自動(dòng)發(fā)現(xiàn)功能,可以自動(dòng)發(fā)現(xiàn)并添加主機(jī),這對(duì)于大規(guī)模的網(wǎng)絡(luò)管理非常有幫助。模板用于快速定義主機(jī)的預(yù)設(shè)條目集合,是主機(jī)中共性的抽象,主要包含了條目、觸發(fā)器等項(xiàng)目,可以直接關(guān)聯(lián)至主機(jī),當(dāng)模板關(guān)聯(lián)至某個(gè)主機(jī)時(shí),模板中包含的所有項(xiàng)目都會(huì)被添加到主機(jī)中。實(shí)際網(wǎng)絡(luò)環(huán)境中,許多主機(jī)都有相同或者類似的屬性,利用模板可以避免重復(fù)性工作。
在智能化越來(lái)越普及的今天,微信作為目前最主流的即時(shí)通信軟件,幾乎裝備了所有的智能設(shè)備。微信公眾平臺(tái)是為個(gè)人、企業(yè)和組織提供服務(wù)與管理的全新服務(wù)平臺(tái)。目前主要分為訂閱號(hào)、服務(wù)號(hào)和企業(yè)號(hào)。訂閱號(hào)主要是構(gòu)建與用戶之間的溝通與交流,聚焦于信息傳播方式,旨在為用戶提供信息和資訊,適用于個(gè)人、企業(yè)和組織。其消息顯示在“訂閱號(hào)”文件夾中,每天可以群發(fā)1條消息。服務(wù)號(hào)主要是為企業(yè)和組織提供新的服務(wù)途徑,側(cè)重于服務(wù)和用戶管理能力,旨在為用戶提供服務(wù),適用于企業(yè)和組織。其消息直接顯示在好友對(duì)話列表中,每月可群發(fā)4條消息。企業(yè)號(hào)主要服務(wù)于企業(yè)和組織內(nèi)部,幫助建立員工、合作伙伴與業(yè)務(wù)系統(tǒng)之間的關(guān)聯(lián),適用于企業(yè)和組織。消息直接顯示在對(duì)話列表中,每天可群發(fā)消息數(shù)量為帳號(hào)上限數(shù)×30人次,每條消息長(zhǎng)度不超過(guò)600字。企業(yè)號(hào)可以開(kāi)啟二次認(rèn)證功能,對(duì)于通過(guò)身份認(rèn)證的用戶方可讓其關(guān)注成功,極大地提高了企業(yè)號(hào)的信息安全。目前騰訊對(duì)企業(yè)號(hào)僅收取每年300元的認(rèn)證費(fèi)用,各項(xiàng)服務(wù)均為免費(fèi),利用企業(yè)號(hào)推送Zabbix的告警信息,費(fèi)用成本較低。運(yùn)維人員關(guān)注關(guān)聯(lián)Zabbix的企業(yè)號(hào),通過(guò)身份認(rèn)證后關(guān)注成功,告警信息推送到運(yùn)維人員微信端,既保證了消息推送的及時(shí)高效,又保證告警信息不會(huì)外泄,提高了信息的安全性[10]。
微信企業(yè)號(hào)申請(qǐng)注冊(cè)地址為https://qy.weixin.qq.com,帳號(hào)主體類型為團(tuán)體時(shí),可免于上傳營(yíng)業(yè)執(zhí)照。企業(yè)號(hào)申請(qǐng)成功后,登錄管理平臺(tái),在組織架構(gòu)中添加運(yùn)維管理部門(mén)及接收推送消息的運(yùn)維人員,如圖3所示。
圖3 企業(yè)號(hào)添加部門(mén)和人員Fig.3 Department and personnel added in WeChat enterprise accounts
部門(mén)和人員添加完成后,接著創(chuàng)建應(yīng)用。告警信息主要是通知發(fā)送,內(nèi)容為文字描述,因此創(chuàng)建消息型應(yīng)用。應(yīng)用的可見(jiàn)范圍選擇運(yùn)維管理部門(mén)。然后對(duì)此應(yīng)用進(jìn)行權(quán)限設(shè)置,如圖4所示。其中注意CorpID和Secret 兩個(gè)密鑰,CorpID是企業(yè)號(hào)的標(biāo)識(shí),Secret是管理組憑證密鑰。Zabbix調(diào)用微信的腳本中會(huì)利用CorpID和Secret生成token,通過(guò)token發(fā)送消息。配置完成后,可以根據(jù)微信官網(wǎng)提供的API進(jìn)行測(cè)試。微信官網(wǎng)還提供了接口調(diào)試的工具,地址為http://qydev.weixin.qq.com/debug,可幫助驗(yàn)證結(jié)果。
圖4 權(quán)限設(shè)置Fig.4 Permission setting
Zabbix搭建完成和企業(yè)號(hào)申請(qǐng)完成后,還需要在Zabbix上配置,使其調(diào)用企業(yè)號(hào)進(jìn)行消息推送。
3.1 Zabbix調(diào)用企業(yè)號(hào)
Zabbix調(diào)用企業(yè)號(hào)的腳本的路徑為/usr/local/zabbix/share/zabbix/alertscripts,其腳本內(nèi)容如下:
#!/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是企業(yè)號(hào)的標(biāo)識(shí),Secret是管理組憑證密鑰,在申請(qǐng)完企業(yè)號(hào)后即可獲得CorpID和Secret。toparty指部門(mén)id。msgtype指消息類型。agentid指企業(yè)號(hào)中的應(yīng)用id,可在應(yīng)用的設(shè)置頁(yè)面查看。sys.argv[1], sys.argv[2],sys.argv[3]是Zabbix傳遞給腳本的參數(shù)。
3.2 Zabbix添加Media
在Zabbix平臺(tái)上添加微信的告警媒介Media和動(dòng)作Action,如圖5所示[11]。
圖5 Media和Action設(shè)置Fig.5 Setting for Media and Action
設(shè)置完成后,可通過(guò)主動(dòng)發(fā)出告警事件測(cè)試消息推送。
3.3 網(wǎng)絡(luò)監(jiān)控實(shí)例
本文通過(guò)虛擬化搭建監(jiān)控環(huán)境,配置為CentOS 7+mysql+apache+PHP,Zabbix版本為3.0.5。由于監(jiān)控主機(jī)相對(duì)較少,且分布較集中,因此搭建了1臺(tái)Zabbix服務(wù)器。目前通過(guò)SNMP方式監(jiān)控交換機(jī)90多臺(tái),監(jiān)控條目700余條。網(wǎng)絡(luò)拓?fù)淙鐖D6所示。
圖6 網(wǎng)絡(luò)拓?fù)鋱DFig.6 Network topology
通過(guò)Zabbix平臺(tái)監(jiān)控某互聯(lián)網(wǎng)出口的一天的流量狀態(tài)如圖7所示。因主機(jī)故障通過(guò)微信企業(yè)號(hào)推送的告警信息如圖8所示。
圖7 某互聯(lián)網(wǎng)出口的一天流量圖Fig.7 Daily traffic map of an Internet export
圖8 微信企業(yè)號(hào)推送的告警信息 Fig.8 Alarm message pushed by WeChat enterprise accounts
本文通過(guò)廣泛使用的微信企業(yè)號(hào)及時(shí)推送告警信息,使用開(kāi)源監(jiān)控項(xiàng)目Zabbix檢測(cè)網(wǎng)絡(luò)狀態(tài),可以實(shí)現(xiàn)對(duì)網(wǎng)絡(luò)運(yùn)行狀況的有效監(jiān)測(cè)。通過(guò)配置不同的觸發(fā)策略,能夠監(jiān)測(cè)幾乎所有網(wǎng)絡(luò)設(shè)備,并可根據(jù)設(shè)備重要程度推送不同級(jí)別的告警信息。通過(guò)微信企業(yè)號(hào)推送告警信息具有高效性通知,但成本幾乎為零。該研究為網(wǎng)絡(luò)運(yùn)維的自動(dòng)化提供了有效的支撐手段。
[1]蔣東興.我國(guó)高校信息化發(fā)展?fàn)顩r與對(duì)策建議[J].中國(guó)信息界, 2011(09):20-22.
[2]劉慧敏.以ITIL為基礎(chǔ)的IT服務(wù)管理應(yīng)用研究[J].計(jì)算機(jī)技術(shù)與發(fā)展, 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]周解敏.微信公共平臺(tái)的營(yíng)運(yùn)開(kāi)發(fā)—關(guān)于企業(yè)號(hào)的實(shí)踐與應(yīng)用現(xiàn)代經(jīng)濟(jì)信息[J].現(xiàn)代經(jīng)濟(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企業(yè)級(jí)分布式監(jiān)控系統(tǒng)[M]. 北京:電子工業(yè)出版社, 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]郭曉慧, 李潤(rùn)知, 張茜,等.基于Zabbix的分布式服務(wù)器監(jiān)控應(yīng)用研究[J]. 通信學(xué)報(bào),2013(S2):94-98.
[10]騰訊公司. 微信JS-SDK說(shuō)明文檔[EB/OL].[2016-10-1].http://qydev.weixin.qq.com/wiki/index.php?title=%E9%A6%96%E9%A1%B5.
[11]姚仁捷. Zabbix監(jiān)控系統(tǒng)深度實(shí)踐[M].2版. 北京:電子工業(yè)出版社, 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
山東警察學(xué)院科研計(jì)劃(YKJYB201604);山東省高等學(xué)??萍加?jì)劃(J17KA211);山東省公安廳科技專項(xiàng)(GATHT2015-236);濟(jì)南市社會(huì)民生重大專項(xiàng)(201509005)
劉遠(yuǎn)超(1987—),男,助理實(shí)驗(yàn)師,研究方向?yàn)榫W(wǎng)絡(luò)管理,網(wǎng)絡(luò)安全。E-mail:lyc136564@163.com
TP393
A
1002-4026(2017)04-0124-07