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. bootstrap datetimepicker 位置错误

    bootstrap datetimepicker 位置错误,大致问题跟其他网友描述的一样,页面自动出滚动条,然后datetimepicker飘到页脚,网上的方法都是修改place方法里面的555行左右 ...

  2. Fiddler简介以及web抓包1

    一.Fiddler简介 简单来说,Fiddler是一个http协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯.网上简介很多,我们不多说. 二.Fiddler版本 Fiddle ...

  3. 学习wavenet_vocoder之预处理、训练

    一.预处理 1.在进行预处理时,如果不明白需要的参数,可以使用命令获取帮助,从这里我们可以看到可以具体的用法和对应的参数. python preprocess.py --help python pre ...

  4. HTML&&CSS基础知识点整理

    HTML&&CSS基础知识点整理 一.WEB标准:一系列标准的集合 1. 结构(Structure):html 语言:XHTML[可扩展超文本标识语言]和XML[可扩展标记语言] 2. ...

  5. nginx 入门 安装

    .yum解决编译nginx所需的依赖包,之后你的nginx就不会报错了 yum install gcc patch libffi-devel python-devel zlib-devel bzip2 ...

  6. NLog记录日志到本地或数据库

    OperatorLog CREATE TABLE [dbo].[OperatorLog]( ,) NOT NULL, [Createdate] [DATETIME] NOT NULL DEFAULT ...

  7. Delphi XE2 之 FireMonkey 入门(3) - 关于 TPosition

    把 FireMonkey 简称为 FM 吧. FM 的窗体继续使用 Left.Top 属性, 但更多控件不是了. //FM 控件的位置控制不再是 Left.Top, 取而代之的是 Position 属 ...

  8. js 实现两个小数的相乘、相除功能

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  9. C# datatable 与 xml文件之间的转换

    /// <summary> /// datatable转XML文件 /// </summary> /// <param name="dtTable"& ...

  10. 腾讯重磅开源分布式NoSQL存储系统DCache

    当你在电商平台秒杀商品或者在社交网络刷热门话题的时候,可以很明显感受到当前网络数据流量的恐怖,几十万商品刚开抢,一秒都不到就售罄:哪个大明星出轨的消息一出现,瞬间阅读与转发次数可以达到上亿.作为终端用 ...