设为首页 收藏本站
查看: 1860|回复: 6

Nagios利用vbs腳本監控windows主機舉例之NTP

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2013-7-8 09:50:51 | 显示全部楼层 |阅读模式

前兩天接到一個需求,要求對現有網域中的关键业务主機進行時鐘監控,若發現時鐘偏移超過規定秒數則自動發警告给管理员。

    阅读微软官方的NTP服务相关文档得知,windows网域环境中维持每台客户端主机与DC之间时钟同步的一个关键服务就是w32time,我们在cmd下下如下指令可以看到:

150116547.jpg

    关于时钟同步的原理这里就不多讲了,反正最终所有网域主机其实都是与域中的根PDC进行同步。在上面的输出中我们可以看到指定主机的时钟与本地主机间的时钟时差为+0.0109190s,关键点来了。试想,如果能将指令中的computers指向根PDC(这个不难做到),然后将此命令输出内容中的时差值抓取出来与我们自定的时钟偏移阈值进行比较,超过则告警(透过Nagios邮件、短信等),反之则显示正常。这样问题不就明了:如有哪一台主机的w32time服务未正常启动,或启动了但未发挥作用让时钟自动与PDC同步,那么就会造成时差,当时差超过某个点时就告警。

想到了我们就开干,由于之前用过一段时间vbs,能写一小点vbs脚本,故找出vbs参考手册,查以下以下几个关键点:

1、如何从用vbs截取出cmd命令的输出内容?

2、如何从指定内容中搜寻出需要的字符串?如上图我们要在w32tm命令的输出中找出时差值。

3、如何让vbs读取我们设定的参数列?Nagios中配置命令时需要。

4、如何设定Nagios和NSClient将vbs脚本的执行结果传回Nagios并触发警告?

以上是大的思考方向。


下面给出我的解决方法,不讲原理,只写步骤,因为原理太多了,本人口拙,一两句说不清楚。

我用的环境是Centos  Nagios-3.x   NSClient-0.4.1.101  windows基本所有版本都有

注意:对于win7以前的系统比如xp,win2003和以后如win2008R2,此w32tm的用法会稍有不同的,建议用之前先w32tm/?一下看看帮助文档。

1、google上找到一个check_time.vbs的脚本,弄下来研究了一下,基本符合我们上面的需求,稍加改写:

源码下载地址,源码对win7前的系统兼容有问题,就是上面提到的注意。

改写后:将下面代码拷贝下来,另存为check_time.vbs文件,以下代码对win7前后系统均兼容。

[backcolor=white !important]
[Shell] 纯文本查看 复制代码
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) '如果參數數量小于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,加上以下内容:
[/settings/external scripts/scripts]
timevbs = cscript.exe //T:30 //NoLogo scripts\\lib\\check_time.vbs 10.40.1.190 5 10


这个配置文件的写法还是很讲究的,此处花了我相当多的时间进行调试,汗。最终官网找到以下两篇文章,参考解决:

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

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


[Shell] 纯文本查看 复制代码
4、写一个vbs脚本,每台主机上执行脚本后就会自动拷贝修改好的nsclient.ini和check_time.vbs到指定目录。当然可以批量派发执行。
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位的系统,此路径设置会稍有不同
Set objShell = CreateObject("Wscript.Shell")
objShell.Run"cmd /k net stop nscp && net start nscp",vbhide
 
5、以上都是针对被监控端进行的配置,完成后我们建议先到Nagios中进行测试,如下
[iyunv@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的命令和服务配置了,此处直接贴配置,细节上可以因人而异进行微调。

command.cfg内添加以下:

[backcolor=white !important]
[Shell] 纯文本查看 复制代码
1

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


service.cfg下添加以下:



[Shell] 纯文本查看 复制代码
define service{
use                     generic-service,srv-pnp
hostgroup_name          windows-servers
service_description     Check Time Sync
check_command           check_time
}


7、以上所有步骤弄完后,可以到我们的Nagio服务监控界面检验成果了,

162123829.jpg

如上service.cfg的配置中,我们有设定用pnp4nagios进行绘图:

162554153.jpg



8、扩散一下思维:参考此方法,那么我们以后想透过nagios利用Windows中的脚本,如vbs、bat、powershell等监控windows主机的其他应用或功能也水道渠成了。前提是要会写对应功能的脚本,至少要看得懂吧。。。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-7139-1-1.html 上篇帖子: 启动nagios出现warning:cannot change directory to /home/nagios.... 下篇帖子: CHECK_NRPE: Socket timeout after 10 seconds. windows

尚未签到

发表于 2013-7-8 09:50:54 | 显示全部楼层
长大了娶唐僧做老公,能玩就玩一玩,不能玩就把他吃掉。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-7-8 12:18:57 | 显示全部楼层
解释就是掩饰,掩饰就是编故事!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-7-9 07:18:12 | 显示全部楼层
帮帮顶顶!!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-7-9 20:34:04 | 显示全部楼层
勃起不是万能的,但不能勃起却是万万都不能的!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-7-10 20:04:40 | 显示全部楼层
老天,你让夏天和冬天同房了吧?生出这鬼天气!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-7-11 09:45:30 | 显示全部楼层
禽兽尚且有半点怜悯之心,而我一点也没有,所以我不是禽兽。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表