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使用正则表达式分析网页中的图片并进行替换的方法
Mar 26 Python
Python中isnumeric()方法的使用简介
May 19 Python
python 链接和操作 memcache方法
Mar 04 Python
Python管理Windows服务小脚本
Mar 12 Python
Selenium的使用详解
Oct 19 Python
python实现一组典型数据格式转换
Dec 15 Python
Python 判断奇数偶数的方法
Dec 20 Python
基于PyQt4和PySide实现输入对话框效果
Feb 27 Python
python图的深度优先和广度优先算法实例分析
Oct 26 Python
Python创建一个元素都为0的列表实例
Nov 28 Python
使用Python发现隐藏的wifi
Mar 04 Python
OpenCV-Python实现人脸磨皮算法
Jun 07 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中spl_autoload详解
2014/10/17 PHP
PHP实现支付宝即时到账功能
2016/12/21 PHP
discuz论坛更换域名,详细文件修改步骤
2020/12/09 PHP
JavaScript中的集合及效率
2010/01/08 Javascript
使用Jquery搭建最佳用户体验的登录页面之记住密码自动登录功能(含后台代码)
2011/07/10 Javascript
用js替换除数字与逗号以外的所有字符的代码
2014/06/07 Javascript
JQuery实现动态适时改变字体颜色的方法
2015/03/10 Javascript
node.js express安装及示例网站搭建方法(分享)
2016/08/22 Javascript
js实现获取鼠标当前的位置
2016/12/14 Javascript
jQuery实现字体颜色渐变效果的方法
2017/03/29 jQuery
bootstrap table单元格新增行并编辑
2017/05/19 Javascript
vue使用el-upload上传文件及Feign服务间传递文件的方法
2019/03/15 Javascript
js类的继承定义与用法分析
2019/06/21 Javascript
node.js中npm包管理工具用法分析
2020/02/14 Javascript
原生js实现ajax请求和JSONP跨域请求操作示例
2020/03/14 Javascript
python单链表实现代码实例
2013/11/21 Python
python如何让类支持比较运算
2018/03/20 Python
Flask框架实现给视图函数增加装饰器操作示例
2018/07/16 Python
IntelliJ IDEA安装运行python插件方法
2018/12/10 Python
Python根据欧拉角求旋转矩阵的实例
2019/01/28 Python
Python生成rsa密钥对操作示例
2019/04/26 Python
Python+Redis实现布隆过滤器
2019/12/08 Python
Python中读取文件名中的数字的实例详解
2020/12/25 Python
Html5 Canvas 实现一个“刮刮乐”游戏
2019/09/05 HTML / CSS
Joules美国官网:出色的英国风格
2017/10/30 全球购物
Origins加拿大官网:雅诗兰黛集团高端植物护肤品牌
2017/11/19 全球购物
俄罗斯大型在线书店:Читай-город
2019/10/10 全球购物
使用C#编写创建一个线程的代码
2013/01/22 面试题
企业读书活动总结
2014/06/30 职场文书
2014离婚协议书范文
2014/09/10 职场文书
教师党员个人剖析材料
2014/09/29 职场文书
2014年乡镇工会工作总结
2014/12/02 职场文书
mysql字符串截取函数小结
2021/04/05 MySQL
OpenCV-Python 实现两张图片自动拼接成全景图
2021/06/11 Python
Python Pandas pandas.read_sql函数实例用法
2021/06/21 Python
MongoDB使用场景总结
2022/02/24 MongoDB