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 27 Python
在DigitalOcean的服务器上部署flaskblog应用
Dec 19 Python
深入理解 Python 中的多线程 新手必看
Nov 20 Python
Python实现定时任务
Feb 08 Python
Python编程使用NLTK进行自然语言处理详解
Nov 16 Python
python不换行之end=与逗号的意思及用途
Nov 21 Python
Python实现多态、协议和鸭子类型的代码详解
May 05 Python
python调试神器PySnooper的使用
Jul 03 Python
python将四元数变换为旋转矩阵的实例
Dec 04 Python
基于Python词云分析政府工作报告关键词
Jun 02 Python
使用Python项目生成所有依赖包的清单方式
Jul 13 Python
python解包用法详解
Feb 17 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
经典的PHPer为什么被认为是草根?
2007/04/02 PHP
php获取表单中多个同名input元素的值
2014/03/20 PHP
PHP fastcgi模式上传大文件(大约有300多K)报错
2014/09/28 PHP
php页面,mysql数据库转utf-8乱码,utf-8编码问题总结
2015/08/27 PHP
Laravel框架使用Redis的方法详解
2018/05/30 PHP
php实现根据身份证获取精准年龄
2020/02/26 PHP
基于jquery的防止大图片撑破页面的实现代码(立即缩放)
2011/10/24 Javascript
Jquery实现鼠标移上弹出提示框、移出消失思路及代码
2013/05/19 Javascript
jquery实现列表上下移动功能
2016/02/25 Javascript
微信小程序 教程之模板
2016/10/18 Javascript
webpack4.x打包过程详解
2018/07/18 Javascript
Vue2 监听属性改变watch的实例代码
2018/08/27 Javascript
Vue.js中对css的操作(修改)具体方式详解
2018/10/30 Javascript
vue 实现搜索的结果页面支持全选与取消全选功能
2019/05/10 Javascript
js实现html滑动图片拼图验证
2020/06/24 Javascript
[05:39]2014DOTA2国际邀请赛 DK晋级胜者组专访战队国士无双
2014/07/14 DOTA
在Django中编写模版节点及注册标签的方法
2015/07/20 Python
python 3.5实现检测路由器流量并写入txt的方法实例
2017/12/17 Python
Python实现可自定义大小的截屏功能
2018/01/20 Python
python 通过可变参数计算n个数的乘积方法
2019/06/13 Python
PyQt5 在label显示的图片中绘制矩形的方法
2019/06/17 Python
python add_argument()用法解析
2020/01/29 Python
使用pandas实现筛选出指定列值所对应的行
2020/12/13 Python
用Python制作音乐海报
2021/01/26 Python
HTML5 语音搜索(淘宝店语音搜素)
2013/01/03 HTML / CSS
个性化皮包、小袋、生活配件:Mon Purse
2019/03/26 全球购物
Gibson London官网:以地道的英国男装而著称
2019/12/06 全球购物
应届生法律求职信
2013/10/22 职场文书
大学考试作弊检讨书
2014/01/30 职场文书
党的群众路线教育实践活动个人剖析材料
2014/10/07 职场文书
有关水浒传的读书笔记
2015/06/25 职场文书
MongoDB安装使用并实现Python操作数据库
2021/06/28 MongoDB
mybatis 获取无数据的字段不显示的问题
2021/07/15 Java/Android
Mysql binlog日志文件过大的解决
2021/10/05 MySQL
Win11运行育碧游戏总是崩溃怎么办 win11玩育碧游戏出现性能崩溃的解决办法
2022/04/06 数码科技