zabbix监控rabbitmq队列和进程--基于自动发现
Posted 普通网友
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了zabbix监控rabbitmq队列和进程--基于自动发现相关的知识,希望对你有一定的参考价值。
Zabbix5.0监控RabbitMQ队列和进程–基于自动发现
-
Zabbix添加UserParameter,内容如下:
UserParameter=rabbitmq[],/usr/bin/python /usr/local/sbin/rabbitmq.py $1
UserParameter=messages[],/etc/zabbix/scripts/rabbitmq/messages.sh $1 -
创建rabbitmq.py和messages.sh脚本,内容如下
#cat rabbitmq.py
#!/usr/bin/python
#coding:utf8
import requests
import sys
import json
class RabbitMQ:
def __init__(self, user='zabbix', passwd='zabbix123', server_ip='172.21.2.5', server_port=15672, vhost="/"):
self.user = user
self.password = passwd
self.server_ip = server_ip
self.server_port = server_port
self.vhost = vhost
def GetQueues(self):
# 连接并获取RabbitMQ数据,如果传getallname参数代表获取所有的队列名称,主要用于自动发现,如果不等于,那就是获取指定队列的数据
if sys.argv[1] != "getallname":
connections = requests.get("http://0:1/api/queues/2/3".format(self.server_ip, self.server_port, self.vhost, sys.argv[1]), auth=(self.user, self.password))
else:
connections = requests.get("http://0:1/api/queues".format(self.server_ip, self.server_port), auth=(self.user, self.password))
connections = connections.json()
return connections
def GetAllQueuesName(self):
# 获取所有队名称,格式化为Zabbix指定的格式,以便自动发现
list1= []
result = self.GetQueues()
for n in range(len(result)):
list1.append("#QUEUES_NAME": result[n]["name"])
return list1
if __name__ == '__main__':
mq = RabbitMQ()
if sys.argv[1] != "getallname":
result = mq.QueuesDataProcessing()
print(result)
else:
result = mq.GetAllQueuesName()
names = "data": result
print(json.dumps(names))
#cat messages.sh
#!/bin/bash
curl -s -u guest:guest http://127.0.0.1:15672/api/queues/%2f/$1 |awk -F '"messages":' 'print $2'|awk -F , 'print $1'
#guest:guest是RabbitMQ的登陆账号密码,使用冒号分隔,只能在本地登陆,如不能登陆请按照第5步自行创建账号密码
-
重启zabbix客户端服务:systemctl restart zabbix-agent
-
zabbix web界面导入Zabbix模板rabbitmq.xml并关联至指定的主机(模板名称RabbitMQ-Queues)
<?xml version="1.0" encoding="UTF-8"?>
#cat rabbitmq.xml<zabbix_export>
5.0
2022-03-14T05:47:06Z
Templates
RabbitMQ-Queues
RabbitMQ-Queues
Templates
RabbitMQ Process
RabbitMQ Queues
RabbitMQ进程数量
proc.num[beam.smp]
RabbitMQ Process
last()=0
RabbitMQ进程挂了
INFO
<discovery_rules>
<discovery_rule>
RabbitMQ 队列监控
rabbitmq[getallname]
30s
#QUEUES_NAME
A
<item_prototypes>
<item_prototype>
RabbitMQ messages: #QUEUES_NAME
messages[#QUEUES_NAME]
30s
RabbitMQ Queues
</item_prototype>
</item_prototypes>
<graph_prototypes>
<graph_prototype>
RabbitMQ messages: #QUEUES_NAME 队列
<graph_items>
<graph_item>
1
1A7C11
RabbitMQ-Queues
messages[#QUEUES_NAME]
</graph_item>
</graph_items>
</graph_prototype>
</graph_prototypes>
</discovery_rule>
</discovery_rules>
队列
1
2
<screen_items>
<screen_item>
0
RabbitMQ messages: #QUEUES_NAME 队列
RabbitMQ-Queues
500
100
0
1
1
1
0
0
0
0
<sort_triggers>0</sort_triggers>
<max_columns>2</max_columns>
</screen_item>
</screen_items>
RabbitMQ进程数量图形
<graph_items>
<graph_item>
1
F63100
RabbitMQ-Queues
proc.num[beam.smp]
</graph_item>
</graph_items>
</zabbix_export> -
在rabbitmq主机添加可以远程连接的用户,并设置权限:
#创建用户 rabbitmqctl add_user 用户名 密码
rabbitmqctl add_user zabbix zabbix123
#设置用户权限 rabbitmqctl set_permissions -p “/” 用户名 “.” “.” “."
rabbitmqctl set_permissions -p “/” zabbix “.” “.” ".”
#设置用户角色 rabbitmqctl set_user_tags 用户名 administrator
rabbitmqctl set_user_tags zabbix administrator -
Rabbitmq进程监控:
ps -ef|grep rabbitmq找到进程名称,在模板中添加监控项,键值proc.num[beam.smp]
键值来源于键值选择中,将进程名添加即可,也可选择使用端口进行监控,自己选择。
添加触发器:
以上是关于zabbix监控rabbitmq队列和进程--基于自动发现的主要内容,如果未能解决你的问题,请参考以下文章
Celery + Flower + FastAPI + RabbitMQ ,Python实现异步消息队列和监控