九、Nagios被动模式
9.1 被动模式工作原理介绍:
由于服务器数量的增加,nagios以往的主动监测模式不再适合,故变更为被动模式,以承担更大的监测量,同时也提高了监测的灵敏性和监测的方便性。
相比与主动模式中服务器主动去被监控机上轮询获取监控数据的方式,被动模式则是在被监控机上面通过插件获取监控数据,然后将数据发往监控机,最后监控机对监控数据处理。这样做的一个很大的优势就是将处理数据的其他工作都放在了被监控机上面(包括了数据的传输),这样就避免了被监控机数量大时,一次轮询时间过长而导致监控反应延迟,这也是被动模式能承担更大监控量的关键。
9.2 技术细节:
被监控机 (MC:Monitor Client)
监控机 (MS:Monitor Server)
Nagios (监控主程序,不多说,装在MS上)
Nsca (安装在MS上,用来接收并解析MC发来的监控数据,传递给nagios)
Send_nsca (安装在MC上,用来发送监控数据。)
Nagios-Plugins (安装在MS和MC上,nagios的检测插件)
9.3 过程描述如下:
在MC上面,使用nagios-plugins提供的插件,得出监控数据,然后将数据存为一个文件,利用输入重定向,通过send_nsca将数据发往MS。MS上面运行一个nsca的daemon(默认开启5667端口),用来接收这些数据,然后做一个简单的处理(会和nagios的service文件进行对应,将多余的监控数据排除),然后将数据进行格式的转换,发给nagios的“外部命令文件”(默认配置为“/usr/local/nagios/var/rw/nagios.cmd”在nagios.cfg中定义的)该文件是一个管道文件,也是nagios主程序的一个接口(用来接收监控数据),使用cat查看该文件时候,会出来经nsca处理后的数据格式。然后nagios主程序对数据进行处理(前台展示,警报)。
9.4 实现过程
9.4.1 MS端安装配置:
-
9.4.1.1 安装nagios,安装步骤不再赘述:
-
注意:本文是被动模式的实现,而不是分布式的实现,仅有一台Nagios;
-
9.4.1.2 更改配置文件--nagios.cfg
-
check_external_commands = 1 # 配置nagios检测外部命令功能,默认已打开
-
command_check_interval = -1 # 外部命令检查的间隔时间,根据情况修改
-
其他修改与常规一样
-
9.4.1.3 添加模板,修改配置文件 template.cfg,在最后,添加如下内容:
-
define service{
-
name passive_service
-
use generic-service
-
max_check_attempts 1
-
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 admin
-
register 0 (必须)
-
}
-
9.4.1.4 注意一点,被动模式检测时,MS端实际上是对MC发来的数据进行处理,即字符串处理,
-
这与主动模式是不同的。所以要添加一个command;
-
define command{
-
command_name check_dummy
-
command_line /usr/local/nagios/libexec/check_dummy $ARG1$
-
}
-
Check_dummy插件可以简单的理解成一个翻译程序,只能处理4个参数:
-
[root@bjcenter objects]# /usr/local/nagios/libexec/check_dummy 0
-
OK
-
[root@bjcenter objects]# /usr/local/nagios/libexec/check_dummy 1
-
WARNING
-
[root@bjcenter objects]# /usr/local/nagios/libexec/check_dummy 2
-
CRITICAL
-
[root@bjcenter objects]# /usr/local/nagios/libexec/check_dummy 3
-
UNKNOWN
-
虽然只有4个参数,但是足够我们进行监测了,因为4个参数即可代表4个状态,而监测一般服务2个状态就够了 Running 和 Stoped,而硬件资源包括(OK warning critical)三个状态。
-
9.4.1.5 再就是比较重要的 service 文件,两个示例如下:
-
define service {
-
use passive_service
-
hostgroup_name all_hosts
-
service_description Load # 确保与MC端传送过来的服务名称一致
-
check_command check_dummy!0
-
notification_options w,u,c,r
-
}
-
define service {
-
use passive_service
-
hostgroup_name all_hosts
-
service_description Ssh # 确保与MC端传送过来的服务名称一致
-
check_command check_dummy!0
-
notification_options w,c,r
-
contact_groups admins
-
}
-
注:这里贴出两个例子是不同的,一个是服务器本身的资源使用的监控,一个是用户安装的服务的监控。资源使用状况有(OK Warning Critical),而一般进程则只有(Running Stoped)2个状态,针对不同的情况设置不同的报警级别(重要)。
9.4.2 Nsca与Send_nsca
Nsca与Send_nsca就是一个C/S结构,Send_nsca是一个程序,负责将收集到的监控数据按照一定的格式发往Server端,即Nsca守护进程。Nsca是一个daemon,在收到由Send_nsca发来的数据后,对数据进行跟基本的处理,然后交给nagios。
-
9.4.2.1 Nsca安装:
-
# wget http://cdnetworks-kr-2.dl.sourceforge.net/project/nagios/nsca-2.x/nsca-2.7.2/nsca-2.7.2.tar.gz
-
# tar –zxf nsca-2.7.2.tar.gz
-
# cd nsca-2.7.2
-
# ./configure && make all
-
# cp src/nsca /usr/local/nagios/bin/ # cp主程序文件至nagios主程序目录下;
-
# cp sample-config/nsca.cfg /usr/local/nagios/etc # cp配置文件至nagios配置文件目录下;
-
# 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 # 添加至服务列表;
-
9.4.2.2 nsca配置(nsca.cfg):
-
server_address=xxx.xxx.xxx.xxx # 这里务必使用对外表现的IP,即MS_IP;
-
debug=1 # debug选项即log选项,写入message;
-
aggregate_writes=1 # 能够支持更大的监控量,建议开启;
-
max_packet_age=60 # 数据包过期时间,默认30s,但是考虑到网 络因素建议设为60s;
-
password=xxxxxxx # 密码,最基础的加密方式,也可以不设置;
-
9.4.2 MC端安装配置:
-
9.4.2.1 Nagios-Plugins安装,安装过程不再赘述:
-
9.4.2.2 复制Send_nsca与send_nsca.cfg到MC端:
-
# cp src/send_nsca /usr/local/nagios/bin/
-
# cp sample-config/send_nsca.cfg /usr/local/nagios/etc
-
9.4.2.2 在被监控端定义监控脚本:
-
设计思路如下:
-
1)下端机器批量安装的脚本
-
#!/bin/bash
-
mkdir -p /usr/local/nagios_nsca/libexec
-
mkdir -p /usr/local/nagios_nsca/nagios_check
-
mkdir -p /home/sysop/script
-
status=1
-
until [ "$status" -eq "0" ]
-
do
-
wget http://url/libexec.tar.gz
-
status="$?"
-
done
-
tar -zxf libexec.tar.gz -C /usr/local/nagios_nsca/libexec/
-
rm -rf libexec.tar.gz
-
mv /usr/local/nagios_nsca/libexec/commen.sh /usr/local/nagios_nsca/nagios_check/
-
mv /usr/local/nagios_nsca/libexec/send_nsca /usr/local/bin/
-
mv /usr/local/nagios_nsca/libexec/send_nsca.cfg /etc/
-
mv /usr/local/nagios_nsca/libexec/nagios_check.sh /home/sysop/script
-
echo "*/5 * * * * /bin/bash /home/sysop/script/nagios_check.sh">>/var/spool/cron/root
-
脚本解析:
-
首先将所有与监控相关的文件,规划在一个目录中:/usr/local/nagios_nsca
-
Libexec 主要是存放nagios-plugin提供的插件(这里当然仅仅放着用得到的)
-
Nagios_check 存放自定义的一些检测脚本。而基本调用脚本nagios_check.sh可以理解成一个agent代理,由cronta每5分钟执行,然后去执行nagios_check下面所有的脚本,将输出进行处理,并重定向至一个文件,最后调用send_nsca将文件内容发往MS。
-
2) 基本调用脚本nagios_check.sh
-
#!/bin/bash
-
NSER=114.255.xx.xx
-
CHECK_PATH="/usr/local/nagios_nsca/nagios_check"
-
RESULT_FILE="/tmp/nagios_result"
-
/bin/bash "$CHECK_PATH"/*.sh>/tmp/nagios_result
-
/usr/local/bin/send_nsca -to 60 -H "$NSER" -c /etc/send_nsca.cfg <"$RESULT_FILE"
-
3)基础监控脚本 commen.sh
-
#!/bin/bash
-
#Naigos Commen Check Script
-
#Include Partition Load Swap Ssh
-
#
-
#By Li Zhiyuan
-
######################################
-
hostname=$(hostname)
-
Plugin_path="/usr/local/nagios_nsca/libexec"
-
#1. Partition
-
#Get Partition List
-
Partitions=$(df -h|awk -F'% ' '{print $2}'|sed '1d'|grep -v '^$|boot|shm|mnt')
-
for partition in $Partitions
-
do
-
result=$($Plugin_path/check_disk -w 10% -c 5% -p $partition)
-
status=$?
-
output=$(echo "$result"|awk -F';' '{print $1}')
-
echo -e "$hostnametPartition_$partitiont$statust$output"
-
done
-
#2.Load
-
result=$($Plugin_path/check_load -w 15,10,5 -c 30,25,20)
-
status=$?
-
output=$(echo "$result"|awk -F'|' '{print $1}')
-
echo -e "$hostnametLoadt$statust$output"
-
#3.Swap
-
result=$($Plugin_path/check_swap -w 50% -c 20%)
-
status=$?
-
output=$(echo "$result"|awk -F'|' '{print $1}')
-
echo -e "$hostnametSwapt$statust$output"
-
#4.Ssh
-
result=$(/etc/init.d/sshd status)
-
status=$?
-
echo -e "$hostnametSsht$statust$result"
-
脚本解析:
-
1)nagios_check.sh中定义了CHECK_PATH变量,并且后面直接执行该目录下所有的.sh(检
-
测脚本),这样方便后期新监测功能的添加。
-
2)commen.sh中注意一点是输出的格式:
-
HOSTNAME [TAB]SERVICE_DESCRIBE[TAB]STATUS[TAB]OUTPUT
-
主机名 服务描述 状态码 附加输出
-
3)主机名必须与nagios端定义的hostname相同;
-
4)服务描述必须与nagios端定义的service配置文件内容的相同;
-
5)状态码(0 1 2 3 4)主要是用来给check_dummy翻译使用;
-
6)附加输出可以理解为对监控结果的一个简单描述,这个格式是由 nsca插件决定的
9.5 写在最后:
9.5.1 nagios_check脚本可以改进,即可以再自定义时间内,如每10秒检测一次系统,然后检测
输出文件变化情况,然后决定是否发送输出文件。好处是,可以及时响应服务器状态异常,
而不用等待5分钟的“自身轮询”。可以理解成,每5分钟一个常规发送,每10秒一个主
动check。
9.5.2 MS端的nsca进程可能会出现问题,最少我出现了,即长时间运行以后,nsca进程出现假
死现象,进程存在,但是已经不处理数据了。解决方法即是添加cron任务,在每天晚上0
点,定时重启nsca服务。
十、分布式监控
10.1 分布式监控原理:
在分布服务器完成一次服务检测后,它会执行所定义的强迫型服务处理命令,就是那个ocsp_command变量指向的命令。在本例中指向是/usr/local/nagios/libexec/eventhandlers/submit_check_result脚本。注意在submit_check_result命令中将四个信息传给了脚本:服务所绑定的主机名、服务描述、服务检测返回结果以及服务检测的输出正文;该submit_check_result脚本将服务检测信息(主机名、服务描述、服务检测结果和输出正文)导入到send_nsca客户端程序;由send_nsca程序传送服务检测信息到位于中心服务器上的nsca守护进程;位于中心服务器上的nsca守护进程接收到服务检测信息后写入到外部命令文件里让Nagios服务来后续处理;位于中心服务器的Nagios服务进程读入外部命令文件并处理这些来自于远程分布式服务器上的强制服务检测信息。
10.2 Nagios分布式监控架构
10.3 分布式监控服务器安装配置
10.3.1 中心服务器配置
-
10.3.1.1 步骤概述:
-
a)中心服务器安装nagios并配置Web接口(可选的,但推荐这么做);
-
b)下载安装nsca;
-
c)将中心服务器上的enable_notifications域设置为1,这将使能通知功能(可选的,但推荐这么做);
-
d)将中心服务器的自主服务检测功能关闭(可选的,但推荐这么做-见下面的提示);
-
e)使能中心服务器的外部命令检查项(必须的);
-
f)使能中心服务器的强制服务检测(必须的);
-
10.3.1.2 步骤详述:
-
1) 安装配置好nagios服务器并配置Web接口--安装步骤不再赘述;
-
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
-
3)以上步骤检查正确执行以后:
-
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 #修改nsca属组属主
-
#chown nagios.nagios /usr/local/nagios/etc/nsca.cfg #修改nsca.cfg属组属主
-
#cp init-script /etc/init.d/nsca #复制nsca启动脚本至init.d下
-
#chmod a+x /etc/init.d/nsca #添加nsca执行权限
-
#chkconfig --add nsca #添加nsca至服务列表
-
4) 添加中心服务器监控密码
-
#vim /usr/local/nagios/etc/nsca.cfg
-
password=123456 #此处和分布监控服务器密码一致
-
5) 修改nagios主配置文件
-
#vim /usr/local/nagios/etc/nagios.cfg
-
enable_notifications=1 # 打开通知功能,使能直接送出任何通知信息;
-
execute_service_checks=0 # 关闭自主服务检测功能;
-
check_external_commands=1 # 配置nagios检测外部命令功能;
-
accept_passive_service_checks=1 # 配置接受强制服务检测的结果;
-
accept_passive_host_checks=1 # 配置接受强制主机检测的结果;
-
6) 打开nsca监听的5667端口(如果需要的话)
-
防火墙里面开启5667端口
-
iptables -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m multiport --dport 5667 -j
-
ACCEPT
-
7) 定义主机和服务
-
define host {
-
use linux-server
-
host_name 10.15.62.199
-
address 10.15.62.199
-
}
-
-
define service{
-
use generic-service
-
host_name 10.15.62.199
-
service_description check_s8_speed
-
check_command service-is-stale
-
check_freshness 1 # 打开针刷新检测功能
-
freshness_threshold 100 # 刷新检测频率
-
active_checks_enabled 0 # 关闭自主检测功能
-
passive_checks_enabled 1 # 打开被动检测功能
-
max_check_attempts 3 #最大检测次数3次
-
normal_check_interval 1 #每隔1分钟检测一次
-
retry_check_interval 1 #软状态重试时间1分钟
-
}
-
8) 定义服务主动检测的命令
-
define command{
-
command_name service-is-stale
-
command_line $USER1$/staleservice.sh
-
}
-
9) 定义命令的脚本并赋予执行权限
-
# vim /usr/local/nagios/libexec/staleservice.sh
-
SHELL脚本内容如下:
-
#!/bin/sh
-
/bin/echo "CRITICAL: Service results are stale!"
-
exit 2
-
# chmod a+x /usr/local/nagios/libexec/staleservice.sh
-
10) 检查nagios配置文件并启动nagios和nsca服务
-
# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
-
# service nagios start
-
# service nsca start
10.3.2 分布服务器安装配置
-
10.3.2.1 安装Nagios,不需要安装Web接口;---安装过程不再赘述;
-
10.3.2.2 Nsca安装
-
下载nsca-2.7.2.tar.gz至本地后:
-
#tar zxf nsca-2.7.2.tar.gz
-
#cd nsca-2.7.2
-
#./configure && make all
-
以上步骤检查正确执行以后:
-
1)、会在src目录下生成两个程序 nsca send_nsca(主程序)
-
2)、sample-config中会有nsca.cfg与send_nsca.cfg(配置文件)
-
# cp src/send_nsca /usr/local/nagios/bin/
-
# cp sample-config/send_nsca.cfg /usr/local/nagios/etc/
-
# chown nagios.nagios /usr/local/nagios/bin/send_nsca
-
# chown nagios.nagios /usr/local/nagios/etc/send_nsca.cfg
-
10.3.2.3 添加中心服务器监控密码
-
# vim /usr/local/nagios/etc/send_nsca.cfg
-
password=123456 #此处和中心服务器密码一致
-
10.3.2.4 编辑nagios.cfg配置文件
-
enable_notifications=0 #阻止它直接送出任何通知信息;
-
obsess_over_services=1 #分布式服务器被配置为强迫型服务(obsess over services)类型;
-
ocsp_command=submit_check_result #定义一个强迫型服务处理(ocsp)命令;
-
10.3.2.5 在分布式服务器的对象配置文件里只定义那些由它直接监控的主机与服务的对象(与中心服
-
务器定义监控主机和服务对象一致);
-
定义监控主机及服务对象示例:
-
define host {
-
use linux-server
-
host_name 10.15.62.199
-
address 10.15.62.199
-
}
-
-
define service{
-
use generic-service
-
host_name 10.15.62.199
-
service_description check_s8_speed //与中心服务器定义一致
-
check_command check-host-alive
-
check_period 24x7 //定义检测周期
-
max_check_attempts 3 //最大检测次数3次
-
normal_check_interval 1 //每隔1分钟检测一次
-
retry_check_interval 1 //软状态重试时间1分钟
-
}
-
10.3.2.6 在command.cfg文件中定义submit_check_result命令:
-
define command{
-
command_name submit_check_result
-
command_line /usr/local/nagios/libexec/eventhandlers/submit_check_result $HOSTNAME$ '$SERVICEDESC$' $SERVICESTATE$ '$SERVICEOUTPUT$'
-
}
-
10.3.2.7 新建/usr/local/nagios/libexec/eventhandlers目录并在该目录下新建脚本文件
-
submit_check_result,submit_check_result的SHELL脚本的内容如下(用中心服务器IP地址替
-
换里面的central_server):
-
#!/bin/sh
-
# Arguments:
-
# $1 = host_name (Short name of host that the service is
-
# associated with)
-
# $2 = svc_description (Description of the service)
-
# $3 = state_string (A string representing the status of
-
# the given service - "OK", "WARNING", "CRITICAL"
-
# or "UNKNOWN")
-
# $4 = plugin_output (A text string that should be used
-
# as the plugin output for the service checks)
-
#
-
# Convert the state string to the corresponding return code
-
return_code=-1
-
-
case "$3" in
-
OK)
-
return_code=0
-
;;
-
WARNING)
-
return_code=1
-
;;
-
CRITICAL)
-
return_code=2
-
;;
-
UNKNOWN)
-
return_code=-1
-
;;
-
esac
-
# pipe the service check info into the send_nsca program, which
-
# in turn transmits the data to the nsca daemon on the central
-
# monitoring server
-
/usr/bin/printf "%st%st%st%sn" "$1" "$2" "$return_code" "$4" | /usr/local/nagios/bin/send_nsca central_server -c /usr/local/nagios/etc/send_nsca.cfg
-
#chmod +x /usr/local/nagios/libexec/eventhandlers/submit_check_result #添加脚本执行权限
-
#chown -R nagios.nagios /usr/local/nagios/libexec/eventhandlers #修改/eventhandlers目录属组和属主
-
10.3.2.8 检查nagios配置文件并重启nagios服务
-
#/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
-
#service nagios restart
十一、安装配置nconf
11.1 首先对mysql数据库进行定义
-
#service mysqld start #启动mysql
-
#mysqladmin -uroot -p password 'RedHat'; #给mysql添加管理员密码
-
#mysql –uroot –p #进入mysql数据库
-
mysql> create database nconf; #创建nconf数据库
-
mysql> grant all privileges on nconf.* to nconf@localhost identified by 'nconf'; #创建nconf用户并赋权
-
mysql> flush privileges; #刷新特权表
-
mysql>quit
11.2 安装nconf
-
#tar -zxf nconf-1.2.6-0.tgz -C /var/www/html/ #解压nconf到指定web目录下
-
#cd /var/www/html/nconf
-
#chown -R apache.apache config/ temp/ static_cfg/ output/ #给相关文件赋予权限
11.3 SELINUX安全上下文
-
#chcon -R -t httpd_sys_content_t /var/www/html/nconf/
-
#chcon -t httpd_sys_script_exec_t /var/www/html/nconf/bin/nagios #修改文件的安全上下文
-
Ps:如果您的SELinux已经关闭,忽略此步操作
11.4 http://nagios监控端的IP/nconf:
图-1 在web页面按照安装提示一步步安装
图-2 进入nconf安装界面
图-3 #使用刚才创建的nconf数据库和nconf数据库用户/密码
图-4 #成功连接mysql数据库
图-5 一般配置界面
图-6 #设置nconf管理员密码,此时默认登录用户为admin
图-7 #网页安装完成
11.5 重新刷新页面,输入admin/您设置的密码,进入nconf页面:
图-8 安装完成后nconf的主页面
点击Generate Nagios config尝试生成配置文件,以测试是否与nagios成功关联
到此nconf就安装完成了!
11.6 NConf 使用方法:
11.6.1 查看这两个文件是否有执行权限
-
#chmod +x /var/www/html/nconf/bin/generate_config.pl #用来将web页面的配置设置转化成为nagios配置文件的脚本,其需要apache用户有可执行权限
-
#chmod +x /usr/local/nagios/bin/nagios #给other执行权限,用来检测nagios配置文件是否有语法错误
11.6.2 使用流程:
注意:nconf在【Generate Nagios config】将您的生成nagios配置文件是/var/www/html/nconf/output/NagiosConfig.tgz,而并非直接导入nagios中。
-
1) 在web页面对监控服务和主机配置完毕,点击【Generate Nagios config】:
-
2) deploy_local.sh是nconf自带配置文件导入脚本:
-
#chmod +x /var/www/html/nconf/ADD-ONS/deploy_local.sh #给予deploy_local.sh执行权限
-
#/var/www/html/nconf/ADD-ONS/deploy_local.sh #手动执行此脚本,将在/usr/local/nagios/etc下生成两目录Default_collector与global
-
3) 修改nagios主配置文件:
-
# vim /usr/local/nagios/etc/nagios.cfg #将其中cfg_file=*******字段全部注释
-
cfg_dir=/usr/local/nagios/etc/Default_collector #添加将其配置文件指向
-
cfg_dir=/usr/local/nagios/etc/global #添加将其配置文件指向
-
# service nagios reload #重载nagios配置文件使之生效
-
4) 添加到crontab计划任务:
-
# crontab -e
-
*/1 * * * * /var/www/html/nconf/ADD-ONS/deploy_local.sh #每分钟监测一下是否有更新,有更新就自动覆盖最新的配置文件
十二、Nagios的插件介绍:
如果想给Nagios增加一个自己的插件,请访问:Nagios插件项目官方网站、Nagios插件开发的官方指南。
12.1 插件概览:
作为Nagios插件的脚本或执行程序必须(至少)要做两件事:
1)退出时给出几种可能的返回值中的一个;
2)至少要给出一条输出内容到标准输出设备(STDOUT)。
对Nagios来说,插件里面做什么并不重要。自制插件可以是做TCP端口状态检测,运行某个数据库查询,检查磁盘空闲空间,或其他需要检测的内容。这取决于你想检测什么东西,这完全由你自己决定。
12.2 返回值:
Nagios用插件的返回值来生成主机或服务的状态。下表里列出了合法的返回值以及对应的服务或主机状态。
插件返回值 服务状态 主机状态
0 正常(OK) 运行(UP)
1 告警(WARNING) 运行(UP)或宕机(DOWN)/不可达(UNREACHABLE)*
2 紧急(CRITICAL) 宕机(DOWN)/不可达(UNREACHABLE)
3 未知(UNKNOWN) 宕机(DOWN)/不可达(UNREACHABLE)
注意:如果使能use_aggressive_host_checking选项,返回值1将使主机状态要么是宕机(DOWN)要么是不可达(UNREACHABLE)。其他情况下,返回值1将使主机状态是运行(UP)。
12.3 特定插件输出:
最小情况下,插件要返回一行文本输出。自Nagios 3版本起,插件可以返回多行输出文本。插件可以返回性能数据以让外部应用来做后序处理。输出文本的基本格式如下:
TEXT OUTPUT | OPTIONAL PERFDATA
LONG TEXT LINE 1
LONG TEXT LINE 2
...
LONG TEXT LINE N | PERFDATA LINE 2
PERFDATA LINE 3
...
PERFDATA LINE N
性能数据(用下划线示意的部分)是可选的,如果插件输出文本里有性能数据,必须用管道符(|)把性能数据与其他数据分开,额外的大段输出行(用文字删除符示意的部分)同样也是可选的。
12.4 插件输出样例:
下面看一下插件输出的样例...
案例1:只有一行文本输出(不带性能数据)
假定插件的输出文本是这样:
DISK OK - free space: / 3326 MB (56%);
如果插件执行的是一个服务检测,整行输出都会保存在$SERVICEOUTPUT$宏里。
案例2:一行输出带性能数据
插件的输出文本中带有性能数据可给外部应用来处理。性能数据要用管道符(|)分隔开,象是这样:
DISK OK - free space: / 3326 MB (56%); | /=2643MB;5948;5958;0;5968
如果插件执行的是一个服务检测,分隔符左侧的部分将保存在$SERVICEOUTPUT$宏里并且右侧(用下划线示意)的部分将保存在$SERVICEPERFDATA$宏里面。
案例3:多行输出(正文和性能数据都有)
插件可以输出多行文本,并且带有正文输出和性能数据,象是这样:
DISK OK - free space: / 3326 MB (56%); | /=2643MB;5948;5958;0;5968
/ 15272 MB (77%);
/boot 68 MB (69%);
/home 69357 MB (27%);
/var/log 819 MB (84%); | /boot=68MB;88;93;0;98
/home=69357MB;253404;253409;0;253414
/var/log=818MB;970;975;0;980
如果插件执行的是一个服务检测,第一行分隔符左侧的部分将保存在$SERVICEOUTPUT$宏里,带有下划线标识的部分(带空格)将保存在$SERVICEPERFDATA$宏里,带删除符标识的部分(不带换行符)的部分将保存在$LONGSERVICEOUTPUT$宏里(以上的下划线和删除符只是为标记文本段而用的,实际文本中不带有符号格式--译者注)。
每个宏的最终结果是这样的:
宏内容
$SERVICEOUTPUT$ DISK OK - free space: / 3326 MB (56%);
$SERVICEPERFDATA$ /=2643MB;5948;5958;0;5968./boot=68MB;88;93;0;98./home=69357MB;253404;253409;0;253414./var/log=818MB;970;975;0;980
$LONGSERVICEOUTPUT$ / 15272 MB (77%);\n/boot 68 MB (69%);\n/var/log 819 MB (84%);
利用多行输出结果的机制,可以采取多种方式来返回性能数据:
无论什么情况都没有性能数据;
只返回一行性能数据;
只是在后序的行内返回性能数据(第一行不用的管道分隔符右侧不填内容);
利用全部的输出位置来带出性能数据。
(看起来第一行右侧部分有点"多余",真的可以不用,但其实这是作者为软件向下兼容低版本使用的插件而特意这么做的,很有必要这么做,看一下源程序就明白了。)
12.5 插件输出长度限制:
Nagios只处理插件返回的前4KB数据内容。这样是为了防止插件返回一个上兆或上千兆的数据块给Nagios处理。这个4K的限制很容易修改,如果你想改,可以编辑一下源代码里的MAX_PLUGIN_OUTPUT_LENGTH宏定义,在源程序包的include/nagios.h.in文件里,重编译一下Nagios就可以了,其他地方不用动!
12.6 例子:
如果想找点例子来学习开发插件,推荐去下载Nagios插件项目官方的软件包,插件代码使用多种语言(象C、Perl和SHELL脚本等)写成插件。
阅读(2332) | 评论(0) | 转发(0) |