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. android中使用Application

    在android开发过程中,我们可能存储一些全局的变量,最好在正在app的任何一个activity或者service中都可以访问到,这时我们可以使用application. 我们的一个应用就叫appl ...

  2. Qt中图元对象的多重集成

    在继承自定义QGraphicsItem图元对象时,有时需要用到信号/槽机制,由于QGraphicsItem非QObject的子类 所以需要多重继承QObject,有一点需要特别注意:就是继承的顺序,一 ...

  3. SpringCloud 教程 (六)断路器聚合监控(Hystrix Turbine)

    一.Hystrix Turbine简介 看单个的Hystrix Dashboard的数据并没有什么多大的价值,要想看这个系统的Hystrix Dashboard数据就需要用到Hystrix Turbi ...

  4. SQL语句之-简单查询

       SQL 语句的语法顺序是: SELECT[DISTINCT] FROM WHERE GROUP BY HAVING UNION ORDER BY 一.查询SELECT 1.查询全部列:SELEC ...

  5. SQL的一对多,多对一,一对一,多对多什么意思?

    1.一对多:比如说一个班级有很多学生,可是这个班级只有一个班主任.在这个班级中随便找一个人,就会知道他们的班主任是谁:知道了这个班主任就会知道有哪几个学生.这里班主任和学生的关系就是一对多. 2.多对 ...

  6. win10 安装了virtualBox 启动报错 rc=-5640

    刚刚安装的virtualbox 启动就弹窗报错,,但是通过找到log 发现了下面这样的一处报错: 然后搜素发现是跟win10应用程序错误,,解决办法如下: 1.到控制面板,,--程序 再次尝试,vir ...

  7. Emmet - 自动补全 JSX

    VSCode 中设置"emmet.syntaxProfiles": {"javascript": "jsx"} reactjs - JSX ...

  8. flex 数字上标

    以A的3次方为例,我们输入以下代码: /** * 部分代码参考Adobe文档: * http://help.adobe.com/zh_CN/AS3LCR/Flash_10.0/flash/text/e ...

  9. python-笔记-内置函数

    ###内置函数 print(all([1,2,3,4]))判断可迭代的对象里面的值是否都为真 print(any([0,1,2,3,4]))判断可迭代的对象里面的值是否有一个为真 print(id(l ...

  10. Delphi XE2 之 FireMonkey 入门(2)

    FireMonkey 的控件都是自己绘制的(而不是基于系统组件), 我想它们应该是基于一些基本图形; 就从基本图形开始吧. FMX.Objects 单元给出的类: TShape //基本图形的基类 T ...