转载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