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中使用异常处理来判断运行的操作系统平台方法
Jan 22 Python
Python之日期与时间处理模块(date和datetime)
Feb 16 Python
Python操作SQLite数据库的方法详解【导入,创建,游标,增删改查等】
Jul 11 Python
pytorch + visdom CNN处理自建图片数据集的方法
Jun 04 Python
Django添加feeds功能的示例
Aug 07 Python
python-opencv颜色提取分割方法
Dec 08 Python
Python进阶之自定义对象实现切片功能
Jan 07 Python
Django的models模型的具体使用
Jul 15 Python
pycharm重命名文件的方法步骤
Jul 29 Python
python实现宿舍管理系统
Nov 22 Python
基于python实现计算且附带进度条代码实例
Mar 31 Python
python 提取html文本的方法
May 20 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 MsSql server时遇到的中文编码问题
2009/06/11 PHP
删除html标签得到纯文本可处理嵌套的标签
2014/04/28 PHP
PHP小技巧之JS和CSS优化工具Minify的使用方法
2014/05/19 PHP
PHP cURL初始化和执行方法入门级代码
2015/05/28 PHP
joomla组件开发入门教程
2016/05/04 PHP
getElementById在任意一款浏览器中都可以用吗的疑问回复
2007/05/13 Javascript
javascript 页面划词搜索JS
2009/09/28 Javascript
input的focus方法使用
2010/03/13 Javascript
需要做特殊处理的DOM元素属性的访问
2010/11/05 Javascript
js倒计时显示实例
2016/12/11 Javascript
Javascript调试之console对象——你不知道的一些小技巧
2017/07/10 Javascript
认识less和webstrom的less配置方法
2017/08/02 Javascript
vue中input的v-model清空操作
2019/09/06 Javascript
关于angular引入ng-zorro的问题浅析
2020/09/09 Javascript
解决antd Form 表单校验方法无响应的问题
2020/10/27 Javascript
[48:32]VGJ.T vs Fnatic 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python获取指定目录下所有文件名列表的方法
2015/05/20 Python
Python中动态创建类实例的方法
2017/03/24 Python
详解Python读取配置文件模块ConfigParser
2017/05/11 Python
Python编程实现线性回归和批量梯度下降法代码实例
2018/01/04 Python
详谈Pandas中iloc和loc以及ix的区别
2018/06/08 Python
解决tensorflow测试模型时NotFoundError错误的问题
2018/07/27 Python
python散点图实例之随机漫步
2018/08/27 Python
Flask框架路由和视图用法实例分析
2019/11/07 Python
python3实现raspberry pi(树莓派)4驱小车控制程序
2020/02/12 Python
Python获取浏览器窗口句柄过程解析
2020/07/25 Python
Python 如何反方向迭代一个序列
2020/07/28 Python
Python如何进行时间处理
2020/08/06 Python
python 利用matplotlib在3D空间绘制二次抛物面的案例
2021/02/06 Python
学院书画协会部门岗位职责
2013/12/01 职场文书
六十岁生日答谢词
2014/01/10 职场文书
教师档案管理制度
2014/01/23 职场文书
教师自我鉴定范文
2014/03/20 职场文书
党校团干班培训心得体会
2016/01/06 职场文书
python中出现invalid syntax报错的几种原因分析
2022/02/12 Python
4种方法python批量修改替换列表中元素
2022/04/07 Python