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使用百度API上传文件到百度网盘代码分享
Nov 08 Python
仅利用30行Python代码来展示X算法
Apr 01 Python
Python实现的堆排序算法原理与用法实例分析
Nov 22 Python
解决Python3 抓取微信账单信息问题
Jul 19 Python
Python爬虫 urllib2的使用方法详解
Sep 23 Python
Django1.11配合uni-app发起微信支付的实现
Oct 12 Python
python集合常见运算案例解析
Oct 17 Python
django序列化serializers过程解析
Dec 14 Python
Python实现AI自动抠图实例解析
Mar 05 Python
python获取本周、上周、本月、上月及本季的时间代码实例
Sep 08 Python
python 装饰器的使用示例
Oct 10 Python
如何用tempfile库创建python进程中的临时文件
Jan 28 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
国产动画《伍六七》原声大碟大卖,啊哈娱乐引领音乐赋能IP的新尝试
2020/03/08 国漫
PHP4实际应用经验篇(3)
2006/10/09 PHP
让你同时上传 1000 个文件 (二)
2006/10/09 PHP
PHP 多维数组排序(usort,uasort)
2010/06/30 PHP
php微信公众平台开发(四)回复功能开发
2016/12/06 PHP
Aster vs KG BO3 第一场2.18
2021/03/10 DOTA
jQuery JSON的解析方式分享
2011/04/05 Javascript
利用js实现在浏览器状态栏显示访问者在本页停留的时间
2013/12/29 Javascript
jQuery的选择器中的通配符使用介绍
2014/03/20 Javascript
javascript实现日期格式转换
2014/12/16 Javascript
jQuery基础语法实例入门
2014/12/23 Javascript
快速学习jQuery插件 Cookie插件使用方法
2015/12/01 Javascript
javascript 用函数实现继承详解
2016/05/28 Javascript
纯JS焦点图特效实例(可一个页面多用)
2016/12/07 Javascript
JS 组件系列之 bootstrap treegrid 组件封装过程
2017/04/28 Javascript
如何理解Vue的v-model指令的使用方法
2018/07/19 Javascript
Vue 实现展开折叠效果的示例代码
2018/08/27 Javascript
微信小程序自定义toast组件的方法详解【含动画】
2019/05/11 Javascript
vue项目中实现缓存的最佳方案详解
2019/07/11 Javascript
vue 实现Web端的定位功能 获取经纬度
2019/08/08 Javascript
浅谈Layui的eleTree树式选择器使用方法
2019/09/25 Javascript
jquery实现抽奖功能
2020/10/22 jQuery
Zabbix实现微信报警功能
2016/10/09 Python
python保存数据到本地文件的方法
2018/06/23 Python
PyCharm导入python项目并配置虚拟环境的教程详解
2019/10/13 Python
使用Python脚本从文件读取数据代码实例
2020/01/19 Python
python实现斗地主分牌洗牌
2020/06/22 Python
CSS3教程(10):CSS3 HSL声明设置颜色
2009/04/02 HTML / CSS
欧舒丹比利时官网:L’OCCITANE比利时
2017/04/25 全球购物
Wallis官网:英国女装零售商
2020/01/21 全球购物
奖励通知
2015/04/22 职场文书
初中家长意见
2015/06/03 职场文书
标准发言稿结尾
2019/07/18 职场文书
抖音短视频(douyin)去水印工具的实现代码
2021/03/30 Javascript
嵌入式Redis服务器在Spring Boot测试中的使用教程
2021/07/21 Redis