分类: 系统运维
2011-12-05 12:17:00
添加监控设备
(1)监控linux服务器
vi /usr/local/nagios/etc/objects/localhost.cfg 根据需要定义监控主机及监控内容
下面是个比较全的主机模板,可以在/usr/local/nagios/etc/objects/templates.cfg中找到适合的模板
define host{
use model_host //定义用的模板机
host_name host_name(*) //定义主机名,可起任意名字
alias alias(*) //定义主机别名
display_name display_name // 定义显示名字
address address(*) //主机名对应的ip 地址
parents host_names //定义父节点
hostgroups hostgroup_names //定义主机组名
check_command command_name //检查主机状态的命令
initial_state [o,d,u] //初始化状态
max_check_attempts #(*) //当检查命令返回值不是“OK”时最大重试次数
check_interval # //#分钟进行一次检查
retry_interval # //重试间隔时间
active_checks_enabled [0/1] //主动监控开关(1开0闭)
passive_checks_enabled [0/1] //被动监控开关
check_period timeperiod_name(*) //主机状态检查的时间段
obsess_over_host [0/1] //是否启用主机操作系统探测
check_freshness [0/1] //是否启用 freshness 检查。freshness 检查是对于启用被动检查模式的主机而言的,其作用是定期检查主机报告的状态信息,如果该状态信息已经过期,freshness 将会强制做主机检查。freshness_threshold #
event_handler command_name
event_handler_enabled [0/1] //主机事件处理是否激活
low_flap_threshold #
high_flap_threshold #
flap_detection_enabled [0/1]
flap_detection_options [o,d,u]
process_perf_data [0/1]
retain_status_information [0/1]
retain_nonstatus_information [0/1]
contacts contacts(*) //发送报警通知给谁
contact_groups contact_groups(*) //发送通知给哪个报警组
notification_interval #(*) //主机状态通知功能激活
first_notification_delay #
notification_period timeperiod_name(*) //发送通知的时间段
notification_options [d,u,r,f,s] //定义那些情况下发送通知
notifications_enabled [0/1] //发送通告开关
stalking_options [o,d,u]
notes note_string
notes_url url
action_url url
icon_image image_file //定义主机图标
icon_image_alt alt_string
vrml_image image_file
statusmap_image image_file
2d_coords x_coord,y_coord //定义图标在网页中显示的二维坐标
3d_coords x_coord,y_coord,z_coord //定义图标在网页中显示的三 维坐标
...
}
定义样例:
define host{
host_name web1
alias web1
address 192.168.1.254
parents router1
check_command check-host-alive
check_interval 5
retry_interval 1
max_check_attempts 5
check_period 24x7
process_perf_data 0
retain_nonstatus_information 0
contact_groups router-admins
notification_interval 30
notification_period 24x7
notification_options d,u,r
}
根据需要还可定义主机组
样例:
define hostgroup{ //定义主机组
hostgroup_name tianway.net ; //定义主机组的名字
alias Linux Server ; //别名
members 192.168.0.2,192.168.0.3,192.168.0.4 ; //组成员,使用逗号分隔
}
接下来根据需要定义要监控的服务和服务组,哪台设备要监控什么服务就在那个服务定义里的host_name中添加在主机定义中的主机名就行,多台设备之间用逗号隔开,下面是一些常用服务和系统状态定义
define service{ //定义监控ping
use local-service
host_name *
service_description PING
check_command check_ping!100.0,20%!500.0,60%
}
define service{ //定义监控根分区
use local-service
host_name web1
service_description 根分区
check_command check_local_disk!20%!10%!/
}
define service{ //定义监控登录用户数
use local-service
host_name web1
service_description 登录用户数
check_command check_local_users!20!50
}
define service{ //定义监控进程数
use local-service ;
host_name web1
service_description 进程总数
check_command check_local_procs!250!400!RSZDT
}
define service{ //定义监控系统负荷
use local-service
host_name web1
service_description 系统负荷
check_command check_local_load!5.0,4.0,3.0!10.0,6.0,4.0
}
define service{ //定义监控swap利用率
use local-service
host_name web1
service_description 交换空间利用率
check_command check_local_swap!20!10
}
define service{ //定义监控SSH服务
use local-service
host_name web1
service_description SSH
check_command check_tcp!22!1.0!10.0
notifications_enabled 1
}
define service{ //定义监控HTTP服务
use local-service
host_name web1
service_description HTTP
check_command check_http
notifications_enabled 1
}
define servicegroup{
servicegroup_name 系统负荷检查
alias 负荷检查
members web1,进程总数,web1,登录用户数,web1,根分区,web1,交换空间利用率,web1,PING
} //服务组定义members格式:主机名1,服务名,主机名2,服务名……
配置好后/usr/local/nagios/bin/nagios ‐v /usr/local/nagios/etc/nagios.cfg检查有无错误并重启nagios服务
(2)监控windows监控设备
首先在Windows机器上安装代理NSClient++构件,注意被监控机操作系统是32位还是64位,要安装对应版本的NSClient++
安装到这一步时,文档不用安装,安了也看不懂都是鸟语,下面plguins选项中,nsca选择"用时再安装",这个在分步式监控时才用到,nrpe支持就是windows版本的nrpe监控代理,你可以选择用它代理监控windows机,也可以用nsclient,两个都安装吧,到时两个都能用,如果用nrpe的话同监控linux机一样设置,这里我们用nsclient监控windows机。
在这里要填写监控机IP,设置监控机连接时要用的密码,不设密码为空,为了更安全可以设上,但我觉得没必要设,因为你只允许监控机连接你的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$
}
下面配置监控机上监控windows机的设置
vi /usr/local/nagios/etc/nagios.cfg 把下面这行最前面的#号去掉,只用第一次加windows监控机时修改
#cfg_file=/usr/local/nagios/etc/objects/windows.cfg
vi /usr/local/nagios/etc/objects/windows.cfg 定义主机及监控内容
define host{
use windows-server
host_name winserver
alias My Windows Server
address 192.168.1.2
}
下面根据需要选择性加服务定义以使Nagios监控Windows机器上的不同属性内容。如果是第一台Windows机器,可以只是修改windows.cfg里的服务对象定义。
加入下面的服务定义以监控运行于Windows机器上的NSClient++外部构件的版本。当到时间要升级Windows机器上的外部构件时这信息会很用有,因为它可以告知这台Windows机器上的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%时给出一个紧急警报或是高于80%时给出一个告警警报。
define service{
use generic-service
host_name winserver
service_description C:\ Drive Space
check_command check_nt!USEDDISKSPACE!-l c -w 80 -c 90
} //把红色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换成那个进程就是监控那个进程
配置好后/usr/local/nagios/bin/nagios ‐v /usr/local/nagios/etc/nagios.cfg检查有无错误并重启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
例: -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
PROCSTATE 检查进程状态
-l <进程名字>
COUNTER 检查一些性能计数
用法:
-l "\\
例: "Paging file usage is %%.2f %%%%"
"%%.f %%%% paging file used."
INSTANCES 检查性能对象计数
用法: check_nt -H
如果它是两个词,它应该引号括起来,返回的结果将是一个逗号分隔的对象
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上运行的进程
(3)监控路由器、交换机
vi /usr/local/nagios/etc/nagios.cfg 移除文件里下面这行的最前面的#号
#cfg_file=/usr/local/nagios/etc/objects/switch.cfg
vi /usr/local/nagios/etc/objects/switch.cfg 定义网络设备
define host{
use generic-switch
host_name linksys-srw224p
alias Linksys SRW224P Switch
address 192.168.1.253
hostgroups allhosts,switches
}
//监控丢包率和RTA
增加如下的服务定义以监控自Nagios监控主机到交换机的丢包率和平均回包周期RTA,在一般情况下每5分钟检测一次。
define service{
use generic-service
host_name linksys-srw224p
service_description PING
check_command check_ping!200.0,20%!600.0,60%
normal_check_interval 5
retry_check_interval 1
}
解释:这个服务的状态将会处于:
紧急(CRITICAL)-条件是RTA大于600ms或丢包率大于等于60%;
告警(WARNING)-条件是RTA大于200ms或是丢包率大于等于20%;
正常(OK)-条件是RTA小于200ms或丢包率小于20%
//监控SNMP状态信息
如果交换机与路由器支持SNMP接口,可以用check_snmp插件来监控更丰富的信息。
define service{
use generic-service
host_name linksys-srw224p
service_description Uptime
check_command check_snmp!-C public -o sysUpTime.0
}
在上述服务定义中的check_command域里,用"-C public"来指定SNMP共同体名称为"public",用"-o sysUpTime.0"指明要检测的OID(译者注-MIB节点值)。
如果要确保交换机上某个指定端口或接口的状态处于运行状态,可以在对象定义里加入一段定义:
define service{
use generic-service
host_name linksys-srw224p
service_description Port 1 Link Status
check_command check_snmp!-C public -o ifOperStatus.1 -r 1 -m RFC1213-MIB
}
在上例中,"-o ifOperStatus.1"指出取出交换机的端口编号为1的OID状态。"-r 1"选项是让check_snmp插件检查返回一个正常(OK)状态,如果是在SNMP查询结果中存在"1"(1说明交换机端口处于运行状态)如果没找到1就是紧急(CRITICAL)状态。"-m RFC1213-MIB"是可选的,它告诉check_snmp插件只加载"RFC1213-MIB"库而不是加载每个在系统里的MIB库,这可以加快插件运行速度。
有成百上千种信息可以通过SNMP来监控,这完全取决于你需要做什么和如果来做监控。通常可以用如下命令来寻找你想用于监控的OID节点(用你的交换机IP替换192.168.1.253):snmpwalk -v1 -c public 192.168.1.253 -m ALL .1
//监控带宽和流量
可以监控交换机或路由器的带宽利用率,用绘图并让Nagios在流量超出指定门限时报警。check_mrtgtraf插件可以实现。需要让check_mrtgtraf插件知道如何来保存MRTG数据并存入文件,以及门限等。在例子中,监控了一个Linksys交换机。MRTG日志保存于/var/lib/mrtg/192.168.1.253_1.log文件中。这就是我用于监控的服务定义,它可以用于监控带宽数据到日志文件之中...
define service{
use generic-service
host_name linksys-srw224p
service_description Port 1 Bandwidth Usage
check_command check_local_mrtgtraf!/var/lib/mrtg/192.168.1.253_1.log!AVG!1000000,2000000!5000000,5000000!10
}
在上例中,"/var/lib/mrtg/192.168.1.253_1.log"参数传给check_local_mrtgtraf命令意思是插件的MRTG日志文件在这个文件里读写,"AVG"参数的意思是取带宽的统计平均值,"1000000,200000"参数是指流入的告警门限(以字节为单位),"5000000,5000000"是输出流量紧急状态门限(以字节为单位),"10"是指如果MRTG日志如果超过10分钟没有数据返回一个紧急状态(应该每5分钟更新一次)。
配置好后/usr/local/nagios/bin/nagios ‐v /usr/local/nagios/etc/nagios.cfg检查有无错误并重启nagios服务
(4).报警设置
nagios 常见的报警方式有邮件报警、短信报警、飞信报警、QQ 报警、MSN 报警等。
1) 邮件报警
邮件报警是一种广为使用的报警方式,具有成本低廉,性能稳定等优势,默认采用系统自带的mail程序来发送邮件。
# echo test |mail –s "nagios报警" //发送测试邮件
如果能正常收到测试邮件,就进行下一步邮件报警配置
需要修改两个地方,一个是contacts.cfg文件,一个是主机定义中的contacts选项
在contacts.cfg添加联系人对象,例如:
define contact{
contact_name nagiosadmin
use generic-contact
alias NagiosAdmin
email llq; } //多个联系人用分号隔开
最后在需要邮件报警的主机定义文件中加上contacets nagiosadmin
配置文件修改完成后重启nagios 服务,如果设置正常,发生故障时nagios 就会发送邮件给指定的E-mail 信箱。
2) 飞信报警
发生故障时nagios 发送邮件到指定的信箱是一个可行的通知办法,但是对于关键的业务服务而言,这样的报警方式显然不能满足需要。对于关键业务的运行情况,我们需要在发生故障后的第一时间获取到相关信息,甚至希望能够在故障发生前就进行处理。例如对磁盘空间的监控可以在磁盘被占满之前发出预警,是我们有足够的时间进行处理。综合各种情况,最合适的关键业务报警方式无非是短信、电话两种方式。短信及时性好、花费低廉对终端要求低等各种优势,往往成为最佳的选择。对于大企业用户而言,可以使用短信网关来发送短信,对于小型企业可以购买短信猫来实现相同的功能,对于不原意花钱又想用短信报警的用户,飞信就成为最好的选择。
用飞信报警可以通过装飞信客户端或者装飞信机器人实现。
用飞信机器人实现方法:
到下载需要的库文件和飞信绿色安装文件,cp库文件到/usr/lib
自己给自己发个飞信测试一下:
fetion --mobile=15012345678 --pwd=xxxxx --to=15012345678 --msg-utf8="测试飞信" //pwd指飞信登录密码
现在飞信第一次发信时要有图形码验证(在和fetion同目录下生成),你可以把图形弄到桌面环境读取或者弄到windows机读取后再输入
修改commands.cfg 文件,为nagios 增加两个报警命令
[root@nagios objects]# vi commands.cfg //增加以下内容
define command{
command_name notify-service-by-fetion
command_line /usr/bin/fetion --mobile=15012345678 --pwd=xxxxx --to=$CONTACTPAGER$ --msg-utf8="$HOSTNAME$ $SERVICEDESC$ is $SERVICESTATE$ on $TIME$ result is $SERVICEOUTPUT$" //飞信内容可自行定义,但一些变量必不可少
}
修改contacts.cfg,增加飞信报警方式
define contact{
contact_name sa
alias system admin
host_notification_period 24x7
service_notification_period 24x7
host_notification_options d,r,
service_notification_options c,w,r
service_notification_commands notify-service-by-fetion //这里报警命令名字与上面对应
host_notification_commands notify-host-by-fetion
pager 15012345678
}
最后在需要飞信报警的主机定义文件中加上contacets sa
配置文件修改完成后重启nagios 服务,使配置文件生效就可以使用飞信报警了
本文出自 “老林的技术笔记” 博客,请务必保留此出处http://lilinqing.blog.51cto.com/1122687/483604短消息通知评论者