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通过定义一个类实例作为ftp回调方法
May 04 Python
安装dbus-python的简要教程
May 05 Python
Tensorflow实现AlexNet卷积神经网络及运算时间评测
May 24 Python
Python 爬取携程所有机票的实例代码
Jun 11 Python
对python字典过滤条件的实例详解
Jan 22 Python
python实现从本地摄像头和网络摄像头截取图片功能
Jul 11 Python
python多线程实现TCP服务端
Sep 03 Python
Python numpy.zero() 初始化矩阵实例
Nov 27 Python
python装饰器相当于函数的调用方式
Dec 27 Python
Python计算IV值的示例讲解
Feb 28 Python
Python类及获取对象属性方法解析
Jun 15 Python
PyTorch梯度裁剪避免训练loss nan的操作
May 24 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常用函数小技巧
2008/09/11 PHP
PHP调用C#开发的dll类库方法
2014/07/28 PHP
PHP查看当前变量类型的方法
2015/07/31 PHP
Zend Framework分页类用法详解
2016/03/22 PHP
Array.prototype.slice 使用扩展
2010/06/09 Javascript
Javascript倒计时代码
2010/08/12 Javascript
js获取GridView中行数据的两种方法 分享
2013/07/13 Javascript
详解javascript跨浏览器事件处理程序
2016/03/27 Javascript
基于MVC5和Bootstrap的jQuery TreeView树形控件(一)之数据支持json字符串、list集合
2016/08/11 Javascript
简单的vue-resourse获取json并应用到模板示例
2017/02/10 Javascript
Javarscript中模块(module)、加载(load)与捆绑(bundle)详解
2017/05/28 Javascript
微信小程序三级联动地址选择器的实例代码
2017/07/12 Javascript
在axios中使用params传参的时候传入数组的方法
2018/09/25 Javascript
用vscode开发vue应用的方法步骤
2019/05/06 Javascript
vue实现文件上传读取及下载功能
2020/11/17 Javascript
小程序实现按下录音松开识别语音
2019/11/22 Javascript
jQuery操作选中select下拉框的值代码实例
2020/02/07 jQuery
JS自定义滚动条效果
2020/03/13 Javascript
Python 文件操作技巧(File operation) 实例代码分析
2008/08/11 Python
Python 遍历子文件和所有子文件夹的代码实例
2016/12/21 Python
浅谈python迭代器
2017/11/08 Python
Python设计模式之解释器模式原理与用法实例分析
2019/01/10 Python
python3+pyqt5+itchat微信定时发送消息的方法
2019/02/20 Python
使用Python进行体育竞技分析(预测球队成绩)
2019/05/16 Python
关于numpy中eye和identity的区别详解
2019/11/29 Python
Python使用指定字符长度切分数据示例
2019/12/05 Python
Python 实现打印单词的菱形字符图案
2020/04/12 Python
Python bisect模块原理及常见实例
2020/06/17 Python
将一个数的从第5位开始的7个数取出,其余位置0
2016/05/26 面试题
烹调加工管理制度
2014/02/04 职场文书
大一学生职业生涯规划
2014/03/11 职场文书
秋冬农业生产标语
2014/10/09 职场文书
项目负责人岗位职责
2015/02/15 职场文书
2016先进工作者事迹材料
2016/02/25 职场文书
一篇文章告诉你如何实现Vue前端分页和后端分页
2022/02/18 Vue.js
「约定的梦幻岛」作画发布诺曼生日新绘
2022/03/21 日漫