Nagios的插件-nsca 

前言:

随着服务器的不断增加,nagios监控机已经有点不堪负重,故尝试使用被动模式以承担更大的监测量,同时也提高了监测的灵敏性和监测的方便性。

NSCA是一个可在远程Linux/Unix主机上执行强制检测并将结果传给Nagios守护进程的外部构件包

被动模式的监控原理:
 相比与主动模式中服务器主动去被监控机上轮询获取监控数据的方式,被动模式则是在被监控机上面通过插件或脚本获取监控数据,然后将数据通过 send_nsca发往监控机,最后监控机通过Nsca接收并解析数据,并传递给Nagios。这样做的一个很大的优势就是将除去处理数据的其他工作都放 在了被监控机上面(包括了数据的传输),这样就避免了被监控机数量大时,一次轮询时间过长而导致监控反应延迟,这也是被动模式能承担更大监控量的关键

 

NSCA的组成:
 Nsca (安装在MonitorServer上,用来接收并解析MonitorClient发来的监控数据,传递给nagios
 Send_nsca(安装在MonitorClient上,用来发送监控数据。)

 

Nsca工作过程如下:
 在MonitorClient上面,使用nagios-plugins提供的插件,得出监控数据,然后将数据存为一个文件,利用输入重定向,通过 send_nsca将数据发往MonitorServerMonitorServer上面运行一个nscadaemon(默认开启5667端口),用 来接收这些数据,然后做一个简单的处理(会和nagiosservice文件进行对应,将多余的监控数据排除),然后将数据进行格式的转换,发给 nagios外部命令文件(默认配置为“/usr/local/nagios/var/rw/nagios.cmd”nagios.cfg中定义 的)。该文件是一个管道文件,也是nagios主程序的一个接口(用来接收监控数据),使用cat查看该文件时候,会出来经nsca处理后的数据格式。然后nagios主程序对数据进行处理(前台展示,警报)。 

一、监控服务器端的安装:

环境:安装nagios并正常运行 

1、配置Nagios 

1)修改配置文件nagios.cfg

 
   
  1. check_external_commands = 1 // 检测外部命令 
  2. command_check_interval = -1 //随时检测外部命令

2添加模板

 
  1. # vim  template.cfg 
  2. define service{
  3. name             passive_service 
  4. use              generic-service 
  5. max_check_attempts     3 
  6.              active_checks_enabled    0 // 关闭主动检测 
  7. passive_checks_enabled   1 // 打开被动监测 
  8. normal_check_interval     5 
  9. retry_check_interval       1 
  10. notifications_enabled      1 
  11. notification_interval        5 
  12. notification_period         24x7 
  13. contact_groups         admins 
  14.      register                0 

3)定义一个command

 
   
  1. define command{ 
  2.           command_name     check_dummy 
  3.           command_line       /usr/local/nagios/libexec/check_dummy $ARG$ 

该command对被监控机发过来的数据进行处理,check_dummy只能处理4个参数(012、其他数字)

 

 
   
  1. [root@vps /]# /usr/local/nagios/libexec/check_dummy 0 
  2. OK 
  3. [root@vps /]# /usr/local/nagios/libexec/check_dummy 1 
  4. WARNING 
  5. [root@vps /]# /usr/local/nagios/libexec/check_dummy 2 
  6. CRITICAL 
  7. [root@vps /]# /usr/local/nagios/libexec/check_dummy 55 
  8. UNKNOWN: Status 55 is not a supported error state 

4个参数可以代表4种状态,而监测服务一般只需要两种状态(runningsotp),硬件三种(OK warning critical

4定义一个本机的被动监控service

    用于测试本机的

 
   
  1. define service{ 
  2.        use                    passive_service 
  3.        host_name              localhost #本机被动监控 
  4.        service_description    nsca-test 
  5.        check_command      check_dummy!0 
  6.        notifications_enabled  1 

5定义一台远程监控的主机和主机上的服务: 10.15.62.199 

 

 
   
  1. define host{ 
  2.         Use            linux-server 
  3.         host_name   10.15.62.199 
  4.         alias        10.15.62.199 
  5.         address     10.15.62.199 
  6. define service{ 
  7.        use                   passive_service 
  8.        host_name             10.15.62.199 
  9.        service_description      LoadAVG 
  10.        check_command        service-is-stale //定义变被动检测的执行命令 
  11.        notifications_enabled    1 
  12.        check_freshness        1      //打开强制刷新检测 
  13.        freshness_threshold     360     //强制刷新时间为6分钟 
  14. 定义自主检测命令 
  15. define command{ 
  16. command_name      service-is-stale 
  17. command_line       $USER1$/staleservice.sh 
  18. 定义脚本 
  19. #vim /usr/local/nagios/libexec/staleservice.sh 
  20. #!/bin/sh 
  21. /bin/echo "CRITICAL: Service results are stale!" 
  22. exit 2 

2、下载并安装nsca:

 
   
  1. #wget http://nchc.dl.sourceforge.net/project/nagios/nsca-2.x/nsca-2.9.1/nsca-2.9.1.tar.gz 
  2. #tar zxf nsca-2.9.1.tar.gz 
  3. #cd nsca-2.9.1 
  4. #./configure 
  5. #make all 

以上步骤检查正确执行以后:
1)、会在src目录下生成两个程序 nsca send_nsca(主程序)
2)sample-config中会有nsca.cfgsend_nsca.cfg(配置文件)
3)、当前目录下会有一个init-script(启动脚本)

 
   
  1. #cp src/nsca /usr/local/nagios/bin/ 复制主程序 
  2. #cp sample-config/nsca.cfg /usr/local/nagios/etc 复制主配置文件  
  3. #chown nagios.nagios /usr/local/nagios/bin/nsca 修改属组属主  
  4. #chown nagios.nagios /usr/local/nagios/etc/nsca.cfg 
  5. #cp init-script /etc/init.d/nsca  
  6. #chmod a+x /etc/init.d/nsca 
  7. #chkconfig --add nsca 

至此nsca安装完成,下面需要更改一些配置选项: (nsca.cfg

 

 
   
  1. #vim /usr/local/nagios/etc/nsca.cfg 
  2. server_address=10.15.62.178 (对外表现的IP)客户端向NSCA发送被动监测数据时,保证数据是从这块网卡上过的 
  3. debug=1 (debug选项即log选项,写入message) 
  4. aggregate_writes=1 (能够支持更大的监控量,建议开启) 
  5. max_packet_age=60 (数据包过期时间,默认30s,但是考虑到网络因素建议设为60s) 
  6. password=123456             //和被监控端的设置一致 

3、检查配置文件是否正确:

 
   
  1. /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg 

4、启动nagiosnsca服务

 
   
  1. #service nagios start 
  2. #service nsca start 

5、测试发送数据给被动监测服务:

测试定义的本机的被监控服务。

 
   
  1. echo "localhost;nsca-test;0;testOK"|./src/send_nsca -H 10.15.62.178 -d ";" -c /usr/local/src/nsca-2.7.2/sample-config/send_nsca.cfg 

通过管道将数据传给send_nsca程序,send nsca再将数据发送到nsca服务,其中localhostnsca监听的主机名,nsca-test是Nagios中定义的被动监测服务的名字,0告诉nsca正常,testOK是附加信息,-H IP 是nsca配置文件中server_address的值,-d 分隔符 默认是【tab】键 -c 是send_nsca的配置文件。

web端的显示如下:

二、被监控端的配置(10.15.62.199)

被监控的主机和服务一定要现在监控端定义

环境:安装nagios-plugins用于收集被监控的数据 (不是必须的,也可以自己写脚本)

send-nsca 将nagios-plugins插件收集的数据传送给监控端的nsca主程序 

1安装send-nsca 

 
   
  1. #wget http://nchc.dl.sourceforge.net/project/nagios/nsca-2.x/nsca-2.9.1/nsca-2.9.1.tar.gz 
  2. #tar -zxf nsca-2.9.1.tar.gz 
  3. #cd nsca-2.9.1 
  4. #./configure 
  5. #make all 

不需要启动nsca服务 只需要用到 send_nsca命令和send_nsca.cfg配置文件 

2)修改配置文件  

 
   
  1. # vim /usr/local/src/nsca-2.7.2/sample-config/send_nsca.cfg  
  2.     password=123456 密码设置为和nagios服务器端的一致 

3发送数据测试

 
   
  1. # echo "10.15.62.199;LoadAVG;0;testOK" | ./src/send_nsca -H 10.15.62.178 -d ";" -c /usr/local/src/nsca-2.7.2/sample-config/send_nsca.cfg

10.15.62.199:是监控端定义好的主机名 LoadAVG:是监控端定义好的服务名  0 :是状态 

testOK :是额外信息 

浏览器页面显示:

4编写脚本制定任务计划

编写了一个监控脚本 利用nagios插件的 check_load 

 
   
  1. #!/bin/sh 
  2. set -e 
  3. host_name=$1 
  4. svc_name=$2 
  5. Load_ARG="-w 5 -c 10" 
  6. #echo "$host_name\t$svc_name\n" 
  7. case "$2" in 
  8. check_load) 
  9. output=`/usr/local/nagios/libexec/$2 $Load_ARG` 
  10. status=`echo $?` 
  11. #echo $output 
  12. echo "$host_name LoadAVG $status $output">/tmp/nsca.out 
  13. cat /tmp/nsca.out | /usr/local/nagios/bin/send_nsca -H 10.15.62.178 -c /usr/local/nagios/etc/send_nsca.cfg 
  14. ;; 
  15. esac 

把脚本放在/home/bin/nsca.sh

制定任务计划

 
   
  1. #crontab -e 
  2. */5 * * * * /bin/sh /home/bin/nsca.sh 10.15.62.199 check_load 

 添加这一行 每五分钟执行一次