Chinaunix首页 | 论坛 | 博客
  • 博客访问: 78847
  • 博文数量: 28
  • 博客积分: 579
  • 博客等级: 中士
  • 技术积分: 245
  • 用 户 组: 普通用户
  • 注册时间: 2011-09-30 18:17
文章分类

全部博文(28)

文章存档

2012年(1)

2011年(27)

我的朋友

分类: 系统运维

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] //
主动监控开关(10)
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服务(IIS3w网站服务)状态,并在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  ,,.
 
注意: 不要大于 24*60.  
 
: -l 60,90,95,120,90,95  显示最后60分钟和120分钟waring90%,critical95%的平均cpuload
 
UPTIME           显示开机运行时间
 
USEDDISKSPACE  显示磁盘空间信息
 
:-l c 显示当前c盘空间使用信息
     -l d -w 90 -c 95 
显示d盘设waring90%,critical95%时的空间使用信息
 
MEMUSE 显示内存使用情况,后可跟-w  -c指定报警值,默认为5分钟内平均值
 
SERVICESTATE 检查一个或多个服务状态
  -l ,,,...
 
-d SHOWALL 可以查看正在运行有服务
 
PROCSTATE 检查进程状态
-l <
进程名字
 
COUNTER   检查一些性能计数
       
用法:
        -l "
\\ object>\\counter","
        
参数用于打印输出一个需要浮点参数的命令 ,如果 不包含 "%%", 它会做为一个标签
 
:  "Paging file usage is %%.2f %%%%"
  "%%.f %%%% paging file used."
 
INSTANCES   检查性能对象计数 
用法: check_nt -H -p -v INSTANCES -l
   
是一个windows性能对象计数 (eg. Process),
 
  如果它是两个词,它应该引号括起来,返回的结果将是一个逗号分隔的对象 


check_nt
用法举例:
check_nt -H 192.168.1.2 -p 12489 -v CPULOAD -l 60,90,95  //
显示最后60分钟waring90%,critical95%时的平均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盘设waring90%,critical95%时的空间使用信息
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.2IIS网站服务运行情况
check_nt -H 192.168.1.2 -p 12489
s 7758521 v CLIENTVERSION  //查看192.168.1.2nsclient++版本
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"指出取出交换机的端口编号为1OID状态。"-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短消息通知评论者

阅读(1987) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~