nagios主页上看到3.x的文档里面有一篇讲监控windows的([url]http://nagios.sourceforge.net/docs/3_0/monitoring-windows.html[/url]
),我就仿照过来,对它略作修改来应用到我们当前的nagios2.9上去.(毕竟3.x还是测试版,2.9是最新的稳定版,用起来放心啊)
 
细心的朋友可注意到了,在nagios的libexec下有check_nt这个插件,它就是用来检查windows机器的服务的,其功类似于上一章讲的check_nrpe.不过还需要搭配另外一个软件NSClient,它则类似于NRPE
 
NSClient的原理如下图
 
 
可以看到,NSClient与nrpe最大的区别就是:
--被监控机上安装有nrpe,并且还有插件,最终的监控是由这些插件来进行的.当监控主机将监控请求发给nrpe后,nrpe调用插件来完成监控.
--NSClient则不同,被监控机上只安装NSClient,没有任何的插件.当监控主机将监控请求发给NSClient后,NSClient直接完成监控,所有的监控是由NSClient完成的.
这也说明了NSClient的一个很大的问题,不灵活,没有可扩展性.它只完成自己本身包含的监控操作,不由一些插件来扩展.好在NSClient已经做的不错了,基本上可以完全满足我们的监控需要.
 
安装NSClient
解压为C:\NSClient++
打开cmd 切换到C:\NSClient++
执行nsclient++ /install进行安装
 
 
执行nsclient++ SysTray 注意大小写,这一步是安装系统托盘,时间稍微有点长
 
在运行里面输入services.msc打开”服务”
 
看到下图就说明NSClient服务已经安装上了
 
双击打开,点”登录”标签,在”允许服务与桌面交互”前打勾
 
 
编辑C:\NSClient++下的NSC.ini文件

[modules]部分的所有模块前面的注释都去掉,除了CheckWMI.dll and RemoteConfiguration.dll这两个
[Settings]部分设置'password'选项来设置密码,作用是在nagios连接过来时要求提供密码.这一步是可选的,我这里方便起见跳过它,不要密码.
[Settings]部分'allowed_hosts'选项的注释去掉,并且加上运行nagios的监控主机的IP.我改为如下这样allowed_hosts=127.0.0.1/32,192.168.0.111 以逗号相隔.这个地方是支持子网的,如果写成192.168.0.0/24则表示该子网内的所有机器都可以访问.如果这个地方是空白则表示所有的主机都可以连接上来.注意是[Settings]部分的,因为[NSClient]部分也有这个选项.
必须保证[NSClient]的'port'选项并没有被注释,并且它的值是'12489',这是NSClient的默认监听端口

CMD中执行nsclient++ /start启动服务,注意所在目录是C:\NSClient++
 
 
这时在桌面右下角的系统托盘处会出现一个×××的M字样的图标
 
 
查看服务
 cmd执行services.msc
 
已经正常启动了.注意服务默认设的是”自动”,也就是说是开机自动启动的.
cmd里面执行netstat –an可以看到已经开始监听tcp的12489端口了
 
 
这样外部就可以访问了?错!防火墙也要打开tcp的12489端口,否则nagios检查此服务的时候会报socket 超时错误.
在控制面板找到防火墙选项,找到添加端口
 
对监控主机的配置
接下来就是要配置监控主机了.与之前的nrpe的过程类似,在监控主机上做的就3件事情
1.安装监控windows的插件(已经默认安装了,check_nt)
2.定义命令
3.定义要监控的项目
 
定义命令
vi /usr/local/nagios/etc/commands.cfg
增加下面的内容

########################################################################
#
# 2007.9.6 add by yahoon
# CHECK_NT
# check windows hosts info
#
########################################################################
define command{
        command_name    check_nt
        command_line    $USER1$/check_nt -H $HOSTADDRESS$ -p 12489 -v $ARG1$ $ARG2$
        }

如果NSClient设置了连接需要密码,则应写成如下格式
$USER1$/check_nt -H $HOSTADDRESS$ -p 12489 -s PASSWORD -v $ARG1$ $ARG2$
具体含义参考check_nt命令的用法
 
增加监控项目
vi /usr/local/nagios/etc/services.cfg
下面这个服务是监控NSClient的版本
 


define host{
        use                     linux-box            ; Name of host template to use
        host_name               Netguard
        alias                   internal monitor
        address                 192.168.30.164
        check_command           check_ping!100.0,20%!500.0,60%
 
 
define service{
        host_name               Netguard
        service_description     check-version
        check_command           check_nt!CLIENTVERSION
        max_check_attempts      5
        normal_check_interval   3
        retry_check_interval    2
        check_period            24x7
        notification_interval   10
        notification_period     24x7
        notification_options    w,u,c,r
        contact_groups          sagroup
        }

同样的可以增加如下服务(为了篇幅,我只给出最关键的check_command这一项)
1)监控windows服务器运行的时间
check_command           check_nt!UPTIME
2)监控Windows服务器的CPU负载,如果5分钟超过80%则是warning,如果5分钟超过90%则是critical
check_command           check_nt!CPULOAD!-l 5,80,90
3)监控Windows服务器的内存使用情况,如果超过了80%则是warning,如果超过90%则是critical.
check_command           check_nt!MEMUSE!-w 80 -c 90
4)监控Windows服务器C:\盘的使用情况,如果超过80%已经使用则是warning,超过90%则是critical
check_command           check_nt!USEDDISKSPACE!-l c -w 80 -c 90
:-l后面接的参数用来指定盘符
5)监控Windows服务器D:\盘的使用情况,如果超过80%已经使用则是warning,超过90%则是critical
check_command           check_nt!USEDDISKSPACE!-l d -w 80 -c 90
6)监控Windows服务器的W3SVC服务的状态,如果服务停止了,则是critical
check_command           check_nt!SERVICESTATE!-d SHOWALL -l W3SVC
7)监控Windows服务器的Explorer.exe进程的状态,如果进程停止了,则是critical
check_command           check_nt!PROCSTATE!-d SHOWALL -l Explorer.exe
 
重启nagios服务来生效,等一会就可以查看页面了
 
 

nagios监控windows服务器_nagios