八、使用Nagios监控Windows服务器
1.windows机器的配置
1).监控方法的选择
其实Nagios对服务器的监控方法有很多,但大体上可以分为三种:
a. 通过snmp协议编写脚本使用snmpwalk或snmpget等client程序对远程主机进行数据的抓取
b. 走c/s方式,通过特定的客户端用他们自己的协议对服务器进行数据抓取,这一类需要在目标服务器上安装服务器端(即Listener),服务器端通过自己的程序对服务器上的数据进行收集(wmi,vbscript),最后再由nagios服务器上的客户端来取数据。这类的代表应用有NSClient++,pNSClient,nrpe_nt等等
c. 还是走c/s方式,只不过这次nagios本机变成了服务器端,目标监控服务器上通过安装客户端向nagios服务器推送本机的相关数据。这类的代表应用有NSCA等
鉴于我需要用到performance data来使用pnp进行绘图,而本人编程能力非常有限,再加上我是个非常懒的SA。所以,我选择了上面的第二类方式对我的所有Windows服务器进行监控,选择的应用是NSClient++。
NSCLient++是针对Windows操作系统的一款简单但是功能强大又安全的监控服务器端,同时兼容了NSClient/NRPE/NSCA三种方式。它能监控cpu,内存,硬盘,进程,服务状态,性能计数器等等。NSClient++提供的CheckCommands.
2).下载NSClient++-Win32-0.3.5.msi并安装。
运行nsclient++,打开cmd窗口,输入:
NSClient++ /install
NSClient++ SysTray install
NSClient++ /start
如果有防火墙,请开放相应端口。
3). 修改配置文件
a. 到安装目录打开NSC.ini文件进行修改:
在[modules]模块,将除RemoteConfiguration.dll外的所有dll文件明前的注释(;)去掉。
在[Settings]模块可以设置一个连接密码password=PWD,为了简单,在此不设密码。设置 allowed_hosts=127.0.0.1/32,192.168.0.19,可以连接的监控服务器的地址,如果写成192.168.0.0/24 则表示该子网内的所有机器都可以访问;如果这个地方是空白则表示所有的主机都可以连接上来(注意在[NSClient]有allowed_hosts的同样设置,不要设置错了),最后不要忘记去掉前面的注释符(;)。
b. 其他模块的配置:(把以下模块相关行的注释去掉就行了)
[log]
file=nsclient.log
date_mask=%Y-%m-%d %H:%M:%S
root_folder=exe
[NSClient]
#允许访问的主机IP,多个主机用,分隔
allowed_hosts=127.0.0.1/32
#监听端口
port=12489
socket_timeout=30
[NRPE]
#监听端口
port=5666
command_timeout=60
#不使用ssl,否则容易出错
use_ssl=0
#允许访问的主机IP,多个主机用,分隔
allowed_hosts=127.0.0.1/32
socket_timeout=30
#启用performance_data(关键,就看着他画图呢)
performance_data=1
[NRPE Handlers]
#定义NRPE的命令
#监测内存
check_mem=inject checkMem MaxWarn=80% MaxCrit=90% ShowAll=long type=physical
编辑完成以后保存关闭,在windows防火墙里开放tcp12489和5666端口,然后在Windows的服务里面找到新装的NSClientpp服务,启动它。
2.Linux监控服务器上nagios的配置
1).创建监控配置文件print-w-30.cfg,使用check_nt命令监控windows系统信息(此命令默认已定义)。
Windows监控示例配置文件:
[root@tech etc]# vi /usr/local/nagios/etc/servers/print-w-80.cfg
###################################################################
# WINDOWS.CFG – SAMPLE CONFIG FILE FOR MONITORING A WINDOWS MACHINE
#
# Last Modified: 06-13-2007
#
# NOTES: This config file assumes that you are using the sample configuration
# files that get installed with the Nagios quickstart guide.
#
####################################################################
####################################################################
####################################################################
#
# HOST DEFINITIONS
#
####################################################################
####################################################################
# Define a host for the Windows machine we’ll be monitoring
# Change the host_name, alias, and address to fit your situation
# 定义windows主机名和IP的地方
define host{
use windows-server ; Inherit default values from a template
host_name print80 ; The name we’re giving to this host
alias Print80 ; A longer name associated with the host
address 192.168.0.80 ; IP address of the host
}
# address后面跟的是被监控端windows机器的IP地址,多个IP用,分隔
####################################################################
####################################################################
#
# HOST GROUP DEFINITIONS
# 主机组在/usr/local/nagios/etc/servers/hostgroup.cfg中单独配置
####################################################################
####################################################################
# Define a hostgroup for Windows machines
# All hosts that use the windows-server template will automatically be a member of this group
#define hostgroup{
# hostgroup_name windows-servers ; The name of the hostgroup
# alias Windows Servers ; Long name of the group
# }
#####################################################################
#####################################################################
#
# SERVICE DEFINITIONS
#
#####################################################################
#####################################################################
# Create a service for monitoring the version of NSCLient++ that is installed
# Change the host_name to match the name of the host you defined above
# 利用check_nt命令监控NSClient++,check_nt命令默认已定义
define service{
use generic-service
host_name print80
service_description NSClient++ Version
check_command check_nt!CLIENTVERSION
}
# Create a service for monitoring the uptime of the server
# Change the host_name to match the name of the host you defined above
# 监控系统运行的时间
define service{
use generic-service
host_name print80
service_description Uptime
check_command check_nt!UPTIME
}
# Create a service for monitoring CPU load
# Change the host_name to match the name of the host you defined above
# 监控CPU使用率,80%警告,90%严重
define service{
use generic-service
host_name print80
service_description CPU Load
check_command check_nt!CPULOAD!-l 5,80,90
}
# Create a service for monitoring
# Change the host_name to match the name of the host you defined above
# 监控内存使用率,记住此为虚拟内存和物理内存的总量,80%警告,90%严重
define service{
use generic-service
host_name print80
service_description Memory Usage
check_command check_nt!MEMUSE!-w 80 -c 90
}
# Create a service for monitoring C:\ disk usage
# Change the host_name to match the name of the host you defined above
# 监控C盘空间的使用率,80%警告,90%严重
define service{
use generic-service
host_name print80
service_description C_Drive_Space
check_command check_nt!USEDDISKSPACE!-l c -w 80 -c 90
}
# Create a service for monitoring the W3SVC service
# Change the host_name to match the name of the host you defined above
# 监控w3svc服务的状态,w3svc是用来监视web服务的健康状况的
define service{
use generic-service
host_name print80
service_description W3SVC
check_command check_nt!SERVICESTATE!-d SHOWALL -l W3SVC
}
# Create a service for monitoring the Explorer.exe process
# Change the host_name to match the name of the host you defined above
# 监控explorer进程
define service{
use generic-service
host_name print80
service_description Explorer
check_command check_nt!PROCSTATE!-d SHOWALL -l Explorer.exe
}
2).主机组配置文件
root@tech etc]# vi /usr/local/nagios/etc/servers/hostgroup.cfg
# 配置linux主机组的地方,可将要监控的linux主机加进来
define hostgroup{
hostgroup_name linux-servers ; The name of the hostgroup
alias Linux Servers ; Long name of the group
members localhost,wiki ; Comma separated list of hosts that belong to this group
}
# 配置windows主机组的地方,可将要监控的windows主机加进来
define hostgroup{
hostgroup_name windows-servers ; The name of the hostgroup
alias Windows Servers ; Long name of the group
members print80 ; Comma separated list of hosts that belong to this group
}
# 去掉上面windows主机配置部分的注释
3). 使用NSClient和NRPE监控
修改commands.cfg,增加使用NSClient和NRPE收集数据的命令,因为NSClient监测到的内存大小都大于实际的物理内存(估计可能是总计),所以使用NRPE监测内存
# 'check_remote_nt_disk' command definition,监测硬盘使用量
define command{
command_name check_remote_nt_disk
command_line$USER1$/check_nt -H $ARG1$ -p $ARG2$ -v $ARG3$ -l $ARG4$ -w $ARG5$ -c $ARG6$
}
# 'check_remote_nt_cpu' command definition,监测cpu负载
define command{
command_name check_remote_nt_cpu
command_line $USER1$/check_nt -H $ARG1$ -p $ARG2$ -v $ARG3$ -l $ARG4$
}
# 'check_nt_mem_nrpe' command definition,监测内存使用量
define command{
command_name check_nt_mem_nrpe
command_line $USER1$/check_nrpe -H $ARG1$ -n -p $ARG2$ -c $ARG3$
}
# 'check_avg_disk_queue' command definition,监测硬盘读写队列
define command{
command_name check_avg_disk_queue
command_line $USER1$/check_nt -H $ARG1$ -p $ARG2$ -v $ARG3$ -l $ARG4$ -d $ARG5$ -w $ARG6$ -c $ARG7$
}
修改print-w-80.cfg中service定义里面的check_command
define service{
use web-service,service-pnp
host_name web1
service_description disk-d
check_command check_remote_nt_disk!10.10.10.11!5666!USEDDISKSPACE!d!85!90
}
define service{
use web-service,service-pnp
host_name web1
service_description mem
check_command check_nt_mem_nrpe!10.10.10.11!5667!check_mem
}
define service{
use web-service,service-pnp
host_name web4
service_description avg-disk-queue
check_command check_avg_disk_queue!10.10.10.24!5666!COUNTER!"\\PhysicalDisk(_Total)\\Avg. Disk Queue Length","%.2f"!SHOWALL!14!28
}
修改完以后重新配置nagios使配置生效
#/etc/init.d/nagios reload