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 获取 Linux 系统信息的代码
Jul 13 Python
Python 两个列表的差集、并集和交集实现代码
Sep 21 Python
Python连接SQLServer2000的方法详解
Apr 19 Python
Python使用matplotlib和pandas实现的画图操作【经典示例】
Jun 13 Python
详解python中的装饰器
Jul 10 Python
Django 视图层(view)的使用
Nov 09 Python
Python3爬虫使用Fidder实现APP爬取示例
Nov 27 Python
python 实现敏感词过滤的方法
Jan 21 Python
python语言是免费还是收费的?
Jun 15 Python
详解查看Python解释器路径的两种方式
Oct 15 Python
解决python绘图使用subplots出现标题重叠的问题
Apr 30 Python
python spilt()分隔字符串的实现示例
May 21 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的XML文件解释类应用实例
2014/09/22 PHP
将FCKeditor导入PHP+SMARTY的实现方法
2015/01/15 PHP
PHP面向对象自动加载机制原理与用法分析
2016/10/14 PHP
redis查看连接数及php模拟并发创建redis连接的方法
2016/12/15 PHP
php使用lua+redis实现限流,计数器模式,令牌桶模式
2019/04/04 PHP
jquery 选择器部分整理
2009/10/28 Javascript
js控制网页前进和后退的方法
2015/06/08 Javascript
IE7浏览器窗口大小改变事件执行多次bug及IE6/IE7/IE8下resize问题
2015/08/21 Javascript
jquery+css实现动感的图片切换效果
2015/11/25 Javascript
javascript基础语法学习笔记
2016/01/04 Javascript
教你用javascript实现随机标签云效果_附代码
2016/03/16 Javascript
JS实现密码框的显示密码和隐藏密码功能示例
2016/12/26 Javascript
微信小程序button组件使用详解
2018/01/31 Javascript
详解vue-router导航守卫
2019/01/19 Javascript
Node.js Stream ondata触发时机与顺序的探索
2019/03/08 Javascript
javascript实现的时间格式加8小时功能示例
2019/06/13 Javascript
手写Vue弹窗Modal的实现代码
2019/09/11 Javascript
vue中音频wavesurfer.js的使用方法
2020/02/20 Vue.js
vue-router 路由传参用法实例分析
2020/03/06 Javascript
基于VUE实现判断设备是PC还是移动端
2020/07/03 Javascript
[03:28]2014DOTA2国际邀请赛 走近EG战队天才中单Arteezy
2014/07/12 DOTA
[10:39]DOTA2上海特级锦标赛音乐会纪录片
2016/03/21 DOTA
[01:11:35]Liquid vs LGD 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
tensorflow更改变量的值实例
2018/07/30 Python
Python最小二乘法矩阵
2019/01/02 Python
python实现微信定时每天和女友发送消息
2019/04/29 Python
python包的导入方式总结
2021/03/02 Python
大学运动会通讯稿
2014/01/28 职场文书
《一件运动衫》教学反思
2014/02/19 职场文书
青年文明号服务承诺
2014/03/31 职场文书
新品发布会策划方案
2014/06/08 职场文书
2015新年联欢晚会开场白
2014/12/14 职场文书
第28个世界无烟日活动总结
2015/02/10 职场文书
银行资信证明
2015/06/17 职场文书
读《钢铁是怎样炼成的》有感:百炼方成钢
2019/11/05 职场文书
Oracle 11g数据库使用expdp每周进行数据备份并上传到备份服务器
2022/06/28 Oracle