十一、Nagios插件的开发与整合
本来LAMP+Nagios架构已经写完,但是觉得还是有些内容没有写完整,心里一直纠结啊。确实,关于nagios还有最重要的一点,手动开发插件,这样对于以后的生产使用会是事半功倍的。所以我觉得还是要把插件开发的相关内容好好研究一下,可能不能精通,但是至少也要入门。最近今天比较忙,所以也就没来得及补充。这两天在学cacti进阶课程,本想先把cacti总结整理以后再写Nagios,但是不想文章标题中坚被打断,强烈的完美主义。所以,先留个标题,我把cacti总结好以后再来写这个。
这里使用了“写代码的小孩——nagios插件开发demo版”的开发脚本为示例
- #!/bin/bash
- STATE_OK=0
- STATE_WARNING=1
- STATE_CRITICAL=2
- STATE_UNKNOWN=3
- TOTAL=`/bin/netstat -n | awk '/^tcp/ {++S[$NF]}END {for(a in S) print a, S[a]}'
- |grep "ESTABLISHED" | awk '{print$NF}'`
- if [ $TOTAL -lt 100 ];then
- echo "TEST OK : The established status id $TOTAL"
- exit $STATE_OK
- elif [ $TOTAL -gt 100 -a $total -lt 200];then
- echo "TEST WARNING : The established status id $TOTAL"
- exit $STATE_WARNING
- elif [ $TOTAL -gt 201 ];then
- echo "TEST CRITICAL : The established status id $TOTAL"
- exit $STATE_CRITICAL
- else
- echo "UNKNOWN STATE"
- exit $STATE_UNKNOWN
- fi
STATE_OK=0、STATE_WARNING=1、STATE_CRITICAL=2、STATE_UNKNOWN=3这是nagios能识别的四种状态码。
每种状态定义了显示在监控页面的不同颜色,以及是否发送警告信息等。因此Nagios的插件,必须要首先定义这四
种状态,
且在脚本进行判断中,必须使用exit返回相应状态值。而在exit上面的这句一般是用来显示当前状态信息,
不能太大,默认是4K。
比如我下面就是使用这个脚本来进行本地的连接测试,如下图:
Nagios插件开发的语法其实就是这么简单,难点还是在于脚本的开发上,如何能实现脚本的健壮性、稳定性等特点,就是长期积累的结果了。
另外还有一点需要注意:
脚本在开发完成之后,可能有些是需要root权限才能正常执行的,而我们又不想nagios的执行用户拥有root权限,因此可以使用sudo命令,当然这里必须使用sudo的 免密码特征,而且只给固定的执行某条命令(例如:smartctl)的权限,即只有在执行该条命令的时候是以root身份执行的,且不需要输入执行用户密码来实现用户切换,需要在visudo中修改一行,如下:
nagios ALL=(ALL) NOPASSWD:/usr/sbin/smartctl -H /dev/sda (这比网上的好多教程,直接把第三段改成ALL安全多了)
这样就保证了执行该条语句的时候,只要这样写就可以了:$ sudo smartctl -H /dev/sda
如果执行其他命令,则会提示:Sorry, user nagios is not allowed to execute '/usr/sbin/smartctl -H /dev/sdb' as root on centos3.
大概能想到的只有这么多了。