圍繞Zabbix打造面向應(yīng)用的自動(dòng)監(jiān)控系統(tǒng)
原創(chuàng)目前開源網(wǎng)絡(luò)監(jiān)控系統(tǒng)Zabbix在不少企業(yè)得到了應(yīng)用,但是Zabbix自身所能監(jiān)控的粒度和深度都難以滿足企業(yè)運(yùn)維管理的深層次需求,特別是對(duì)于應(yīng)用系統(tǒng)的可用性監(jiān)控方面存在較大的缺陷。本文結(jié)合某公司的IT基礎(chǔ)架構(gòu),通過對(duì)Zabbix監(jiān)控系統(tǒng)實(shí)施二次開發(fā)和改造,實(shí)現(xiàn)了對(duì)部分應(yīng)用系統(tǒng)可用性狀態(tài)的實(shí)時(shí)監(jiān)控;本文對(duì)具體的改造方法和思路進(jìn)行了詳細(xì)闡述,并給出了改造后的自動(dòng)監(jiān)控系統(tǒng)的運(yùn)行效果,希望對(duì)各位同行在企業(yè)IT基礎(chǔ)設(shè)施監(jiān)控方面有所啟發(fā)。
一.背景
Zabbix是一個(gè)較為成熟的基于WEB界面的提供分布式系統(tǒng)監(jiān)控以及網(wǎng)絡(luò)監(jiān)視功能的企業(yè)級(jí)開源解決方案。相信了解Linux和開源監(jiān)控系統(tǒng)的運(yùn)維管理人員對(duì)Zabbix并不陌生,由于Zabbix部署的靈活性以及開源的特征,目前不少企業(yè)已經(jīng)部署Zabbix來對(duì)自身的IT基礎(chǔ)設(shè)施的運(yùn)行狀態(tài)進(jìn)行實(shí)時(shí)監(jiān)控;筆者所在的公司也不例外,兩年前就已經(jīng)嘗試部署Zabbix,目前已經(jīng)將公司大部分服務(wù)器和網(wǎng)絡(luò)設(shè)備納入了Zabbix監(jiān)控范圍,使Zabbix成為運(yùn)維管理人員最為倚仗的故障監(jiān)控利器。
但是目前Zabbix僅僅只能對(duì)一些比較常規(guī)的CPU利用率、端口狀態(tài)、流量、進(jìn)程使用等項(xiàng)目進(jìn)行監(jiān)控,難以針對(duì)應(yīng)用和服務(wù)的可用性進(jìn)行實(shí)時(shí)監(jiān)控,即使是最新的2.2版本,面向應(yīng)用的監(jiān)控方面仍然沒有大的改進(jìn)。而當(dāng)前隨著各類應(yīng)用復(fù)雜性的提高,導(dǎo)致各類應(yīng)用出現(xiàn)故障的原因越來越難以排查,如果和過去一樣,僅僅只是針對(duì)服務(wù)器的CPU、內(nèi)存、進(jìn)程等常規(guī)項(xiàng)目實(shí)施監(jiān)控,在某些情況下就難以發(fā)現(xiàn)應(yīng)用的異常,不能起到實(shí)時(shí)監(jiān)控的效果;因?yàn)橐粋€(gè)應(yīng)用出現(xiàn)異常,很多時(shí)候并不是CPU、內(nèi)存等一些常規(guī)問題所引起的,而是系統(tǒng)自身的BUG或負(fù)載有限等一些隱秘的原因所引起的,所以有時(shí)候Zabbix顯示常規(guī)的監(jiān)控項(xiàng)目狀態(tài)都正常,但是應(yīng)用實(shí)際已經(jīng)不可用,這樣就失去了自動(dòng)監(jiān)控的意義。
為了彌補(bǔ)Zabbix針對(duì)應(yīng)用監(jiān)控方面的不足,本文圍繞Zabbix監(jiān)控系統(tǒng)做了深入的研究,結(jié)合運(yùn)維自動(dòng)化的思想,開發(fā)出一套能夠支持部分常見應(yīng)用的自動(dòng)監(jiān)控系統(tǒng);該系統(tǒng)是在已有Zabbix系統(tǒng)的基礎(chǔ)上進(jìn)行二次開發(fā)所形成的,并不影響之前針對(duì)服務(wù)器和網(wǎng)絡(luò)設(shè)備的監(jiān)控效果。該系統(tǒng)已經(jīng)在本公司范圍內(nèi)得到應(yīng)用,目前能夠針對(duì)DHCP、Radius認(rèn)證、Wins以及SSLVPN系統(tǒng)實(shí)施可用性的自動(dòng)監(jiān)控。
二.系統(tǒng)設(shè)計(jì)思路
既然傳統(tǒng)的Zabbix監(jiān)控項(xiàng)目難以反映出各類應(yīng)用系統(tǒng)是否正常,只有親自使用系統(tǒng)才能真正判斷出應(yīng)用系統(tǒng)是否可用,但是要做到實(shí)時(shí)監(jiān)控,就必須用到運(yùn)維自動(dòng)化的相關(guān)技術(shù)了,否則單憑人工操作是無法保證監(jiān)控的時(shí)效性的。本文正是利用運(yùn)維自動(dòng)化的核心技術(shù)-腳本編程技術(shù)來實(shí)現(xiàn),我們采用腳本程序來模擬客戶端或用戶訪問應(yīng)用系統(tǒng)的流程,將該流程自動(dòng)化、程序化,利用Zabbix監(jiān)控系統(tǒng)的接口將系統(tǒng)狀態(tài)傳遞給Zabbix,通過Zabbix系統(tǒng)的Trigger判斷,將應(yīng)用系統(tǒng)的可用狀態(tài)的變更以頁面、郵件或者短信的方式展示給運(yùn)維管理人員,以達(dá)到實(shí)時(shí)監(jiān)控的目的。
本監(jiān)控系統(tǒng)可分為兩大模塊:模擬用戶行為模塊和應(yīng)用狀態(tài)感知模塊。這兩大模塊彼此關(guān)聯(lián)協(xié)作,由模擬用戶行為模塊不斷循環(huán)獲取應(yīng)用的狀態(tài),然后將狀態(tài)傳遞給應(yīng)用狀態(tài)感知模塊,應(yīng)用狀態(tài)感知模塊經(jīng)過判斷,將狀態(tài)信息以多種方式展示給運(yùn)維管理人員。下面將對(duì)這兩大模塊分別進(jìn)行介紹。
1. 模擬用戶行為模塊
該模塊會(huì)根據(jù)提取出的用戶操作流程,將用戶使用應(yīng)用系統(tǒng)的一系列操作利用程序來自動(dòng)實(shí)現(xiàn),然后將程序的操作結(jié)果記錄下來,提供給后續(xù)的應(yīng)用狀態(tài)感知模塊進(jìn)行判斷,下圖1為該模塊的詳細(xì)流程圖:
圖1 模擬用戶行為模塊流程圖
2. 應(yīng)用狀態(tài)感知模塊
該模塊接受模擬用戶行為模塊所傳遞的應(yīng)用系統(tǒng)狀態(tài)的信息,分析該狀態(tài)信息,然后將信息展示給運(yùn)維管理人員;若出現(xiàn)服務(wù)狀態(tài)的變更,還會(huì)以短信、郵件等多種方式實(shí)時(shí)通知管理員。該模塊的功能均由Zabbix監(jiān)控系統(tǒng)自身承擔(dān);下圖2即為應(yīng)用狀態(tài)感知模塊的詳細(xì)流程圖:
圖2 應(yīng)用狀態(tài)感知模塊流程圖
三.系統(tǒng)的具體實(shí)現(xiàn)
本系統(tǒng)目前已經(jīng)實(shí)現(xiàn)了對(duì)公司的DHCP、Radius認(rèn)證、Wins服務(wù)及SSLVPN應(yīng)用系統(tǒng)的可用性的實(shí)時(shí)監(jiān)控,下面將分別進(jìn)行闡述。
1. DHCP應(yīng)用狀態(tài)的監(jiān)控
本公司所使用的DHCP服務(wù)是由Windows server 2003下提供的,自動(dòng)實(shí)時(shí)監(jiān)控DHCP服務(wù)的關(guān)鍵在于程序需要不停去模擬用戶利用DHCP服務(wù)器獲取IP地址的過程,這個(gè)過程可以利用兩條BAT命令"ipconfig /release"和"ipconfig /renew"來表示,即釋放IP和重新獲取IP,如果DHCP應(yīng)用出現(xiàn)故障,那么主機(jī)將無法通過上述兩條命令獲取IP地址,那么其他同網(wǎng)段的主機(jī)將無法ping通該主機(jī)。我們采用一臺(tái)Windows server 2003的主機(jī)來作為運(yùn)行腳本程序的測(cè)試主機(jī),該程序采用BAT腳本實(shí)現(xiàn),起到模擬用戶行為的作用,具體BAT腳本程序如下所示:
- @echo off
- :des
- ipconfig /release
- ipconfig /renew
- echo "程序正在運(yùn)行,勿關(guān)閉此窗口!"
- choice /c yn /n /t 10 /d y
- goto des
上述程序代碼將每隔10秒循環(huán)執(zhí)行"ipconfig /release"和"ipconfig /renew"去重新從DHCP服務(wù)器獲取IP地址,那么測(cè)試主機(jī)能否獲得正確的IP地址就代表了DHCP應(yīng)用是否可用,下一步就需要將該狀態(tài)信息傳遞給應(yīng)用狀態(tài)感知模塊,即Zabbix監(jiān)控系統(tǒng)。
在Zabbix監(jiān)控系統(tǒng)中我們將會(huì)做如下幾步工作:
(1)將DHCP服務(wù)器納入監(jiān)控,安裝Zabbix agent,然后在DHCP server的items中添加一項(xiàng)監(jiān)控項(xiàng),各屬性設(shè)置如下:Name為"DHCP service test",Key為"icmpping[測(cè)試主機(jī)的IP,3]",Interval設(shè)置為10秒,其他的時(shí)間屬性可按照自己的需求進(jìn)行設(shè)置,該監(jiān)控項(xiàng)的意思是每隔10秒Zabbix服務(wù)器將會(huì)向測(cè)試主機(jī)發(fā)送3個(gè)icmpping包,以此來確認(rèn)能否與該主機(jī)通訊,如果能夠ping通,則返回值為1,否則返回值為0 ;這樣就能判斷該主機(jī)是否獲得了正確的IP地址,也就實(shí)現(xiàn)了對(duì)于DHCP應(yīng)用狀態(tài)的實(shí)時(shí)監(jiān)控。
(2)設(shè)置一個(gè)Trigger,用于判斷DHCP應(yīng)用狀態(tài)是否發(fā)生變化,如果發(fā)生變化,將在頁面展示報(bào)警信息;Trigger屬性設(shè)置如下:Name為"DHCP service on DHCPSVR is down"Expression為"{DHCPSVR:icmpping[測(cè)試主機(jī)的IP,3].last(0)}=0&{DHCPSVR:icmpping[測(cè)試主機(jī)的IP,3].prev(0)}=0",表示如果程序連續(xù)兩次探測(cè)DHCP應(yīng)用均不可用的話,則可以判定DHCP應(yīng)用出現(xiàn)故障,通過將兩次檢測(cè)結(jié)果進(jìn)行與操作,可以有效減少誤報(bào)的概率。
(3)設(shè)置一個(gè)Action,用于設(shè)置當(dāng)event觸發(fā)Trigger時(shí),Zabbix應(yīng)該做出的動(dòng)作,包括給運(yùn)維管理人員發(fā)送郵件、短信等。Action的主要屬性設(shè)置如下:Name為"DHCP Service monitoring",觸發(fā)條件Conditions為前面所設(shè)置的Trigger"DHCPSVR:DHCP service on DHCPSVR is down",Operations為"Send message to users:管理員",Delay為"Immediately"。該Action的意思是當(dāng)觸發(fā)對(duì)應(yīng)Trigger時(shí),立即向管理員發(fā)送報(bào)警短信,短信的內(nèi)容也可以自己定制,在此不再贅述。
2.Radius認(rèn)證應(yīng)用狀態(tài)的監(jiān)控
Radius認(rèn)證服務(wù)在很多公司有廣泛應(yīng)用,用于應(yīng)用系統(tǒng)和設(shè)備登錄的AAA認(rèn)證;本公司的Radius服務(wù)的一項(xiàng)重要應(yīng)用就是網(wǎng)絡(luò)設(shè)備的登錄認(rèn)證。實(shí)現(xiàn)Radius認(rèn)證應(yīng)用狀態(tài)的自動(dòng)實(shí)時(shí)監(jiān)控的關(guān)鍵點(diǎn)仍然是提取出用戶使用Radius應(yīng)用的流程,然后以腳本程序去實(shí)現(xiàn)該流程,然后將檢測(cè)結(jié)果傳遞給Zabbix。本文采用基于SecureCRT平臺(tái)的VBScript語言編寫模擬用戶登錄Cisco交換機(jī)行為的腳本程序,登錄后會(huì)先后出現(xiàn)輸入username和password的提示,利用程序控制輸入合法的用戶名和密碼,,然后回車,如果Radius應(yīng)用正常,則會(huì)進(jìn)入交換機(jī)的配置頁面,如果Radius應(yīng)用出現(xiàn)故障,則會(huì)在一段時(shí)間后出現(xiàn)"time out"的提示。我們?nèi)匀焕蒙鲜瞿桥_(tái)Windows server 2003的主機(jī)作為測(cè)試機(jī),具體的VBScript腳本程序如下所示:
- # $language = "VBScript"
- # $interface = "1.0"
- '該腳本用于探測(cè)公司Radius服務(wù)的狀態(tài)
- Sub Main
- Dim fso,f1
- Set fso=CreateObject("Scripting.FileSystemObject")
- Do While (1)
- crt.Screen.Synchronous=True
- crt.Session.Connect("/telnet 172.19.39.248")
- crt.Screen.WaitForString "Username:"
- crt.Screen.Send "ishare" & vbcr
- crt.Screen.WaitForString "Password:"
- crt.Screen.Send "123456" & vbcr
- crt.Screen.WaitForString ">",2
- judgeString=crt.Screen.Get(12,1,12,20)
- Set f1=fso.OpenTextFile("C:\Radius監(jiān)控腳本\cosbulk\judge.txt",2,True)
- f1.writeline(judgeString)
- f1.Close()
- 'crt.sleep 500
- crt.Screen.Synchronous=False
- crt.Session.Disconnect
- crt.Sleep 5000
- Loop
- End Sub
上述程序中,172.19.39.248是測(cè)試交換機(jī)的管理IP,ishare和123456分別為測(cè)試用的用戶名和密碼;該腳本程序控制每隔5秒鐘去telnet一下測(cè)試交換機(jī),如果輸入用戶名和密碼后能夠正常進(jìn)入交換機(jī)配置界面,那么說明Radius應(yīng)用是可用的,將顯示的交換機(jī)名稱寫入judge.txt文件中;反之,說明Radius應(yīng)用出現(xiàn)故障,將"time out"信息寫入judge.txt文件中。文件中不同的內(nèi)容代表了Radius應(yīng)用的狀態(tài)。下一步就需要該狀態(tài)信息傳遞給Zabbix監(jiān)控系統(tǒng)。
在Zabbix監(jiān)控系統(tǒng)中我們需要做如下幾個(gè)方面的操作:
(1)在測(cè)試主機(jī)的items中加入一項(xiàng)監(jiān)控項(xiàng),各屬性如下:Name為"Radius Service status",Key為"vfs.file.regmatch[judge.txt,測(cè)試交換機(jī)名稱]",Interval為10秒,其他時(shí)間屬性可以按照自己需求設(shè)置。該監(jiān)控項(xiàng)的意思是每隔10秒去檢測(cè)judge.txt中的內(nèi)容,如果是測(cè)試交換機(jī)的名稱,則返回值為1;否則返回0,這樣就能判斷Radius應(yīng)用是否可用,實(shí)現(xiàn)了對(duì)其可用性的實(shí)時(shí)監(jiān)控。
(2)創(chuàng)建一個(gè)Trigger,用于判斷Radius應(yīng)用狀態(tài)是否發(fā)生變化,如果發(fā)生變化,將在頁面展示報(bào)警信息;Trigger屬性設(shè)置如下:Name為"Radius Service is down",Expression為"{vfs.file.regmatch[judge.txt,測(cè)試交換機(jī)名稱].last(0)}=0&{vfs.file.regmatch[judge.txt,測(cè)試交換機(jī)名稱].prev(0)=0",表示如果程序連續(xù)兩次探測(cè)Radius應(yīng)用均不可用的話,則可以判定Radius應(yīng)用出現(xiàn)故障,通過兩次檢測(cè)結(jié)果的與操作,可以有效減少誤報(bào)的概率。
(3)創(chuàng)建一個(gè)Action。Action的主要屬性設(shè)置如下:Name為"Radius Service monitoring",觸發(fā)條件Conditions為前面所設(shè)置的Trigger"Radius service is down",Operations為"Send message to users:管理員",Delay為"Immediately"。該Action的意思是當(dāng)觸發(fā)對(duì)應(yīng)Trigger時(shí),Zabbix將立即向管理員發(fā)送報(bào)警短信。
3.Wins應(yīng)用狀態(tài)的監(jiān)控
本公司使用的Wins服務(wù)是由Windows server 2003提供的,可以通過"nblookup"這個(gè)BAT命令來測(cè)試Wins應(yīng)用是否可用,如果Wins應(yīng)用正常,則可以將主機(jī)名解析為正常的IP地址;反之,則會(huì)解析失敗。本文首先將利用nblookup命令解析主機(jī)名的腳本程序嵌入Zabbix已有的腳本庫(kù)中,以方便后面的調(diào)用;具體方式如下:在測(cè)試主機(jī)上打開Zabbix agent的配置文件"zabbix_agentd.conf",在文件最后加入"UnsafeUserParameters=1"和"UserParameter= service.wins,C:\WINDOWS\system32\nblookup /s Wins服務(wù)器IP netsqlsvr | find "主機(jī)netsqlsvr的IP"",這樣就將對(duì)應(yīng)的腳本程序以"service.wins"的形式嵌入Zabbix系統(tǒng)中了。在Zabbix系統(tǒng)中所需的設(shè)置如下:
(1)在測(cè)試主機(jī)的items中加入對(duì)應(yīng)監(jiān)控項(xiàng),監(jiān)控項(xiàng)的屬性如下:Name為"Service Wins status",Key為"service.wins",Interval為15秒,其他時(shí)間屬性可以按照自己需求設(shè)置。該監(jiān)控項(xiàng)的意思是每隔15秒使用nblookup命令去測(cè)試Wins的應(yīng)用狀態(tài),如果Wins應(yīng)用狀態(tài)正常,則返回netsqlsvr主機(jī)的正確IP,否則一段時(shí)間后會(huì)返回"time out"信息,這樣就實(shí)現(xiàn)了對(duì)Wins應(yīng)用狀態(tài)可用性的實(shí)時(shí)監(jiān)控。
(2)創(chuàng)建一個(gè)Trigger,用于判斷Wins應(yīng)用狀態(tài)是否發(fā)生變化,如果發(fā)生變化,將在頁面展示相應(yīng)的報(bào)警信息;Trigger屬性設(shè)置如下:Name為"Wins Service is down",Expression為"{service.wins.strlen(0)}=0",表示如果程序如果沒有獲得正確的解析IP,則判定Radius應(yīng)用出現(xiàn)故障。
(3)創(chuàng)建一個(gè)Action。Action的主要屬性設(shè)置如下:Name為"Wins Service monitoring",觸發(fā)條件Conditions為前面所設(shè)置的Trigger"Wins service is down",Operations為"Send message to users:管理員",Delay設(shè)為"Immediately"。該Action的意思是當(dāng)觸發(fā)對(duì)應(yīng)Trigger時(shí),Zabbix將立即向管理員發(fā)送報(bào)警短信。
4.SSLVPN系統(tǒng)狀態(tài)的監(jiān)控
本公司所使用SSLVPN設(shè)備是Juniper SA 6500,該設(shè)備為外網(wǎng)用戶提供遠(yuǎn)程接入內(nèi)網(wǎng)辦公的功能,是我司極為重要的網(wǎng)關(guān)設(shè)備。之前只能利用Zabbix系統(tǒng)對(duì)該設(shè)備的一些常規(guī)參數(shù)進(jìn)行監(jiān)控,無法獲知該系統(tǒng)的真實(shí)可用狀態(tài);下面將介紹對(duì)SSLVPN應(yīng)用系統(tǒng)實(shí)現(xiàn)可用性實(shí)時(shí)監(jiān)控的方法,目前該方法已經(jīng)在我司得到應(yīng)用,收到了良好的效果。我們?nèi)匀徊捎媚_本程序來模擬用戶訪問SSLVPN系統(tǒng),訪問流程如下圖3所示:
圖3 用戶訪問SSLVPN系統(tǒng)流程圖
對(duì)于上述流程,本文采用VBScript腳本語言來實(shí)現(xiàn),具體程序代碼如下所示:
- Set WshShell=WScript.CreateObject("WScript.Shell") '創(chuàng)建對(duì)象,可以實(shí)現(xiàn)虛擬鍵盤
- Set fso=CreateObject("Scripting.FileSystemObject") '創(chuàng)建文件對(duì)象
- Set objWMIService = GetObject ("winmgmts:\\.\root\cimv2")
- Sub Close_Process(ProcessName) '強(qiáng)制結(jié)束進(jìn)程函數(shù)
- Dim objShell
- Set objShell = wscript.CreateObject("wscript.shell")
- objShell.Run "ntsd -c q -pn " & ProcessName, 0, True
- End Sub
- On Error Resume Next
- Do while(1)
- Set ie=WScript.CreateObject("InternetExplorer.Application") '創(chuàng)建對(duì)象,打開IE
- ie.visible=true 'IE轉(zhuǎn)至前臺(tái)
- ie.navigate "http://192.168.103.1" '打開網(wǎng)頁
- Wscript.Sleep 4000
- if ie.busy=false And ie.readystate = 4 then'如果頁面加載成功,則可以進(jìn)行下一步,
- '如果不能顯示,說明出現(xiàn)問題
- Wscript.Sleep 1000
- WshShell.appactivate"Junos Pulse Secure Access Service"
- Wscript.Sleep 2000
- if instr(1,ie.document.body.innerText,"username",1)>0 Then '如果存在該標(biāo)簽,表明已經(jīng)成功顯示登錄頁面
- ie.document.getElementById("Username").value="ishare" '輸入賬號(hào)、密碼
- ie.document.getElementById("Password").value="%rdx5tgB"
- Wscript.Sleep 3000 '等3s然后回車,虛擬觸發(fā)。
- WshShell.SendKeys "{ENTER}"
- Wscript.Sleep 20000
- '搜索網(wǎng)頁中是否存在內(nèi)網(wǎng)主頁關(guān)鍵字,判斷是否登錄成功
- if ie.busy=false And ie.readystate = 4 then '網(wǎng)頁內(nèi)容加載完畢
- WshShell.appactivate"Junos Pulse Secure Access Service - 主頁"
- Wscript.Sleep 2000
- strContent=ie.document.body.innerText '讀取網(wǎng)頁內(nèi)容
- if instr(1,strContent,"內(nèi)網(wǎng)主頁",1)>0 Then '如果存在該標(biāo)簽,表明已經(jīng)成功登錄
- '將1寫入文件
- Set f1=fso.OpenTextFile("C:\SSLVPN監(jiān)控腳本\cosbulk\judge.txt",2,True)
- f1.writeline(1)
- f1.Close()
- Wscript.Sleep 2000
- WshShell.appactivate"Junos Pulse Secure Access Service - 主頁"
- Wscript.Sleep 2000
- WshShell.SendKeys "{TAB 9}"
- Wscript.Sleep 2000
- WshShell.SendKeys "{ENTER}"
- elseif instr(1,strContent,"已經(jīng)有其它用戶會(huì)話正在進(jìn)行中:",1)>0 Then
- WshShell.SendKeys "{TAB 2}"
- Wscript.Sleep 2000
- WshShell.SendKeys "{ENTER}" '點(diǎn)擊繼續(xù)運(yùn)行
- Wscript.Sleep 20000
- if ie.busy=false And ie.readystate = 4 then '網(wǎng)頁內(nèi)容加載完畢
- WshShell.appactivate"Junos Pulse Secure Access Service - 主頁"
- Wscript.Sleep 2000
- strContent=ie.document.body.innerText '讀取網(wǎng)頁內(nèi)容
- if instr(1,strContent,"內(nèi)網(wǎng)主頁",1)>0 Then '如果存在該標(biāo)簽,表明已經(jīng)成功登錄
- Set f1=fso.OpenTextFile("C:\SSLVPN監(jiān)控腳本\cosbulk\judge.txt",2,True)
- f1.writeline(1)
- f1.Close()
- Wscript.Sleep 2000
- WshShell.appactivate"Junos Pulse Secure Access Service - 主頁"
- Wscript.Sleep 2000
- WshShell.SendKeys "{TAB 9}"
- Wscript.Sleep 2000
- WshShell.SendKeys "{ENTER}"
- else
- '將0寫入文件
- Set f1=fso.OpenTextFile("C:\SSLVPN監(jiān)控腳本\cosbulk\judge.txt",2,True)
- f1.writeline(0)
- f1.Close()
- end if
- else
- Set f1=fso.OpenTextFile("C:\SSLVPN監(jiān)控腳本\cosbulk\judge.txt",2,True)
- f1.writeline(0)
- f1.Close()
- end if
- else
- '將0寫入文件
- Set f1=fso.OpenTextFile("C:\SSLVPN監(jiān)控腳本\cosbulk\judge.txt",2,True)
- f1.writeline(0)
- f1.Close()
- end if
- else
- Set f1=fso.OpenTextFile("C:\SSLVPN監(jiān)控腳本\cosbulk\judge.txt",2,True)
- f1.writeline(0)
- f1.Close()
- end if
- else
- Set f1=fso.OpenTextFile("C:\SSLVPN監(jiān)控腳本\cosbulk\judge.txt",2,True)
- f1.writeline(0)
- f1.Close()
- end if
- else
- Set f1=fso.OpenTextFile("C:\SSLVPN監(jiān)控腳本\cosbulk\judge.txt",2,True)
- f1.writeline(0)
- f1.Close()
- end if
- ie.quit
- Set ie=nothing
- Set colProcessList = objWMIService.ExecQuery("Select * from Win32_Process where Name='dsNcService.exe'")
- For Each objProcess In colProcessList
- Set list = GetObject("winmgmts:").execquery("Select * from Win32_Process where Name='dsNcService.exe'")
- if list.count > 0 then '檢測(cè)進(jìn)程是否存在
- Close_Process "dsNcService.exe"
- end if
- Next
- Wscript.Sleep 5000
- Loop
上述腳本程序?qū)⒚看螜z測(cè)SSLVPN系統(tǒng)可用性的結(jié)果寫入judge.txt中,1表示系統(tǒng)正常,0表示系統(tǒng)出現(xiàn)故障,下面需要將該狀態(tài)信息傳送給Zabbix,由Zabbix做出判斷和展示;在Zabbix需要進(jìn)行如下設(shè)置:
(1)在測(cè)試主機(jī)的items中加入對(duì)應(yīng)監(jiān)控項(xiàng),監(jiān)控項(xiàng)的屬性如下:Name為"The availability of SSLVPN",Key為"vfs.file.regmatch[judge.txt,1]",Interval為30秒,其他時(shí)間屬性可以按照自己需求設(shè)置。該監(jiān)控項(xiàng)的意思是每隔30秒去檢測(cè)judge.txt中的內(nèi)容,如果文件內(nèi)容是1,則返回值為1;否則返回0,這樣就能判斷SSLVPN系統(tǒng)是否可用,實(shí)現(xiàn)了對(duì)其可用性的實(shí)時(shí)自動(dòng)監(jiān)控。
(2)創(chuàng)建一個(gè)Trigger,用于判斷SSLVPN應(yīng)用狀態(tài)是否發(fā)生變化,如果發(fā)生變化,將在頁面展示報(bào)警信息;Trigger屬性設(shè)置如下:Name為"SSLVPN Service is unavailable",Expression為"{vfs.file.regmatch[judge.txt,1].last(0)}=0&{vfs.file.regmatch[judge.txt,1].prev(0)=0";該Trigger表示如果程序連續(xù)兩次檢測(cè)SSLVPN系統(tǒng)為不可用狀態(tài),則判定SSLVPN應(yīng)用出現(xiàn)故障。
(3)創(chuàng)建一個(gè)Action。Action的主要屬性設(shè)置如下:Name為"The SSLVPN monitorning",觸發(fā)條件Conditions為前面所設(shè)置的Trigger"SSLVPN Service is unavailable",Operations為"Send message to users:管理員",Delay為"Immediately"。該Action的意思是當(dāng)觸發(fā)對(duì)應(yīng)Trigger時(shí),Zabbix會(huì)立即向管理員發(fā)送報(bào)警短信。
四.成果展示
下面將對(duì)本系統(tǒng)對(duì)于DHCP、Radius認(rèn)證、Wins和SSLVPN應(yīng)用系統(tǒng)的自動(dòng)監(jiān)控效果進(jìn)行展示:
(1)DHCP應(yīng)用的自動(dòng)監(jiān)控測(cè)試
為測(cè)試需要,本文選擇在非工作時(shí)間暫停一下DHCP應(yīng)用,大約20秒以后,Zabbix監(jiān)控頁面就會(huì)出現(xiàn)如下圖4所示的報(bào)警信息:
圖4 DHCP應(yīng)用故障的報(bào)警信息
同時(shí),手機(jī)也會(huì)收到報(bào)警短信,但手機(jī)不方便截圖,此處省略。然后再恢復(fù)DHCP應(yīng)用,大約20秒后,Zabbix監(jiān)控頁面的報(bào)警信息就會(huì)消失,同時(shí)手機(jī)也會(huì)收到DHCP應(yīng)用恢復(fù)的短信。
(2)Radius認(rèn)證應(yīng)用的自動(dòng)監(jiān)控測(cè)試
對(duì)于Radius認(rèn)證應(yīng)用的監(jiān)控測(cè)試,本文采用同樣的方式暫停一下Radius應(yīng)用,大約15秒后,Zabbix監(jiān)控頁面會(huì)出現(xiàn)如下圖5所示的報(bào)警信息:
圖5 Radius應(yīng)用故障的報(bào)警信息
同時(shí)手機(jī)也會(huì)收到Radius應(yīng)用故障的報(bào)警短信。恢復(fù)Radius應(yīng)用大約15秒后,Zabbix監(jiān)控頁面的報(bào)警信息會(huì)消失,手機(jī)同樣也能收到Radius應(yīng)用恢復(fù)正常的短信。
(3)Wins應(yīng)用的自動(dòng)監(jiān)控測(cè)試
對(duì)于Wins應(yīng)用的監(jiān)控測(cè)試,暫停一下Wins應(yīng)用后,大約15秒左右,Zabbix監(jiān)控頁面會(huì)出現(xiàn)如下圖6所示的報(bào)警信息:
圖6 Wins應(yīng)用故障的報(bào)警信息
同時(shí)手機(jī)也會(huì)收到Wins應(yīng)用故障的報(bào)警短信?;謴?fù)Wins應(yīng)用大約15秒后,Zabbix監(jiān)控頁面的報(bào)警信息會(huì)消失,手機(jī)同樣也能收到Wins應(yīng)用恢復(fù)正常的短信。
(4)SSLVPN應(yīng)用的自動(dòng)監(jiān)控測(cè)試
造成SSLVPN系統(tǒng)不可用的原因有很多,如網(wǎng)絡(luò)不通、設(shè)備硬軟件故障、Radius認(rèn)證服務(wù)異常(本SSLVPN系統(tǒng)的用戶認(rèn)證方式采用的是Radius認(rèn)證)等,本次測(cè)試采用模擬Radius認(rèn)證服務(wù)異常來驗(yàn)證系統(tǒng)的監(jiān)控效果。暫停一下Radius認(rèn)證服務(wù)之后,大約30秒后,Zabbix監(jiān)控頁面會(huì)出現(xiàn)如下圖7所示的報(bào)警信息:
圖7 Radius應(yīng)用故障和SSLVPN應(yīng)用系統(tǒng)故障的報(bào)警信息
同時(shí)手機(jī)會(huì)收到Radius和SSLVPN應(yīng)用故障的報(bào)警短信。待Radius應(yīng)用恢復(fù)大約30秒后,Zabbix監(jiān)控頁面的報(bào)警信息會(huì)消失,手機(jī)同樣也能收到Radius和SSLVPN應(yīng)用恢復(fù)正常的短信。
五.總結(jié)與展望
本文介紹了開源網(wǎng)絡(luò)監(jiān)控系統(tǒng)Zabbix在應(yīng)用監(jiān)控方面的缺陷,結(jié)合某公司自身的Zabbix應(yīng)用實(shí)踐經(jīng)驗(yàn),給出了解決Zabbix應(yīng)用監(jiān)控方面缺陷的一套方案,即通過二次開發(fā)的方式對(duì)Zabbix原型系統(tǒng)進(jìn)行改造,打造一套支持針對(duì)應(yīng)用狀態(tài)進(jìn)行實(shí)時(shí)監(jiān)控的自動(dòng)監(jiān)控系統(tǒng)。目前該自動(dòng)監(jiān)控系統(tǒng)已經(jīng)在公司內(nèi)部得到廣泛應(yīng)用,支持對(duì)DHCP、Radius認(rèn)證、Wins及SSLVPN應(yīng)用系統(tǒng)狀態(tài)的實(shí)時(shí)監(jiān)控,我們計(jì)劃后期將持續(xù)改造該監(jiān)控系統(tǒng),盡可能將所有應(yīng)用系統(tǒng)納入實(shí)時(shí)監(jiān)控的范圍。本文重在思路,未來其他有需求的企業(yè)可以按照這個(gè)思路,結(jié)合自身的實(shí)際網(wǎng)絡(luò)環(huán)境對(duì)Zabbix實(shí)施二次開發(fā),形成符合自身需求的一體化自動(dòng)監(jiān)控系統(tǒng)。同時(shí)我們也應(yīng)該持續(xù)關(guān)注Zabbix系統(tǒng)的版本變更,希望未來Zabbix能夠在應(yīng)用狀態(tài)的實(shí)時(shí)監(jiān)控方面有所突破。