rabbitmq-monitor.py

转载git代码: https://github.com/iambocai/falcon-monit-scripts/tree/master/rabbitmq

#!/bin/env python
#-*- coding:utf-8 -*-

__author__ = 'iambocai'

import sys, urllib2, base64, json, time,socket


step = 60
#ip = socket.gethostname()
ip = "192.168.126.101"
ts = int(time.time())
keys = ('messages_ready', 'messages_unacknowledged')
rates = ('ack', 'deliver', 'deliver_get', 'publish')

request = urllib2.Request("http://%s:15672/api/queues" %ip)
# see #issue4
base64string = base64.b64encode('ops:123123')
request.add_header("Authorization", "Basic %s" % base64string)   
result = urllib2.urlopen(request)
data = json.loads(result.read())
tag = ''
#tag = sys.argv[1].replace('_',',').replace('.','=')

p = []
for queue in data:
    # ready and unack
    msg_total = 0
    for key in keys:
        q = {}
        q["endpoint"] = ip
        q['timestamp'] = ts
        q['step'] = step
        q['counterType'] = "GAUGE"
        q['metric'] = 'rabbitmq.%s' % key
        q['tags'] = 'name=%s,%s' % (queue['name'],tag)
        q['value'] = int(queue[key])
        msg_total += q['value']
        p.append(q)

    # total
    q = {}
    q["endpoint"] = ip
    q['timestamp'] = ts
    q['step'] = step
    q['counterType'] = "GAUGE"
    q['metric'] = 'rabbitmq.messages_total'
    q['tags'] = 'name=%s,%s' % (queue['name'],tag)
    q['value'] = msg_total
    p.append(q)

    # rates
    for rate in rates:
        q = {}
        q["endpoint"] = ip
        q['timestamp'] = ts
        q['step'] = step
        q['counterType'] = "GAUGE"
        q['metric'] = 'rabbitmq.%s_rate' % rate
        q['tags'] = 'name=%s,%s' % (queue['name'],tag)
        try:
            q['value'] = int(queue['message_stats']["%s_details" % rate]['rate'])
        except:
            q['value'] = 0
        p.append(q)

print json.dumps(p, indent=4)


method = "POST"
handler = urllib2.HTTPHandler()
opener = urllib2.build_opener(handler)
url = 'http://127.0.0.1:1988/v1/push'
request = urllib2.Request(url, data=json.dumps(p) )
request.add_header("Content-Type",'application/json')
request.get_method = lambda: method
try:
    connection = opener.open(request)
except urllib2.HTTPError,e:
    connection = e

# check. Substitute with appropriate HTTP code.
if connection.code == 200:
    print connection.read()
else:
    print '{"err":1,"msg":"%s"}' % connection
  • 假如有几个队列,那么作图的时候会有点麻烦,写个小脚本,生成falcon里面的规则
#!/bin/bash

for line in `cat 1`
do
    echo 
    echo 
    part1=`echo $line | awk '{print $1}'`
    for line2 in `cat 2`
    do
        part2=`echo $line2 | awk '{print $1}'`
        echo "$part1/$part2"
    done
done
  • rabbitmq-monitor可以提供的指标
rabbitmq.ack_rate
rabbitmq.deliver_get_rate
rabbitmq.deliver_rate
rabbitmq.messages_ready
rabbitmq.messages_total //这个指标重要,我们是高于5k就报警
rabbitmq.messages_unacknowledged
rabbitmq.publish_rate
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值