Python实现的检测web服务器健康状况的小程序


Posted in Python onSeptember 17, 2014

对web服务器做健康检查,一般我们都是用curl库(不管是php,perl的还是shell的),大致的方法一致:

curl -I -s www.qq.com  |head -1|awk '{ health = $2=="200"?"server is ok":"server is bad"}END{print health}'

server is ok

说白了这些方式都是封装了curl库的,另外还有一些关于http的模块,例如perl的LWP,python的httplib,urllib或者urllib2 也可以去实现,今天就走的比较低级一些,就使用socket方式来进行一次检测:

#!/usr/bin/env python
#coding=utf8
 
"""
使用socket方式来检查服务器的监控状况
"""
 
from optparse import OptionParser
 
import socket
 
import sys
 
import re
 
from StringIO import StringIO
 
class check_server:
  """
  该类主要是利用socket建立一个连接以后,发送一个http请求,然后根据返回的状态码,判断主机的健康状况
  """
  def __init__(self,address,port,resource):
    self.address = address
    self.port = port
    self.resource = resource
 
 
  def check(self):
    """
    该方法也是该类的主要方法,包括构建请求资源,解析返回结果等
    """
    if not self.resource.startswith('/'):
      self.resource = '/' + self.resource
 
    request = "GET %s HTTP/1.1\r\nHost:%s\r\n\r\n" %(self.resource,self.address)
 
    #建立一个socket连接
 
    s = socket.socket()
    #设置连接超时时间
    s.settimeout(10)
 
    print "现在开始对 %s 上的 %s 端口连接......" %(self.address,self.port)
 
    try:
      s.connect((self.address,self.port))
      print "连接 %s 上端口 %s 成功" %(self.address,self.port)
      s.send(request)
      response = s.recv(100)
 
    except socket.error,e:
      print "连接%s 上端口 %s 失败 ,原因为:%s" %(self.address,self.port,e)
      return False
    finally:
      print "关闭连接"
      s.close()
 
 
    line = StringIO(response).readline()
 
    try:
      (http_version,status,messages) = re.split(r'\s+',line,2)
    except ValueError:
      print "分割响应码失败"
      return False
    print "返回的状态码是%s" %(status)
 
    if status in ['200','301','302']:
 
      print "服务器的监控状况良好"
    else:
 
      print "乖乖,赶快上线看看,咋回事"
 
 
if __name__ == '__main__':
  """
  处理参数
  """
  parser =OptionParser()
  parser.add_option("-a","--address",dest="address" ,default='localhost',help="要检查主机的地址或者主机名")
  parser.add_option('-p','--port',dest="port",type=int,default=80,help="要检查主机的端口")
  parser.add_option('-r','--resource',dest="resource",default="/",help="要检查的资源,比如")
  (options,args) = parser.parse_args()
 
#开始检测鸟
checks = check_server(options.address,options.port,options.resource)
 
checks.check()

看下效果

Python实现的检测web服务器健康状况的小程序

Python 相关文章推荐
Python文档生成工具pydoc使用介绍
Jun 02 Python
在Mac OS系统上安装Python的Pillow库的教程
Nov 20 Python
Python中属性和描述符的正确使用
Aug 23 Python
详解Python读取yaml文件多层菜单
Mar 23 Python
python如何实现代码检查
Jun 28 Python
python 实现图片上传接口开发 并生成可以访问的图片url
Dec 18 Python
Python数据可视化图实现过程详解
Jun 12 Python
Python 操作 MySQL数据库
Sep 18 Python
python 三种方法实现对Excel表格的读写
Nov 19 Python
python中os.remove()用法及注意事项
Jan 31 Python
对Keras自带Loss Function的深入研究
May 25 Python
深入理解python协程
Jun 15 Python
python写的一个squid访问日志分析的小程序
Sep 17 #Python
python进程管理工具supervisor使用实例
Sep 17 #Python
Python实现备份文件实例
Sep 16 #Python
Python多进程编程技术实例分析
Sep 16 #Python
Python专用方法与迭代机制实例分析
Sep 15 #Python
跟老齐学Python之有容乃大的list(3)
Sep 15 #Python
跟老齐学Python之有容乃大的list(2)
Sep 15 #Python
You might like
PHP开发文件系统实例讲解
2006/10/09 PHP
php 正则 过滤html 的超链接
2009/06/02 PHP
Ajax实时验证用户名/邮箱等是否已经存在的代码打包
2011/12/01 PHP
PHP字符串的连接的简单实例
2013/12/30 PHP
使用laravel的migrate创建数据表的方法
2019/09/30 PHP
Thinkphp框架+Layui实现图片/文件上传功能分析
2020/02/07 PHP
iframe 上下滚动条如何默认在下方实现原理
2012/12/10 Javascript
jquery鼠标放上去显示悬浮层即弹出定位的div层
2014/04/25 Javascript
jQuery中:last-child选择器用法实例
2014/12/31 Javascript
理解JavaScript的变量的入门教程
2015/07/07 Javascript
使用jquery插件qrcode生成二维码
2015/10/22 Javascript
JavaScript的变量声明提升问题浅析(Hoisting)
2016/11/30 Javascript
bootstrap模态框消失问题的解决方法
2016/12/02 Javascript
jquery实现文字单行横移或翻转(上下、左右跳转)
2017/01/08 Javascript
nodejs获取微信小程序带参数二维码实现代码
2017/04/12 NodeJs
Vue.js用法详解
2017/11/13 Javascript
基于Vue2的独立构建与运行时构建的差别(详解)
2017/12/06 Javascript
vue的无缝滚动组件vue-seamless-scroll实例
2017/12/18 Javascript
简单了解Ajax表单序列化的实现方法
2019/06/14 Javascript
ng-alain的sf如何自定义部件的流程
2020/06/12 Javascript
js 数组当前行添加数据方法详解
2020/07/28 Javascript
NodeJS和浏览器中this关键字的不同之处
2021/03/03 NodeJs
在Python中利用Into包整洁地进行数据迁移的教程
2015/03/30 Python
使用Python的Bottle框架写一个简单的服务接口的示例
2015/08/25 Python
利用Python中的pandas库对cdn日志进行分析详解
2017/03/07 Python
python中利用xml.dom模块解析xml的方法教程
2017/05/24 Python
简单谈谈Python的pycurl模块
2018/04/07 Python
解决Python requests库编码 socks5代理的问题
2018/05/07 Python
python采集微信公众号文章
2018/12/20 Python
将python图片转为二进制文本的实例
2019/01/24 Python
利用Python半自动化生成Nessus报告的方法
2019/03/19 Python
Python tkinter三种布局实例详解
2020/01/06 Python
印度在线购买电子产品网站:Croma
2020/01/02 全球购物
最新计算机专业自荐信
2013/10/16 职场文书
工程承诺书怎么写
2014/05/24 职场文书
经营目标责任书
2015/05/08 职场文书