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 相关文章推荐
推荐11个实用Python库
Jan 23 Python
Python 的内置字符串方法小结
Mar 15 Python
Python实现将sqlite数据库导出转成Excel(xls)表的方法
Jul 17 Python
python使用turtle库绘制时钟
Mar 25 Python
opencv python 图像去噪的实现方法
Aug 31 Python
Python产生Gnuplot绘图数据的方法
Nov 09 Python
对pandas通过索引提取dataframe的行方法详解
Feb 01 Python
Django上线部署之IIS的配置方法
Aug 22 Python
春节到了 教你使用python来抢票回家
Jan 06 Python
使用已经得到的keras模型识别自己手写的数字方式
Jun 29 Python
Python 的 __str__ 和 __repr__ 方法对比
Sep 02 Python
python 装饰器的基本使用
Jan 13 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
解析zend studio中直接导入svn中的项目的方法步骤
2013/06/21 PHP
PHP中PDO的事务处理分析
2016/04/07 PHP
PHP基于GD2函数库实现验证码功能示例
2019/01/27 PHP
同一页面多个商品倒计时JS 基于面向对象的javascript
2012/02/16 Javascript
window.onload和$(function(){})的区别介绍
2013/10/30 Javascript
多选列表框动态添加,移动,删除,全选等操作的简单实例
2014/01/13 Javascript
js处理表格对table进行修饰
2014/05/26 Javascript
$(document).ready(function() {})不执行初始化脚本
2014/06/19 Javascript
JavaScript实现的双向跨域插件分享
2015/01/31 Javascript
jquery不常用方法汇总
2015/07/26 Javascript
百度地图api如何使用
2015/08/03 Javascript
延时加载JavaScript代码提高速度
2015/12/27 Javascript
js实现div在页面拖动效果
2016/05/04 Javascript
JavaScript之cookie技术详解
2016/11/18 Javascript
JavaScript实现的搜索及高亮显示功能示例
2017/08/14 Javascript
vue中进入详情页记住滚动位置的方法(keep-alive)
2018/09/21 Javascript
详解javascript replace高级用法
2019/02/17 Javascript
createObjectURL方法实现本地图片预览
2019/09/30 Javascript
[00:36]我的中国心——Serenity vs Fnatic
2018/08/21 DOTA
Python的垃圾回收机制深入分析
2014/07/16 Python
web.py获取上传文件名的正确方法
2014/08/26 Python
举例讲解Linux系统下Python调用系统Shell的方法
2015/11/07 Python
python实现手机通讯录搜索功能
2018/02/22 Python
django 自定义filter 判断if var in list的例子
2019/08/20 Python
Python中文分词库jieba,pkusegwg性能准确度比较
2020/02/11 Python
Python自定义sorted排序实现方法详解
2020/09/18 Python
python中Pexpect的工作流程实例讲解
2021/03/02 Python
CSS3实现缺角矩形,折角矩形以及缺角边框
2019/12/20 HTML / CSS
美国LOGO设计公司:The Logo Company
2018/07/16 全球购物
会计专业毕业生推荐信
2013/11/05 职场文书
大学生秋游活动方案
2014/02/17 职场文书
2015年小班保育员工作总结
2015/05/27 职场文书
小学六一儿童节活动开幕词
2016/03/04 职场文书
端午节将至,用Python爬取粽子数据并可视化,看看网友喜欢哪种粽子吧!
2021/06/11 Python
opencv用VS2013调试时用Image Watch插件查看图片
2021/07/26 Python
td 内容自动换行 table表格td设置宽度后文字太多自动换行
2022/12/24 HTML / CSS