此文章中参考了老林的博客:http://lilinqing.blog.51cto.com/1122687/483604自己在里面添加了一些内容,开始吧.....

    监控主机   系统:centos   IP:192.168.0.170

   被监控机    系统:windows server2003  IP:192.168.0.125

   服务器端nagios的安装在http://fantefei.blog.51cto.com/2229719/932623  

    此文章中我使用的是sendmail的报警方式

     nagios下的sendmail安装和配置在  http://fantefei.blog.51cto.com/2229719/941058

     因为被监控主机是windows系统,需要安装nsclient++-0.3.6-win32.msi,这是一个客户端工具,通过监控服务器上的check_nt这一个插件来检查WINDOWS机器的服务,当监控服务器将监控请求发给NSClient后,通过NSClient客户端检查监控项目,所有的监控都是由NSClient来完成。

   1.在被监控主机windows端安装nsclient++-0.3.6-win32.msi

         注意被监控机操作系统是32位还是64位,要安装对应版本的NSClient++,我的系统是32位的

        双击安装,NEXT>NEXT>NEXT>

      

     上面写的IP是nsclient客户端允许连接的IP,此地方写的是监控机的IP,下面写的是监控机连接被监控端nsclient时的密码,不设密码为空,为了更安全可以设上,但我觉得没必要设,因为你只允许监控机连接你的nsclietn++了,别的机器是拒绝连接的,除非别人知道你的监控机IP,然后伪造个相同ip来偷偷监控你的windows机器,这概率应该很小吧,设上后监控端要做相应的设置才能正常连接windows被监控机,比较麻烦。个人愚见至于加不加密码自己决定,下面的模块就按图上的勾选就可以了。

如果加上密码在监控机中要修改nagios安装目录下的etc/objects/commands.cfg修改chect_nt命令定义部分,加个-s 后跟连接密码,注意在这里修改的前提是每个nsclient设置的密码都是相同的,如果设置的不同则不能改这里,则需要改etc/objects/windows.cfg中的服务定义部分。
define command{
        command_name    check_nt
        command_line    $USER1$/check_nt -H $HOSTADDRESS$ -p 12489 -s 7758521 -v $ARG1$ $ARG2$
      }

   安装完成,看一下服务里有没有,有的话就证明安装成功了。

 

NSClinet++上面点右键属性,打开服务,如下图: 服务已经启动了

点登录,在登录登录身份下面勾选允许服务与桌面交互,如下图: 

 我们看一下12489是否开启了:

 

 

另外要保证nsclient++是随机自动启动的。

到这里就已经在WINDOWS主机上安装好了,如果你有防火墙的话请打开TCP12489端口,否则nagios检查此服务的时候会报socket 超时错误。

 2.在监控机上设置nagios

   先打开nagios.cfg里的windows的监控,默认的是注释掉的

       #vim /usr/local/nagios/etc/nagios.cfg

      把里面的#cfg_file=/usr/local/nagios/etc/objects/windows.cfg前的#号去掉

     

   nagios用的check_nt插件来监控windows主机,此命令在commands.cfg里定义的:

    注:check_nt的命令是nagios3.0后才加入commands.cfg的,所以你要不是nagios3.0以上的请自动添加

    下面我们编辑/usr/local/nagios/etc/objects/windows.cfg

     (1)首先我们定义被监控的主机及内容:

     use使用的是objects下的templates.cfg定义的模版windows-server,下面我们看一下templates.cfg下windows-server的内容

 

下面说一下里面的内容什么意思:

     name 定义的模版的名字,注意如果自定义的话winows-server后面不要有空格啊

     use 这个模版里用的其他模版的参数,generic-host也是在templates.cfg里面定义的

     check_period 定义的检查主机时间段,24x7在objects下的timeperiods.cfg里面定义的,表示一星期的每天都监视

     check_interval    nagios对主机的检查时间间隔 这里是1分钟

    retry_interval   重试检查的时间间隔,这里是1分钟

   max_check_attempts   nagios对主机的最大检查次数,也就是nagios在检查过程中发现了某主机异常时,并不是马上判断为异常状况,而是多试几次,因为可能是一时网络太拥挤或是一些其他原因是主机受到了一些影响,这里的设置为1主要是为了实验效果出现的更快,现实中要多设置几次。

  check_command   检查主机状态的命令,此命令在commands.cfg中定义

  notification_period 主机故障,发送通知的时间范围

  notification_interval   在主机出现异常后,故障一直没有解决nagios再次对使用者发出通知的时间间隔,

 notification_options  定义主机什么状态下给使用者发送通知,d表示宕机 r表示恢复

conact_groups 指定联系人组   admins在contacts.cfg里定义的联系人组,只要再在contacts.cfg里定义个联系人,然后把他加进组里就可以受到通知了,为了更明了还是看一下contacts.cfg里的内容吧:

 上面nagiosadmin就是定义的联系人,email就是写的联系邮箱。

  好了,说完use里的模版,接着说下面的

   host_name  指定的是nagios网页见面显示的主机标识

  

   address  指定的是windows主机的IP

    (2)定义检测的服务

         加入下面的检查被监控端nsclient++的版本号

         define service{
            use          generic-service
            host_name   winserver
            service_description NSClient++ Version
            check_command  check_nt!CLIENTVERSION
             }
         加入下面的服务定义以监控Windows机器的启动后运行时间。
         define service{
         use          generic-service
         host_name   winserver
         service_description Uptime
         check_command  check_nt!UPTIME
            }
         加入下面的服务定义可监控Windows机器的CPU利用率,并在5分钟CPU负荷高   于90%时给出一个紧急警报或是高于80%时给出一个告警警报。
         define service{
         use   generic-service
         host_name   winserver
         service_description CPU Load
          check_command  check_nt!CPULOAD!-l 5,80,90
           }
          加入下面的服务定义可监控Windows机器的内存占用率,并在5分钟内存占用率高于90%时给出一个紧急警报或是高于80%时给出一个告警警报。
         define service{
           use   generic-service
           host_name   winserver
           service_description Memory Usage
           check_command  check_nt!MEMUSE!-w 80 -c 90
            }
          加入下面的服务定义可监控Windows机器的C:盘的磁盘利用率,并在磁盘利用率高于90%时给出一个紧急警报或是高于10%时给出一个告警警报。
          define service{
          use          generic-service
          host_name   winserver
          service_description C:\ Drive Space
           check_command  check_nt!USEDDISKSPACE!-l c -w 10 -c 90
           }  

         //-l 后面接的是盘符      把红色c换成d就是监控d盘
         加入下面的服务定义可监控Windows机器上的W3SVC服务(IIS的3w网站服务)状态,并在W3SVC服务停止时给出一个紧急警报。
          define service{
          use          generic-service
          host_name   winserver
          service_description W3SVC
          check_command  check_nt!SERVICESTATE!-d SHOWALL -l W3SVC
           }  // W3SVC替换成别的服务名就是监控那个服务
      加入下面的服务定义可监控Windows机器上的Explorer.exe进程,并在进程没有运行时给出一个紧急警报。
        define service{
        use   generic-service
        host_name   winserver
        service_description Explorer
        check_command  check_nt!PROCSTATE!-d SHOWALL -l explorer.exe

        } 

        //要是监控其他的进程就把explorer.exe换成那个进程,注意这个explorer.exe第一个e是小写的,有些文档是大写的就报警了,因为windows的进程就是小写的。
      (3)配置好了以后用/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

         如果没有报错就可以启动了,通过192.168.0.170/nagios就可以看到服务器的监控信息了

上图因为我设置的c盘的使用率高于10%就告警,这时我也收到邮件了:

     (4)如果配置好了但nagios取不到值那就用/usr/local/nagios/libexec/check_nt来看一下是否能连接上监控机

 

能取到值说明没问题。

check_nt用法如下:
check_nt -H host -v variable [-p port] [-w warning] [-c critical] [-l params] [-d SHOWALL] [-u] [-t timeout]
选项:
 -H 后跟被监控机主机名或IP
 -p 后跟被监控nsclient端口号,默认是12489(必需有这个选项否则显示连接拒绝)
 -s 后跟连接密码
 -w 后跟wanring报警值
 -c 后跟critical报警值
 -t 后跟连接尝试次数
 -h 显示帮助
 -V 显示check_nt版本
 -v 后跟要查看的性能值
可用的性能值有:
 CLIENTVERSION   显示nsclient++版本
 CPULOAD   -l  <minutes range>,<warning threshold>,<critical threshold>.
  注意:<minute range> 不要大于 24*60.  
  例: -l 60,90,95,120,90,95  显示最后60分钟和120分钟waring为90%,critical为95%的平均cpuload
 UPTIME           显示开机运行时间
 USEDDISKSPACE  显示磁盘空间信息
  例:-l c 显示当前c盘空间使用信息
     -l d -w 90 -c 95  显示d盘设waring为90%,critical为95%时的空间使用信息
 MEMUSE 显示内存使用情况,后可跟-w  -c指定报警值,默认为5分钟内平均值
 SERVICESTATE 检查一个或多个服务状态
  -l <service1>,<service2>,<service3>,...
 用 -d SHOWALL 可以查看正在运行有服务
 PROCSTATE 检查进程状态
-l <进程名字> 
 COUNTER   检查一些性能计数
        用法:
        -l "\\<performance object>\\counter","<description>
         <description> 参数用于打印输出一个需要浮点参数的命令 ,如果 <description>不包含 "%%", 它会做为一个标签
 例:  "Paging file usage is %%.2f %%%%"
  "%%.f %%%% paging file used."
 INSTANCES   检查性能对象计数 
用法: check_nt -H <hostname> -p <port> -v INSTANCES -l <counter object>
  <counter object> 是一个windows性能对象计数 (eg. Process),
   如果它是两个词,它应该引号括起来,返回的结果将是一个逗号分隔的对象 
check_nt用法举例:

check_nt -H 192.168.1.2 -p 12489 -v CPULOAD -l 60,90,95  //显示最后60分钟waring为90%,critical为95%时的平均cpuload
check_nt -H 192.168.1.2 -p 12489 -v UPTIME  //显示192.168.1.2从开机到现在运行时间
check_nt -H 192.168.1.2 -p 12489 -v USEDDISKSPACE -l c //显示192.168.1.2 C盘使用情况

check_nt -H 192.168.1.2 -p 12489 -v USEDDISKSPACE -l d -w 60 -c 95 //显示192.168.1.2 D盘设waring为90%,critical为95%时的空间使用信息
check_nt -H 192.168.1.2 -p 12489 -v MEMUSE  //显示192.168.1.2内存使用情况
check_nt -H 192.168.1.2 -p 12489 -v SERVICESSTATE -d SHOWALL  //显示192.168.1.2所有正在运行的服务

check_nt -H 192.168.1.2 -p 12489 -v SERVICESSTATE -d SHOWALL -l W3SVC //显示192.168.1.2上IIS网站服务运行情况
check_nt -H 192.168.1.2 -p 12489 –s 7758521 –v CLIENTVERSION  //查看192.168.1.2上nsclient++版本
check_nt -H 192.168.1.2 -p 12489 –s 7758521 -v INSTANCES -l Process //列举192.168.1.2上运行的进程
添加多台windows监控主机

 

 

如果你有多台windows服务器监控,还需做一下操作。

(一)在/usr/local/nagios/etc/objects/下添加第二台windows主机(假设第二台为windows主机为efg)的配置文件efg.cfg,可以直接将windows.cfg直接复制并改名,还需要修改里面相应的host_name和address。

如果有多台windows主机就需新建多少个配置文件

(二)修改/usr/local/nagios/etc/nagios.cfg找到:

# Definitions for monitoring a Windows machine
cfg_file=/usr/local/nagios/etc/objects/windows.cfg (这是指定的第一台windows监控主机的配置文件。)

在这行下面添加第二台windows监控主机的配置文件路径:

cfg_file=/usr/local/nagios/etc/objects/efg.cfg 保存退出。

如果有多台主机需要监控,就继续添加。

退出后重启nagios然后登陆web就可以看到windows主机添加成功。