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冒泡排序算法的实现代码
Nov 21 Python
Python中的Numpy入门教程
Apr 26 Python
python实现端口转发器的方法
Mar 13 Python
python3使用PyMysql连接mysql数据库实例
Feb 07 Python
Python使用matplotlib的pie函数绘制饼状图功能示例
Jan 08 Python
利用Opencv中Houghline方法实现直线检测
Feb 11 Python
python 异或加密字符串的实例
Oct 14 Python
python安装pil库方法及代码
Jun 25 Python
python爬虫 模拟登录人人网过程解析
Jul 31 Python
复化梯形求积分实例——用Python进行数值计算
Nov 20 Python
Python如何使用OS模块调用cmd
Feb 27 Python
Python Pandas知识点之缺失值处理详解
May 11 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中常用字符串处理代码片段整理
2011/11/07 PHP
PHP验证码类ValidateCode解析
2017/01/07 PHP
phpstorm 配置xdebug的示例代码
2019/03/31 PHP
javascript应用:Iframe自适应其加载的内容高度
2007/04/10 Javascript
javascript 仿QQ滑动菜单效果代码
2010/09/03 Javascript
浏览器加载、渲染和解析过程黑箱简析
2012/11/29 Javascript
js闭包实例汇总
2014/11/09 Javascript
js代码延迟一定时间后执行一个函数的实例
2017/02/15 Javascript
JSON与JS对象的区别与对比
2017/03/01 Javascript
JavaScript控制输入框中只能输入中文、数字和英文的方法【基于正则实现】
2017/03/03 Javascript
深入理解Vue.js源码之事件机制
2017/09/27 Javascript
vue一个页面实现音乐播放器的示例
2018/02/06 Javascript
通过vue-cli3构建一个SSR应用程序的方法
2018/09/13 Javascript
JS事件流与事件处理程序实例分析
2019/08/16 Javascript
mpvue网易云短信接口实现小程序短信登录的示例代码
2020/04/03 Javascript
vue + node如何通过一个Txt文件批量生成MP3并压缩成Zip
2020/06/02 Javascript
Python学习笔记之解析json的方法分析
2017/04/21 Python
解决Python字典写入文件出行首行有空格的问题
2017/09/27 Python
python的socket编程入门
2018/01/29 Python
pandas按若干个列的组合条件筛选数据的方法
2018/04/11 Python
浅析python 中大括号中括号小括号的区分
2019/07/29 Python
序列化Python对象的方法
2020/08/01 Python
详解Pycharm与anaconda安装配置指南
2020/08/25 Python
Expedia意大利旅游网站:酒店、机票和租车预订
2017/10/30 全球购物
AVI-8手表美国官方商店:AVI-8 USA
2019/04/10 全球购物
美国家用和厨房电器销售网站:Appliances Connection
2020/01/24 全球购物
副护士长竞聘演讲稿
2014/04/30 职场文书
片区教研活动总结
2014/07/02 职场文书
禁毒宣传活动总结
2014/08/26 职场文书
工伤事故证明
2014/10/20 职场文书
2014年学前班工作总结
2014/12/08 职场文书
责任书格式
2015/01/29 职场文书
公务员年度个人总结
2015/02/12 职场文书
小米11和iphone12哪个值得买?小米11对比iphone12评测
2021/04/21 数码科技
如何将numpy二维数组中的np.nan值替换为指定的值
2021/05/14 Python
CSS变量实现主题切换的方法
2021/06/23 HTML / CSS