2015年(68)
分类: 系统运维
2015-08-31 19:21:37
简单来说nagios对主机或服务状态的检测,基本上都是通过外部程序(也就是我们说的插件)来完成的,,nagios要做的只是对这些插件所做的检测结果进行分析处理,该告警的告警、该处理的处理(事件处理机制)。nagios安装好后,在安装目录的libexec目录下已经有很多插件以用于监控象CPU负载、磁盘、内存等,另外,还可以到像 style="font-size:14px;">、 style="font-size:14px;">这些网站去下寻找并下载所需要插件。如果没找到或觉得满足不了需求,还可以自己写插件,用sh、python、perl等都没关系,只要满足下面的2个条件就行了
返回值:也可以说是插件的退出码,让nagios知道主机、服务的状态
输出检测的结果数据:让nagios知道具体检测结果,加上性能数据可以给像pnp4nagios这些插件来绘图
返回值:插件的状态返回值有(0 1 2 3)4个,每个返回值对应不同主机、服务的状态,如下图:
检测的结果数据:插件至少返回一行文本格式的信息,从版本3开始,nagios支持多行,比如:
DISK OK - free space: / 3326 MB (56%);
加上性能数据:
DISK OK - free space: / 3326 MB (56%); | /=2643MB;5948;5958;0;5968
示例:
写了一个简单的check_url.sh插件,插件的作用是监控网页,实现的原理也很简单-访问网页时,如果返回的http返回码不为200,就认为这个网页不能访问,插件内容如下:
-----------------------------------------------
#/bin/bash
STATE_OK=0
STATE_WARNING=1
STATE_CRITICAL=2
URL=$1
CURL="/usr/bin/curl -o /dev/null -s -m 15"
RESULT=$($CURL -w "%{time_total} %{http_code}" $URL)
TIME_SPENT=$(echo $RESULT|awk '{print $1}')
HTTP_CODE=$(echo $RESULT|awk '{print $2}')
if [ "$HTTP_CODE" -eq 200 ];then
STATUS=$STATE_OK
OUTPUT="HTTP/1.1 $HTTP_CODE OK - $TIME_SPENT second response time on $URL | response_time=$TIME_SPENT"
else
STATUS=$STATE_CRITICAL
OUTPUT="HTTP/1.1 $HTTP_CODE CRITICAL - $TIME_SPENT second response time on $URL | response_time=$TIME_SPENT"
fi
echo $OUTPUT
exit $STATUS
## 后面这个输出检测结果、退出状态是必须的
-----------------------------------------------
//测试
[root@monitor ~]# /usr/local/nagios/libexec/check_url.sh
HTTP/1.1 200 OK - 10.091 second response time on | response_time=10.091
结果是可以正常访问,响应时间为 10.091秒,|号后面的response_time=10.091为性能数据。这个只是一个很简单的示例,只用到OK和CRITICAL状态,没考虑重定向什么的。有需要的可以改一下,如返回30x状万态也为OK、响应时间超过10为WARNING,性能数据还可加上连接时间、网页大小等。