需求:用python脚本统计线上AMQ的Number of Pending Messages数量,当达到10的时候发送Email报警邮件
脚本实现逻辑如下:
1)用户名密码登陆到WEB页面
2)获取WEB页面的源代码
3)用正则表达式匹配AMQ的Number of Pending Messages值
4)判断是否达到报警阀值
5)如果达到报警阀值,发送Email报警邮件

在登陆AMQ页面的时候用Fiddler工具(www.fiddler2.com)查看HTTP请求的详细过程。

Fiddler工具的Headers可以查看HTTP请求的Header头信息。

Python脚本监控线上AMQ Number of Pending Messages数量_Authentication

Fiddler工具的Auth可以看到客户端发送过来的用户名和密码信息。

Python脚本监控线上AMQ Number of Pending Messages数量_Authentication_02

Fiddler工具的RAW可以查看详细的消息结构

Python脚本监控线上AMQ Number of Pending Messages数量_Authentication_03

在Headers头中看到的信息Authorization: Basic YWRtaW46YWRtaW5AdGNsdWI= 红色的部分其实是HTTP认证的用户名和密码,是通过base64加密的,在python通过base64可以解密出用户名和密码,和Auth里面看到的一致。

>>> import base64
>>> s = 'YWRtaW46YWRtaW5AdGNsdWI='
>>> import tab
>>> import base64   
>>> s = 'YWRtaW46YWRtaW5AdGNsdWI='
>>> print base64.b64
>>> print base64.b64decode(s)
admin:admin@tclub

在Python脚本中,发送http请求的时候把fiddler分析出来的这个“Authorization: Basic YWRtaW46YWRtaW4=”加上就OK了,就是把用户名密码转换成base64加到header头里面。

#!/usr/bin/env python
#sfzhang131029
#encoding:utf-8
import re
import os
import sys
import time
import base64
import urllib2
date = time.strftime('%Y-%m%d-%H:%M')
login_url = 'http://192.168.1.244:8161/admin/xml/queues.jsp'
req = urllib2.Request(login_url)
Username = 'admin'
Password = 'admin@tclub'
max_size = 0
#把用户名密码转换成Base64编码
base64_info = base64.encodestring(
                '%s:%s' % (Username, Password))[:-1]
print base64_info
auth_header =  "Basic %s" % base64_info
#把Fiddler分析出来"Authorization: Basic YWRtaW46YWRtaW5AdGNsdWI="添加到HTTP请求头里面
req.add_header("Authorization", auth_header)
try:
    handle = urllib2.urlopen(req)
except IOError, e:
    print "your username or password is wrong"
    sys.exit(1)
html = handle.read()
#用正则表达匹配AMQ"Number of Pending Messages"数值
r1 = r'size="[0-9]*"'
size_list = re.findall(r1,html)
#print size_list
#找出size最大值
for i in size_list:
    tmp = int(i.split('=')[1].replace('"',''))
    if tmp > max_size:
        max_size = tmp
print max_size
mail_CMD = "echo '%s The number of apache amq entry connections is more then %d' and check! |mail -s 'Apache amq alarm' zhangshifeng@tclub.cn" % (date,max_size)
#用if判断如果超出阀值,则发送报警邮件
if max_size < 10:
    print "%s The apache amq is ok!" % date
else:
    print  "%s The number of apache amq entry connections is more then %d and check!" % (date,max_size)
    os.system(mail_CMD)

总结:Fiddler是最强大最好用的Web调试工具之一,它能记录所有客户端和服务器的http和https请求,允许你监视,设置断点,甚至修改输入输出数据,Fiddler无论对开发人员或者测试人员来说,都是非常有用的工具。