1.查看配置
首先在主控端查看/usr/local/nagios/etc/objects/下面的commands.cfg配置文件,看是否有允许进行windows监控的定义。
在/usr/local/nagios/etc/object/templates.cfg中是否有以下内容(这个用于未来添加新主机的时候的范例)
2.进行配置文件的修改
在nagios.cfg的主配置文件下
将#cfg_file=/usr/local/nagios/etc/objects/windows.cfg
修改为
cfg_file=/usr/local/nagios/etc/objects/windows.cfg
然后保存
接下来进行windows.cfg的修改
只用将原来的IP地址更改成现在window被控端的ip地址就可以了,其他保持不变。
完了之后不要忘了,查看配置是否完全正确
# /usr/local/nagios/bin/nagios-v /usr/local/nagios/etc/nagios.cfg
然后再重启服务
# service nagios restart
3.进行window被控端NSCP-0.4.1.73-X64的安装
然后只用一直下一步就可以安装完成了。
4.进行NSCP-0.4.1.73-X64的配置文件修改
默认安装的NSCP-0.4.1.73-X64在系统C:\Program Files\NSClient++
里面有个配置文件需要进行修改
将[/modules]下面的所有行前面的“;”号注释全部去掉,保留CheckWMI项RemoteConfiguration项前面的注释。
然后将[/settings/default]下面的allowedhosts= 等号后面如果为空,则表示任何网络都可以通过NSCP来访问此计算机,如果填入具体IP地址,则只有被填入的地址可以访问此计算机,这里支持子网,也就是说也可以允许某个网段来访问此计算机。
5.进行window计算机设置
到了这一步,可以通过命令提示符来检测此计算机的12489的端口是否开启,因为NSCP就是依赖于这个端口来传输信息的。
netstat –an | find “12489”
然后再查看防火墙和系统服务
运行内输入services.msc
如果都已经好了。就可以查看web监控界面有这台新监控到的window主机了。
6.如果建立servers组服务,可以给这台计算机单独建立配置文件
首先在/usr/local/nagios/etc/objects下面建立一个名为servers的文件夹和一个名为192-168-34-130的文件,并且加入到nagios的用户和用户组
# chown –R nagios.nagios /usr/local/nagios/etc/objects/servers
# chown –R nagios.nagios /usr/local/nagios/etc/objects/servers/192-168-34-130.cfg
然后进行这个192-168-34-130.cfg的配置文件的编写,这里可以参考templates.cfg的模版文件。
1)首先需要定义主机的模版,因为被控端的主机为windows的系统,所以就可以在templates.cfg功能模版文件中找到相对应的主机模版下的windos-server的主机模版。
所以在新建立的192-168-34-130.cfg的配置文件编写第一部分的主机定义就可以这么来写:
define host{
name windows130 #这里定义主机名称和下面所有的host_name有关联。
use generic-host #这里表示引用templates.cfg文件的主机模版
check_period 24x7 #这里会告诉nagios检查主机的时间段
check_interval 5 #nagios对主机的检查时间间隔,单位是分钟。
retry_interval 1 #重试检查时间间隔,单位是分钟
max_check_attempts 10 #nagios对主机最大检查次数(也就是nagios在检查发现某主机异常时,并不马上判断为异常状况,而是多试几次,因为有可能只是一时网络太拥挤,或是一些其他原因,让主机受到了一点影响,这里的10就是至少试10次的意思。)
check_command check-host-alive ##指定检查主机状态的命令,其中“check-host-alive”在commands.cfg文件中定义。
notification_period 24x7 #主机故障时,发送通知的时间范围,其中“workhours”在timeperiods.cfg中进行了定义
notification_interval 30 #在主机出现异常后,故障一直没有解决,nagios再次对使用者发出通知的时间。单位是分钟。如果你觉得,所有的事件只需要一次通知就够了,可以把这里的选项设为0
notification_options d,u,r #定义主机在什么状态下可以发送通知给使用者,d即down,表示宕机状态,u即unreachable,表示不可到达状态,r即recovery,表示重新恢复状态。
contact_groups admins #指定联系人组,这个“admins”在contacts.cfg文件中定义
hostgroups windows-list #主机所属的主机组,跟hostgroup.cfg有关。
register 0
}
2)编写192-168-34-130.cfg的配置文件第二部分,即定义服务的各项参数:
而这第二部分同样可以参考templates.cfg的功能模版文件:
define service{
name winser130 #定义一个服务的名称
active_checks_enabled 1
passive_checks_enabled 1
parallelize_check 1
obsess_over_service 1
check_freshness 0
notifications_enabled 1
event_handler_enabled 1
flap_detection_enabled 1
process_perf_data 1
retain_status_information 1
retain_nonstatus_information 1
is_volatile 0
check_period 24x7 #这里的check_period告诉nagios检查服务的时间段。
max_check_attempts 3 #nagios对服务的最大检查次数。
normal_check_interval 10 #此选项是用来设置服务检查时间间隔,也就是说,nagios这一次检查和下一次检查之间所隔的时间,这里是10分钟。
retry_check_interval 2 #重试检查时间间隔,单位是分钟。
contact_groups admins #指定联系人组,同上。
notification_options w,u,c,r #这个定义的是“通知可以被发出的情况”。w即warn,表示警告状态,u即unknown,表示不明状态,c即criticle,表示紧急状态,r即recover,表示恢复状态。也就是在服务出现警告状态、未知状态、紧急状态和重新恢复后都发送通知给使用者。
notification_interval 60 #在服务出现异常后,故障一直没有解决,nagios再次对使用者发出通知的时间。单位是分钟。如果你认为,所有的事件只需要一次通知就够了,可以把这里的选项设为0。
notification_period 24x7 #指定“发送通知”的时间段,也就是可以在什么时候发送通知给使用者。
register 0
}
3)前面两部分完成之后,就可以进行第三部分的主机相关信息的定义,这里可以参考Localhost.cfg示例配置文件。
define host{
use windows130 #主机的名称跟上面1的name要相同
host_name 192-168-34-130 #这里就是最终显示在web页面的主机名称
alias 192-168-34-130 #这个可以随便填写
#parents servers #这个为指定父文件夹
address 192.168.34.130 #这里就是主机本身的IP地址了
icon_image windows130.png #指定主机在map的图片名称
statusmap_image windows130.png #指定主机在map的状态图片名称
#2d_coords 200,400 #2d图片参数
#3d_coords 200,400,100 #3d图片参数
}
4最后进行服务的定义:
同样可以参考Localhost.cfg的示例配置文件:
define service{
use winser130 #引用winser130的服务属性值
host_name 192-168-34-130 #这是上面3主机部分定义的主机名称
service_description NSClient++version #服务描述
check_command check_nt!CLIENTVERSION#调用check_nt的命令,查看版本
}
define service{
use winser130
host_name 192-168-34-130
service_description Uptime
check_command check_nt!UPTIME #定义监控机器启动后运行时间
}
define service{
use winser130
host_name 192-168-34-130
service_description CPU Load
check_command check_nt!CPULOAD!-1 5,80,90
#定义监控CPU负载,监控Windows机器的CPU利用率,并在5分钟CPU负荷高于90%时给出一个紧急警报或是高于80%时给出一个告警警报
}
define service{
use winser130
host_name 192-168-34-130
service_description MemoryUsage
check_command check_nt!MEMUSE!-w 80 -c 90
#监控Windows机器的内存占用率,并在5分钟内存占用率高于90%时给出一个紧急警报或是高于80%时给出一个告警警报
}
define service{
use winser130
host_name 192-168-34-130
service_description C:\ DriveSpace
check_command check_nt!USEDDISKSPACE!-1c -w 80 -c 90
#监控Windows机器的C:盘的磁盘利用率,并在磁盘利用率高于90%时给出一个紧急警报或是高于80%时给出一个告警警报
}
define service{
use winser130
host_name 192-168-34-130
service_description W3SVC
check_command check_nt!SERVICESTATE! -d SHOWALL -1 W3SVC
#监控Windows机器上的W3SVC服务状态,并在W3SVC服务停止时给出一个紧急警报。
}
define service{
use winser130
host_name 192-168-34-130
service_description Explorer
check_command check_nt!PROCSTATE!-d SHOWALL -1 Explorer.exe
#监控Windows机器上的Explorer.exe进程,并在进程没有运行时给出一个紧急警报。
}
到这里这个单独的配置文件就建立完成了,之后可以检查配置文件是否可以通过系统检查,如果通过检查,再重新启动服务,这个时候就可以在web界面看到重新定义的主机了。如下图所示:
.
五、commands.cfg的配置文件解剖
1.此文件默认是存在的,无需修改即可使用,当然如果有新的命令需要加入时,在此文件进行添加即可。这里并未列出文件的所有内容,仅仅介绍了配置中用到的一些命令。
#下面是notify-host-by-email命令的定义
define command{
command_name notify-host-by-email #命令名称,即定义了一个主机异常时发送邮件的命令。
command_line /usr/bin/printf "%b" "***** Nagios *****nnNotification Type: $NOTIFICATIONTYPE$nHost: $HOSTNAME$nState: $HOSTSTATE$nAddress: $HOSTADDRESS$nInfo: $HOSTOUTPUT$nnDate/Time: $LONGDATETIME$n" | /bin/mail -s "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" $CONTACTEMAIL$
}
#命令具体的执行方式,“-H $HOSTADDRESS$” 是定义目标主机的地址,这个地址在hosts.cfg文件中定义了
define command{
command_name check-host-alive #用来检测主机状态
command_line $USER1$/check_ping -H $HOSTADDRESS$ -w 3000.0,80% -c 5000.0,100% -p 5
}
#这里的变量$USER1$在resource.cfg文件中进行定义,即:$USER1$=/usr/local/nagios/libexec
那么check_ping的完整路径为/usr/local/nagios/libexec/check_ping。 “-w 3000.0,80%”中 “-w”说明后面的一对值对应的是“WARNING”状态,“80%”是其临界值。“-c 5000.0,100%”中“-c”说明后面的一对值对应的是“CRITICAL”,“100%”是其临界值。“-p 1”说明每次探测发送一个包。
define command{
command_name check_ftp
command_line $USER1$/check_http -I $HOSTADDRESS$ $ARG1$
}
define command{
command_name check_ssh
command_line $USER1$/check_ssh $ARG1$ $HOSTADDRESS$
}