其实在nagios官方网站上也有很多插件,足够让我们使用,但是也不排除不能满足公司的需求,这时,得运维工程师或者程序员自己去编写脚本,网上也有很多教程,但是看了感觉都是讲的不够清楚,所以自己写了一份记录,希望可以帮得到网友们,同时,有哪里讲错的地方希望你们指出来,免得误人子弟。 一 、写nagios插件,可以使用shell、perl、python等脚本语言,不管什么语言来写原理是一样的。那么先来认识下4种状态返回信息: 0(OK)表示状态正常/绿色 1(WARNING)表示出现警告/黄色 2(CRITICAL)表示出现非常严重的错误/红色 3(UNKNOWN)表示未知错误/深黄色。 图解:
原理: Nagios根据插件返回来的值,来判断监控对象的状态,通过web显示出来,并通过邮件或者是短信方式(其他方式也可以)给管理员报警,及时处理故障.
二、脚本编写教程 1 编写脚本 [Shell] 纯文本查看 复制代码 [iyunv@node1 libexec]# cat /usr/local/nagios/libexec/check_disk_used
#!/bin/bash
#############返回状态码################
STATE_OK=0
STATE_WARNING=1
STATE_CRITICAL=2
STATE_UNKNOWN=3
#############参数提示帮助###############
help(){
echo "Usage:$0 -h to help"
}
#############参数使用教程###############
full_help(){
echo "Usage:"
echo "linux disk used"
echo "example:$0 -w 80 -c 100"
}
#############以下是作判断和返回的结果,这里注意的函数getopts,非常好用##############
if [ $# -lt 1 ];then
help
exit 0
else
while getopts :w:c:h OPTION
do
case $OPTION
in
w)
WARNING=$OPTARG
;;
c)
CRITICAL=$OPTARG
;;
h)
full_help
exit 0
;;
*)
echo "Error option"
help
exit 0
;;
esac
done
fi
############拿出磁盘的used,以下那个乘以1024,单位的转换#############
used_one=`df -l|sed -n '2p'|awk '{print $3}'`
used=`expr $used_one \* 1024`
############拿出磁盘的total,以下那个乘以1024,单位的转换#############
total_one=`df -l|sed -n '2p'|awk '{print $2}'`
total=`expr $total_one \* 1024`
###############判断大于给出的参数-C -w 的结果,如果没问题,就显示OK#################
if [ "$used" -ge "$CRITICAL" ] && [ "$CRITICAL" -ne "0" ];then
state="$STATE_CRITICAL"
state_used="CRITICAL"
elif [ "$used" -ge "$WARNING" ] && [ "$WARNING" -ne "0" ];then
state="$STATE_WARNING"
state_used="WARNING"
else
state="$STATE_ok"
state_used="ok"
fi
echo ""The server disk_tatal=$total,the disk_used is "$state_used",disk_used="$used""|disk_used="$used";3387649424;3587635328;0;"$total""
exit $state ############这个就是返回的状态码,在注意这里#############
2 在被监控的客户端/usr/local/nagios/etc/nrpe.cfg加上以下语句,添加完后要记得重启nrpe服务,一般使用/etc/rc.d/init.d/xinetd restart
- command[check_disk_used]=/usr/local/nagios/libexec/check_disk_used -w 3387649424 -c 3587635328
3 在nagios服务器端,主机配置文件添加服务和重启nagios(service nagios restart):
[Shell] 纯文本查看 复制代码 [iyunv@node2 servers]# cat/usr/local/nagios/etc/servers/192.168.250.40.cfg
define service{
use generic-service,service-pnp
host_name web1
service_description check_disk_used
check_command check_nrpe!check_disk_used
}
4 web查看
这样,自己编写的插件就可以正常使用了,运维工程师或者程序员就可以根据自己本身的 业务和需求去编写脚本。 三、 pnp4nagios出图 细心的网友们应该会看到旁边有一个图形,这个就是pnp插件,在这里pnp4nagios配置 我就不写出来了,如果哪位网友需要交流的话就联系我或者在后面回复。 1 首先出图的话需要服务需要加入PNP4nagios插件(在配置好pnp4nagios基础上) [Shell] 纯文本查看 复制代码 [iyunv@node2 servers]# cat /usr/local/nagios/etc/servers/192.168.250.40.cfg
define service{
use generic-service,service-pnp
host_name web1
service_description check_disk_used
check_command check_nrpe!check_disk_used
}
通过以上的配置,图标就会出现
2 绘图 绘图是使用rrdtool,安装pnp4nagios的时候需要安装的依赖包。首先大家要明白,生成 图像,需要的是什么?---->当然是数据。但数据从哪里来呢?请看看被监控的客户端脚本: [Shell] 纯文本查看 复制代码 [iyunv@node1 libexec]# cat /usr/local/nagios/libexec/check_disk_used
#!/bin/bash
STATE_OK=0
STATE_WARNING=1
STATE_CRITICAL=2
STATE_UNKNOWN=3
.........
.........
echo ""The server disk_tatal=$total,the disk_used is "$state_used",disk_used="$used""|disk_used="$used";3387649424;3587635328;0;"$total""
exit $state
|disk_used="$used";3387649424;3587635328;0;"$total"大家有没有留意到,这里就是数据,那么是怎么样定义的呢? | 当前值;警告值;临界值;最小值;最大值 | ---->是用来区别输出的数据的,|之前输出的数据是显示在web上面,后面则是绘图的数据 当前值:这个要定义一个名字,例如:disk_used= 警告值: 这个就是 - w参数的值 临界值:这个就是 - c参数的值 最小值: 0 最大值: 这个根据自己本身监控去定义拿取
3 最后,在使用这个脚本的时候也需要加上参数 [iyunv@node1 libexec]# vi /usr/local/nagios/etc/nrpe.cfg - command[check_disk_used]=/usr/local/nagios/libexec/check_disk_used -w 3387649424 -c 3587635328
这样的话就可以有数据绘图了,我们验证下结果:
希望简单的教程能帮助到大家,谢谢!!!
|