Chinaunix首页 | 论坛 | 博客
  • 博客访问: 96792
  • 博文数量: 5
  • 博客积分: 361
  • 博客等级: 入伍新兵
  • 技术积分: 140
  • 用 户 组: 普通用户
  • 注册时间: 2012-05-16 16:10
文章分类

全部博文(5)

文章存档

2012年(5)

我的朋友

分类: LINUX

2012-11-16 16:06:23

  
   nagios-plugins自带有一个check_ping二进制文件可以检测丢包率和ping的回应值,但由于领导要求所有监控脚本改用python写,所以这里用python重新写了一个。代码如下:

#cat check_ping.py

点击(此处)折叠或打开

  1. #!/usr/bin/env python
  2. # coding: utf-8
  3. # coding: cp950

  4. '''
  5. Create Date: 2012-11-06
  6. Version: 1.0
  7. Description: Detection host survival
  8. Author: Victor
  9. QQ: 1409175531
  10. '''

  11. ''' Please run the script with root '''

  12. import ping
  13. import sys

  14. def help():
  15.   print '''
  16. Usage:
  17. %s
  18. ''' % (sys.argv[0])

  19. try:
  20.   result = ping.quiet_ping(sys.argv[1], timeout=2, count=10, psize=64)
  21.   if int(result[0]) == 100:
  22.     print 'Critical - 宕机, 丢包率:%s%% | 报警阀值: >= %s%% 或 >=%s ms' % (result[0], int(sys.argv[2]), int(sys.argv[3]))
  23.     sys.exit(2)
  24.   else:
  25.     max_time = round(result[1], 2)
  26.     if int(result[0]) < int(sys.argv[2]) and int(result[1]) < int(sys.argv[3]):
  27.       print 'OK - 丢包率:%s%%, 最大响应时间:%s ms | 报警阀值: >= %s%% 或 >=%s ms' % (result[0], max_time, int(sys.argv[2]), int(sys.argv[3]))
  28.       sys.exit(0)
  29.     elif int(result[0]) >= int(sys.argv[2]) or int(result[1]) >= int(sys.argv[3]):
  30.       print 'Warning - 丢包率:%s%%, 最大响应时间:%s ms | 报警阀值: >= %s%% 或 >=%s ms' % (result[0], max_time, int(sys.argv[2]), int(sys.argv[3]))
  31.       sys.exit(1)
  32.     else:
  33.       print 'Unknown'
  34.       sys.exit(3)
  35. except IndexError:
  36.   help()
  37.   sys.exit(3)
  该脚本使用了ping模块,ping模块默认没有安装,可使用easy_install进行安装,先在下载与python版本对应的setup-tools(用来提供easy_install命令),下载好后给执行权限,直接执行即可安装。接下来安装ping模块:
#easy_install ping   
安装成功后即可正常运行本脚本。

  直接执行脚本不加参数可以查看脚本用法:
#python check_ping.py
Usage:
check_python_ping.py

 表示丢包率阀值,即丢包率达到这个值后报警;
     表示最大响应时间,即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
        }

效果图如下:


本文乃何秋平原创文章,请勿转载。如须转载请详细标明转载出处。



阅读(19159) | 评论(0) | 转发(0) |
0

上一篇:python脚本监控系统登录用户数

下一篇:没有了

给主人留下些什么吧!~~