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将数据发往MonitorServer。MonitorServer上面运行一个nsca的daemon(默认开启5667端口),用 来接收这些数据,然后做一个简单的处理(会和nagios的service文件进行对应,将多余的监控数据排除),然后将数据进行格式的转换,发给 nagios的“外部命令文件”(默认配置为“/usr/local/nagios/var/rw/nagios.cmd”在nagios.cfg中定义 的)。该文件是一个管道文件,也是nagios主程序的一个接口(用来接收监控数据),使用cat查看该文件时候,会出来经nsca处理后的数据格式。然后nagios主程序对数据进行处理(前台展示,警报)。
一、监控服务器端的安装:
环境:安装nagios并正常运行
1、配置Nagios
1)修改配置文件nagios.cfg
- check_external_commands = 1 // 检测外部命令
- command_check_interval = -1 //随时检测外部命令
2)添加模板
- # vim template.cfg
- define service{
- name passive_service
- use generic-service
- max_check_attempts 3
- active_checks_enabled 0 // 关闭主动检测
- passive_checks_enabled 1 // 打开被动监测
- normal_check_interval 5
- retry_check_interval 1
- notifications_enabled 1
- notification_interval 5
- notification_period 24x7
- contact_groups admins
- register 0
- }
3)定义一个command
- define command{
- command_name check_dummy
- command_line /usr/local/nagios/libexec/check_dummy $ARG$
- }
该command对被监控机发过来的数据进行处理,check_dummy只能处理4个参数(0、1、2、其他数字)
- [root@vps /]# /usr/local/nagios/libexec/check_dummy 0
- OK
- [root@vps /]# /usr/local/nagios/libexec/check_dummy 1
- WARNING
- [root@vps /]# /usr/local/nagios/libexec/check_dummy 2
- CRITICAL
- [root@vps /]# /usr/local/nagios/libexec/check_dummy 55
- UNKNOWN: Status 55 is not a supported error state
4个参数可以代表4种状态,而监测服务一般只需要两种状态(running,sotp),硬件三种(OK warning critical)
4)定义一个本机的被动监控service:
用于测试本机的
- define service{
- use passive_service
- host_name localhost #本机被动监控
- service_description nsca-test
- check_command check_dummy!0
- notifications_enabled 1
- }
5)定义一台远程监控的主机和主机上的服务: 10.15.62.199
- define host{
- Use linux-server
- host_name 10.15.62.199
- alias 10.15.62.199
- address 10.15.62.199
- }
- define service{
- use passive_service
- host_name 10.15.62.199
- service_description LoadAVG
- check_command service-is-stale //定义变被动检测的执行命令
- notifications_enabled 1
- check_freshness 1 //打开强制刷新检测
- freshness_threshold 360 //强制刷新时间为6分钟
- }
- 定义自主检测命令
- define command{
- command_name service-is-stale
- command_line $USER1$/staleservice.sh
- }
- 定义脚本
- #vim /usr/local/nagios/libexec/staleservice.sh
- #!/bin/sh
- /bin/echo "CRITICAL: Service results are stale!"
- exit 2
2、下载并安装nsca:
- #wget http://nchc.dl.sourceforge.net/project/nagios/nsca-2.x/nsca-2.9.1/nsca-2.9.1.tar.gz
- #tar zxf nsca-2.9.1.tar.gz
- #cd nsca-2.9.1
- #./configure
- #make all
以上步骤检查正确执行以后:
1)、会在src目录下生成两个程序 nsca send_nsca(主程序)
2)、sample-config中会有nsca.cfg与send_nsca.cfg(配置文件)
3)、当前目录下会有一个init-script(启动脚本)
- #cp src/nsca /usr/local/nagios/bin/ 复制主程序
- #cp sample-config/nsca.cfg /usr/local/nagios/etc 复制主配置文件
- #chown nagios.nagios /usr/local/nagios/bin/nsca 修改属组属主
- #chown nagios.nagios /usr/local/nagios/etc/nsca.cfg
- #cp init-script /etc/init.d/nsca
- #chmod a+x /etc/init.d/nsca
- #chkconfig --add nsca
至此nsca安装完成,下面需要更改一些配置选项: (nsca.cfg)
- #vim /usr/local/nagios/etc/nsca.cfg
- server_address=10.15.62.178 (对外表现的IP)客户端向NSCA发送被动监测数据时,保证数据是从这块网卡上过的
- debug=1 (debug选项即log选项,写入message)
- aggregate_writes=1 (能够支持更大的监控量,建议开启)
- max_packet_age=60 (数据包过期时间,默认30s,但是考虑到网络因素建议设为60s)
- password=123456 //和被监控端的设置一致
3、检查配置文件是否正确:
- /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
4、启动nagios和nsca服务
- #service nagios start
- #service nsca start
5、测试发送数据给被动监测服务:
测试定义的本机的被监控服务。
- # 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服务,其中localhost是nsca监听的主机名,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
- #wget http://nchc.dl.sourceforge.net/project/nagios/nsca-2.x/nsca-2.9.1/nsca-2.9.1.tar.gz
- #tar -zxf nsca-2.9.1.tar.gz
- #cd nsca-2.9.1
- #./configure
- #make all
不需要启动nsca服务 只需要用到 send_nsca命令和send_nsca.cfg配置文件
2)修改配置文件
- # vim /usr/local/src/nsca-2.7.2/sample-config/send_nsca.cfg
- password=123456 密码设置为和nagios服务器端的一致
3)发送数据测试
- # 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
- #!/bin/sh
- set -e
- host_name=$1
- svc_name=$2
- Load_ARG="-w 5 -c 10"
- #echo "$host_name\t$svc_name\n"
- case "$2" in
- check_load)
- output=`/usr/local/nagios/libexec/$2 $Load_ARG`
- status=`echo $?`
- #echo $output
- echo "$host_name LoadAVG $status $output">/tmp/nsca.out
- cat /tmp/nsca.out | /usr/local/nagios/bin/send_nsca -H 10.15.62.178 -c /usr/local/nagios/etc/send_nsca.cfg
- ;;
- esac
把脚本放在/home/bin/nsca.sh
制定任务计划
- #crontab -e
- */5 * * * * /bin/sh /home/bin/nsca.sh 10.15.62.199 check_load
添加这一行 每五分钟执行一次
转载于:https://blog.51cto.com/5122542/1037600