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初学者的一些编程技巧
Apr 03 Python
按日期打印Python的Tornado框架中的日志的方法
May 02 Python
Java中重定向输出流实现用文件记录程序日志
Jun 12 Python
Python argv用法详解
Jan 08 Python
利用python打印出菱形、三角形以及矩形的方法实例
Aug 08 Python
python try 异常处理(史上最全)
Mar 07 Python
关于pytorch中网络loss传播和参数更新的理解
Aug 20 Python
Python性能分析工具Profile使用实例
Nov 19 Python
使用NumPy读取MNIST数据的实现代码示例
Nov 20 Python
Python : turtle色彩控制实例详解
Jan 19 Python
Python 求向量的余弦值操作
Mar 04 Python
用Python将库打包发布到pypi
Apr 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
php 论坛采集程序 模拟登陆,抓取页面 实现代码
2009/07/09 PHP
完美的php分页类
2017/10/24 PHP
解决laravel session失效的问题
2019/10/14 PHP
input 高级限制级用法
2009/03/26 Javascript
Javascript学习笔记2 函数
2010/01/11 Javascript
javaScript 关闭浏览器 (不弹出提示框)
2010/01/31 Javascript
JavaScript Event事件学习第一章 Event介绍
2010/02/07 Javascript
浅说js变量
2011/05/25 Javascript
使用jQuery动态加载js脚本文件的方法
2014/04/03 Javascript
AngularJS基础 ng-cloak 指令简单示例
2016/08/01 Javascript
nodeJs内存泄漏问题详解
2016/09/05 NodeJs
浅谈JS使用[ ]来访问对象属性
2016/09/21 Javascript
基于bootstrap-datetimepicker.js不支持IE8的快速解决方法
2016/11/07 Javascript
Angular实现点击按钮控制隐藏和显示功能示例
2017/12/29 Javascript
jquery实现点击a链接,跳转之后,该a链接处显示背景色的方法
2018/01/18 jQuery
获取layer.open弹出层的返回值方法
2018/08/20 Javascript
M2实现Nodejs项目自动部署的方法步骤
2019/05/05 NodeJs
python算法演练_One Rule 算法(详解)
2017/05/17 Python
Django实现支付宝付款和微信支付的示例代码
2018/07/25 Python
Python学习笔记之图片人脸检测识别实例教程
2019/03/06 Python
图文详解python安装Scrapy框架步骤
2019/05/20 Python
python SQLAlchemy的Mapping与Declarative详解
2019/07/04 Python
python点击鼠标获取坐标(Graphics)
2019/08/10 Python
python os.path.isfile()因参数问题判断错误的解决
2019/11/29 Python
python django中8000端口被占用的解决
2019/12/17 Python
tensorflow入门:TFRecordDataset变长数据的batch读取详解
2020/01/20 Python
python烟花效果的代码实例
2020/02/25 Python
python 生成正态分布数据,并绘图和解析
2020/12/21 Python
英国性感内衣和睡衣品牌:Bluebella
2018/01/26 全球购物
儿科主治医生个人求职信
2013/09/23 职场文书
拆迁委托协议书
2014/09/15 职场文书
没有孩子的离婚协议书怎么写
2014/09/17 职场文书
2014年大学团支部工作总结
2014/12/02 职场文书
走近毛泽东观后感
2015/06/04 职场文书
校运会班级霸气口号
2015/12/24 职场文书
openEuler 搭建java开发环境的详细过程
2022/06/10 Servers