nagios自带的http-check插件主要是检测地址url是否可以访问,在web+中间件的架构中容易出现url能访问,但是后台中间件拓机的情况,因为最近在自学python,所以写了个脚本检测url title的脚本,若中间件挂掉之后,则当前url的titile一定会发生变化,也可以专门设置一个test.jsp的页面用于检测中间件、数据源的健康状态。

第一步:写python脚本

首先要知道的是:

Nagios 每次在查询一个服务的状态时,产生一个子进程,并且它使用来自该命令的输出和退出代码来确定具体的状态。退出状态代码的含义如下所示:

  • OK —退出代码 0—表示服务正常地工作。
  • WARNING —退出代码 1—表示服务处于警告状态。
  • CRITICAL —退出代码 2—表示服务处于危险状态。
  • UNKNOWN —退出代码 3—表示服务处于未知状态

根据退出状态码来给nagios提供监控信息,这里取0:ok   3:不正常

  1. #!/usr/bin/python
  2. #coding:utf-8
  3. __author__ = 'dwj'
  4. import getopt,sys,urllib,re
  5. class monitor:
  6. def __init__(self):
  7. pass
  8. #print '这是一个监控脚本,输入url和你希望得到的标题页面,如果是你设定的页面就返回OK,否则返回你想要的内容,也可以发告警邮件'
  9. def sgethtml(self,url):
  10. self.url=url
  11. page=urllib.urlopen(url)
  12. html=page.read()
  13. return html
  14. def monitor(self,title,html):
  15. self.title=title
  16. self.html=html
  17. find_title=r'<TITLE>(.*)</TITLE>'
  18. find_titled=re.compile(find_title,re.I)
  19. t=re.findall(find_titled,html)        #找到的是一个列表
  20. t=t[0].strip()                        #去除前后空格
  21. if t==title:
  22. print 'The title is find!  ok'
  23. sys.exit(0)
  24. else:
  25. print t.decode('utf-8')
  26. print 'The title is not find!! pls check it!'
  27. sys.exit(3)
  28. def useage():
  29. print('This is a test fun')
  30. #print 'hhh'
  31. m=monitor()
  32. try:
  33. options,args=getopt.getopt(sys.argv[1:],'u:t:',['url=','title='])
  34. except getopt.GetoptError:
  35. sys.exit(2)
  36. #print options,args
  37. for name,value in options:
  38. if name in ('-u','--url'):
  39. url=value
  40. if name in ('-t','--title'):
  41. title=value
  42. html=m.sgethtml(url)
  43. m.monitor(title,html)

第二步:将python脚本注册为nagios命令

打开nagios的command.cfg的配置文件

添加如下信息:

  1. define command{
  2. command_name dwj_check
  3. command_line python /usr/lib/nagios/plugins/http_check.py -u $ARG1$  -t $ARG2$
  4. }

第三步:编写service.cfg

  1. define service {
  2. use generic-service
  3. host_name        testhost
  4. service_description www_http
  5. check_command dwj_check!http://192.168.18.12!Naigos      #nagios的参数使用!来分隔  若title中含有空格则使用双引号将其括起来!
  6. }

重启之后,在nagios就可以看到新添加的服务监控:

至此OK了

用python 写一个nagios插件 监控http内容(转载)的更多相关文章

  1. 无监控不运维——使用 Python 写一个小小的项目监控

    在公司里做的一个接口系统,主要是对接第三方的系统接口,所以,这个系统里会和很多其他公司的项目交互.随之而来一个很蛋疼的问题,这么多公司的接口,不同公司接口的稳定性差别很大,访问量大的时候,有的不怎么行 ...

  2. Python运维三十六式:用Python写一个简单的监控系统

    市面上有很多开源的监控系统:Cacti.Nagios.Zabbix.感觉都不符合我的需求,为什么不自己做一个呢? 用Python两个小时徒手撸了一个简易的监控系统,给大家分享一下,希望能对大家有所启发 ...

  3. 用Python写一个简单的Web框架

    一.概述 二.从demo_app开始 三.WSGI中的application 四.区分URL 五.重构 1.正则匹配URL 2.DRY 3.抽象出框架 六.参考 一.概述 在Python中,WSGI( ...

  4. 如何写一个jquery插件

      本文总结整理一下如何写一个jquery插件?虽然现今各种mvvm框架异常火爆,但是jquery这个陪伴我们成长,给我们带来很多帮助的优秀的库不应该被我们抛弃,写此文章,作为对以往欠下的笔记的补充, ...

  5. 十行代码--用python写一个USB病毒 (知乎 DeepWeaver)

    昨天在上厕所的时候突发奇想,当你把usb插进去的时候,能不能自动执行usb上的程序.查了一下,发现只有windows上可以,具体的大家也可以搜索(搜索关键词usb autorun)到.但是,如果我想, ...

  6. [py]python写一个通讯录step by step V3.0

    python写一个通讯录step by step V3.0 参考: http://blog.51cto.com/lovelace/1631831 更新功能: 数据库进行数据存入和读取操作 字典配合函数 ...

  7. 【Python】如何基于Python写一个TCP反向连接后门

    首发安全客 如何基于Python写一个TCP反向连接后门 https://www.anquanke.com/post/id/92401 0x0 介绍 在Linux系统做未授权测试,我们须准备一个安全的 ...

  8. 为PhoneGap写一个android插件

    为PhoneGap写一个android插件,要怎么做? 其实这句话应该反过来说,为android写一个PhoneGap插件,要怎么做? 这里以最简单的Hello World!为例,做个说明: 1.第一 ...

  9. Python写一个自动点餐程序

    Python写一个自动点餐程序 为什么要写这个 公司现在用meican作为点餐渠道,每天规定的时间是早7:00-9:40点餐,有时候我经常容易忘记,或者是在地铁/公交上没办法点餐,所以总是没饭吃,只有 ...

随机推荐

  1. C++ 对象间通信框架 V2.0 ××××××× 之(二)

    公共头文件:ss_type_def.h ================================================================================ ...

  2. consul安装

    原文地址: https://www.cnblogs.com/cuishuai/p/8194345.html #比较详细/有集群方式 https://www.cnblogs.com/youcong/p/ ...

  3. MySQL高可用方案 MHA之四 keepalived 半同步复制

    主从架构(开启5.7的增强半同步模式)master: 10.150.20.90   ed3jrdba90slave: 10.150.20.97    ed3jrdba97 10.150.20.132 ...

  4. TypeError: list indices must be integers or slices, not str

    错误如下: TypeError: list indices must be integers or slices, not str 错误代码块: aa是一组list套dict数据 函数insert接收 ...

  5. java.lang.NoClassDefFoundError: org/bouncycastle/jce/provider/BouncyCastleProvider解决方法

    因为加入了jdk的第三方安全库,需要额外配置 1.下载bcprov-jdkxx-xxx.jar 2.将bcprov-jdkxx-xxx.jar放入$JAVA_HOME/jre/lib/ext下 3.打 ...

  6. KETTLE——初见KETTLE

    (PS:这是很早以前在CSDN上发过的,那个账号不想用了,所以搬过来) 就在前一段时间,因为公司需要突然被老大告知要用一个ETL工具,第一次知道这么个工具,完全不知道是做什么的.大概问了一下,说是一种 ...

  7. JAVA在页面查看或下载服务器上的日志

    1.配置 FileUtils类所需jar包的maven地址 <dependency> <groupId>commons-io</groupId> <artif ...

  8. Java 基础-类与面向对象

    类 Object 类(java.lang.Object)是所有 Java 类的直接或间接父类. 成员方法及变长参数 方法定义: [public | protected | private] [stat ...

  9. uni-app-v-else中不需要值

    这个问题把我都高懵逼了 在vue中, 但是在uni-app中:v-else不需要值, 下面去掉值就Ok了

  10. 升级到mysql5.7无法启动问题解决

    漏洞扫描,老项目升级到5.7位成功,启动发现报错:unknown option log_error 线备份my.cnf配置文件, 猜测应该是写法有问题,先把log_error  改成log #log_ ...