nagios-plugins自带有一个check_ping二进制文件可以检测丢包率和ping的回应值,但由于领导要求所有监控脚本改用python写,所以这里用python重新写了一个。代码如下:
#cat check_ping.py
- #!/usr/bin/env python
- # coding: utf-8
- # coding: cp950
- '''
- Create Date: 2012-11-06
- Version: 1.0
- Description: Detection host survival
- Author: Victor
- QQ: 1409175531
- '''
- ''' Please run the script with root '''
- import ping
- import sys
- def help():
- print '''
- Usage:
- %s
- ''' % (sys.argv[0])
- try:
- result = ping.quiet_ping(sys.argv[1], timeout=2, count=10, psize=64)
- if int(result[0]) == 100:
- print 'Critical - 宕机, 丢包率:%s%% | 报警阀值: >= %s%% 或 >=%s ms' % (result[0], int(sys.argv[2]), int(sys.argv[3]))
- sys.exit(2)
- else:
- max_time = round(result[1], 2)
- if int(result[0]) < int(sys.argv[2]) and int(result[1]) < int(sys.argv[3]):
- print 'OK - 丢包率:%s%%, 最大响应时间:%s ms | 报警阀值: >= %s%% 或 >=%s ms' % (result[0], max_time, int(sys.argv[2]), int(sys.argv[3]))
- sys.exit(0)
- elif int(result[0]) >= int(sys.argv[2]) or int(result[1]) >= int(sys.argv[3]):
- print 'Warning - 丢包率:%s%%, 最大响应时间:%s ms | 报警阀值: >= %s%% 或 >=%s ms' % (result[0], max_time, int(sys.argv[2]), int(sys.argv[3]))
- sys.exit(1)
- else:
- print 'Unknown'
- sys.exit(3)
- except IndexError:
- help()
- sys.exit(3)
该脚本使用了ping模块,ping模块默认没有安装,可使用easy_install进行安装,先在下载与python版本对应的setup-tools(用来提供easy_install命令),下载好后给执行权限,直接执行即可安装。接下来安装ping模块:#easy_install ping
安装成功后即可正常运行本脚本。
直接执行脚本不加参数可以查看脚本用法:
#python check_ping.py
Usage:
表示最大响应时间,即ping某个地址的响应时间达到这个值后报警;
实例:
由于nagios程序是由nagios用户执行,使用该脚本的ping模块会报错,需要给nagios用户开放sudo权限:
#visudo
添加以下内容
nagios ALL=(ALL) NOPASSWD: /usr/local/nagios/libexec/check_ping.py
commands.cfg配置:
##### 飞信机器人的配置 ######
define command {
command_name notify-service-by-fei
command_line LD_LIBRARY_PATH=/usr/local/fetion /usr/local/fetion/fetion --mobile=158******** --pwd=123456 --to=$CONTACTPAGER$ --msg-type=1 --msg-utf8="**Nagios**\nNotification Type: $NOTIFICATIONTYPE$\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\nDate/Time: $LONGDATETIME$\nAdditional Info:\n$SERVICEOUTPUT$"
}
##### 定义check_python_ping命令 #####
define command {
command_name check_python_ping
command_line sudo $USER1$/check_ping.py $HOSTADDRESS$ $ARG1$ $ARG2$
}
services.cfg配置:
define service{
use service01
host_name test
service_description ping
check_command check_python_ping!30!200
}
效果图如下:
本文乃何秋平原创文章,请勿转载。如须转载请详细标明转载出处。
阅读(19127) | 评论(0) | 转发(0) |