中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

Nagios利用vbs腳本監(jiān)控windows主機舉例之NTP

    前兩天接到一個需求,要求對現(xiàn)有網(wǎng)域中的關鍵業(yè)務主機進行時鐘監(jiān)控,若發(fā)現(xiàn)時鐘偏移超過規(guī)定秒數(shù)則自動發(fā)警告給管理員。

創(chuàng)新互聯(lián),為您提供網(wǎng)站建設公司重慶網(wǎng)站制作、網(wǎng)站營銷推廣、網(wǎng)站開發(fā)設計,對服務酒店設計等多個行業(yè)擁有豐富的網(wǎng)站建設及推廣經(jīng)驗。創(chuàng)新互聯(lián)網(wǎng)站建設公司成立于2013年,提供專業(yè)網(wǎng)站制作報價服務,我們深知市場的競爭激烈,認真對待每位客戶,為客戶提供賞心悅目的作品。 與客戶共同發(fā)展進步,是我們永遠的責任!

    閱讀微軟官方的NTP服務相關文檔得知,windows網(wǎng)域環(huán)境中維持每臺客戶端主機與DC之間時鐘同步的一個關鍵服務就是w32time,我們在cmd下下如下指令可以看到:

Nagios利用vbs腳本監(jiān)控windows主機舉例之NTP

    關于時鐘同步的原理這里就不多講了,反正最終所有網(wǎng)域主機其實都是與域中的根PDC進行同步。在上面的輸出中我們可以看到指定主機的時鐘與本地主機間的時鐘時差為+0.0109190s,關鍵點來了。試想,如果能將指令中的computers指向根PDC(這個不難做到),然后將此命令輸出內(nèi)容中的時差值抓取出來與我們自定的時鐘偏移閾值進行比較,超過則告警(透過Nagios郵件、短信等),反之則顯示正常。這樣問題不就明了:如有哪一臺主機的w32time服務未正常啟動,或啟動了但未發(fā)揮作用讓時鐘自動與PDC同步,那么就會造成時差,當時差超過某個點時就告警。

想到了我們就開干,由于之前用過一段時間vbs,能寫一小點vbs腳本,故找出vbs參考手冊,查以下以下幾個關鍵點:

1、如何從用vbs截取出cmd命令的輸出內(nèi)容?

2、如何從指定內(nèi)容中搜尋出需要的字符串?如上圖我們要在w32tm命令的輸出中找出時差值。

3、如何讓vbs讀取我們設定的參數(shù)列?Nagios中配置命令時需要。

4、如何設定Nagios和NSClient將vbs腳本的執(zhí)行結果傳回Nagios并觸發(fā)警告?

以上是大的思考方向。

 

下面給出我的解決方法,不講原理,只寫步驟,因為原理太多了,本人口拙,一兩句說不清楚。

我用的環(huán)境是Centos  Nagios-3.x   NSClient-0.4.1.101  windows基本所有版本都有

注意:對于win7以前的系統(tǒng)比如xp,win2003和以后如win2008R2,此w32tm的用法會稍有不同的,建議用之前先w32tm/?一下看看幫助文檔。

1、google上找到一個check_time.vbs的腳本,弄下來研究了一下,基本符合我們上面的需求,稍加改寫:

源碼下載地址,源碼對win7前的系統(tǒng)兼容有問題,就是上面提到的注意。

改寫后:將下面代碼拷貝下來,另存為check_time.vbs文件,以下代碼對win7前后系統(tǒng)均兼容。

Set Args = WScript.Arguments
If WScript.Arguments.Count < 3 Then
Err = 3
WScript.Echo "check_time.vbs V1.01"
WScript.Echo "Usage: cscript /NoLogo check_time.vbs serverlist warn crit [biggest]"
Wscript.Echo ""
Wscript.Echo "Options:"
Wscript.Echo " serverlist (required): one or more server names, coma-separated"
Wscript.Echo " warn  (required): warning offset in seconds, can be partial"
Wscript.Echo " crit  (required): critical offset in seconds, can be partial"
Wscript.Echo " biggest (optional): if multiple servers, else use default least offset"
Wscript.Echo ""
Wscript.Echo "Example:"
Wscript.Echo "cscript /NoLogo check_time.vbs myserver1,myserver2 0.4 5 biggest"
Wscript.Quit(Err) '如果參數(shù)數(shù)量小于3,則返回錯誤碼Err=3
End If
serverlist = Args.Item(0) ' one or more server names, coma-separated
warn = Args.Item(1) ' warning offset in seconds, can be partial
crit = Args.Item(2)  ' if multiple servers, else use default least offset
If WScript.Arguments.Count > 3 Then
criteria = Args.Item(3)
Else
criteria = least '等于3則取最小值
End If
Set objShell = CreateObject("Wscript.Shell")
strCommand = "%SystemRoot%\System32\w32tm.exe /monitor /computers:" & serverlist
set objProc = objShell.Exec(strCommand)
input = ""
strOutput = ""
Do While Not objProc.StdOut.AtEndOfStream
input = objProc.StdOut.ReadLine
If InStr(input, "NTP") Then 'input中不包含“NTP”字符串,則InStr返回值0,跳到End If
strOutput = strOutput & input
End If
Loop
Set myRegExp = New RegExp
myRegExp.IgnoreCase = True
myRegExp.Global = True
myRegExp.Pattern = " NTP: ([+-][0-9]+\.[0-9]+)s"
Set myMatches = myRegExp.Execute(strOutput)
result = ""
If myMatches(0).SubMatches(0) <> "" Then
result = myMatches(0).SubMatches(0)
End If
For Each myMatch in myMatches
If myMatch.SubMatches(0) <> "" Then
If criteria = "biggest" Then
If abs(result) < Abs(myMatch.SubMatches(0)) Then
result = myMatch.SubMatches(0)
End If
Else
If abs(result) > Abs(myMatch.SubMatches(0)) Then
result = myMatch.SubMatches(0)
End If
End If
End If
'   Wscript.Echo myMatch.SubMatches(0) & " -debug"
Next
If result = "" Then
Err = 3
Status = "UNKNOWN"
ElseIf Abs(result) > Abs(crit) Then
Err = 2
status = "CRITICAL"
ElseIf Abs(result) > Abs(warn) Then
Err = 1
status = "WARNING"
Else
Err = 0
status = "OK"
End If
Wscript.Echo "NTP " & status & ": Offset " & result & " secs|offset=" & result & "s;" & warn & ";" & crit & ";"
Wscript.Quit(Err)

 

2、將上面的check_time.vbs腳本放到NSClient安裝目錄的:

C:\Program Files\NSClient++\scripts\lib

3、修改NSClient的配置文件nsclient.ini,加上以下內(nèi)容:

[/settings/external scripts/scripts]
timevbs = cscript.exe //T:30 //NoLogo scripts\\lib\\check_time.vbs 10.40.1.190 5 10

這個配置文件的寫法還是很講究的,此處花了我相當多的時間進行調(diào)試,汗。最終官網(wǎng)找到以下兩篇文章,參考解決:

http://nsclient.org/nscp/wiki/CheckExternalScripts

http://www.nsclient.org/nscp/discussion/topic/1079

 

4、寫一個vbs腳本,每臺主機上執(zhí)行腳本后就會自動拷貝修改好的nsclient.ini和check_time.vbs到指定目錄。當然可以批量派發(fā)執(zhí)行。

Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
fso.CopyFile "\\10.40.1.129\ShareFolder\Linux\check_time.vbs","C:\Program Files (x86)\NSClient++\scripts\lib\",True
fso.CopyFile "\\10.40.1.129\ShareFolder\Linux\nsclient.ini","C:\Program Files (x86)\NSClient++\",True
'對于32位的系統(tǒng),此路徑設置會稍有不同
Set objShell = CreateObject("Wscript.Shell")
objShell.Run"cmd /k net stop nscp && net start nscp",vbhide

 

5、以上都是針對被監(jiān)控端進行的配置,完成后我們建議先到Nagios中進行測試,如下

[root@pcnnagios libexec]# ./check_nrpe -H 10.40.1.106 -c timevbs
NTP OK: Offset -0.3144475 secs|'offset'=-0.31444s 'Warning'=5 'Critical'=10

沒問題,可以看到測試OK,輸出結果也符合我們vbs腳本編寫的預期。

 

6、萬事俱備,那下面就該進行Nagios的命令和服務配置了,此處直接貼配置,細節(jié)上可以因人而異進行微調(diào)。

command.cfg內(nèi)添加以下:

# 'check_time' command definition
define command{
command_name    check_time
command_line    $USER1$/check_nrpe -H $HOSTADDRESS$ -c timevbs
}

 

service.cfg下添加以下:

define service{
use                     generic-service,srv-pnp
hostgroup_name          windows-servers
service_description     Check Time Sync
check_command           check_time
}

 

 

7、以上所有步驟弄完后,可以到我們的Nagio服務監(jiān)控界面檢驗成果了,

Nagios利用vbs腳本監(jiān)控windows主機舉例之NTP

如上service.cfg的配置中,我們有設定用pnp4nagios進行繪圖:

Nagios利用vbs腳本監(jiān)控windows主機舉例之NTP

 

 

8、擴散一下思維:參考此方法,那么我們以后想透過nagios利用Windows中的腳本,如vbs、bat、powershell等監(jiān)控windows主機的其他應用或功能也水道渠成了。前提是要會寫對應功能的腳本,至少要看得懂吧。。。

 

網(wǎng)站題目:Nagios利用vbs腳本監(jiān)控windows主機舉例之NTP
標題路徑:http://www.rwnh.cn/article32/jcjppc.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站小程序開發(fā)、定制網(wǎng)站、云服務器、域名注冊、網(wǎng)站維護

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化
喜德县| 兰溪市| 灵宝市| 乌恰县| 孟州市| 花莲县| 张家港市| 凤凰县| 萝北县| 南溪县| 福贡县| 米泉市| 曲周县| 团风县| 藁城市| 临沭县| 确山县| 张掖市| 景洪市| 纳雍县| 连平县| 林西县| 大理市| 达孜县| 黄浦区| 阳城县| 内江市| 班玛县| 裕民县| 葫芦岛市| 新民市| 兴国县| 寿光市| 华坪县| 保德县| 留坝县| 广丰县| 涟水县| 景洪市| 巩义市| 姜堰市|