✅ 1. 编写 RabbitMQ 队列监控脚本
创建脚本文件 /usr/local/bin/zbx_rabbitmq_metric.sh
并写入以下内容:
#!/bin/bash
# /usr/local/bin/zbx_rabbitmq_metric.sh
QUEUE=$1
METRIC=$2
USER=$3
PASS=$4
if [[ -z "$QUEUE" || -z "$METRIC" || -z "$USER" || -z "$PASS" ]]; then
echo "Missing arguments"
exit 1
fi
# URL encode queue name
ENCODED_QUEUE=$(printf %s "$QUEUE" | jq -s -R -r @uri)
# 调用 RabbitMQ API(注意修改虚拟主机名 prod_kac_saas)
API_URL="http://localhost:15672/api/queues/prod_kac_saas/${ENCODED_QUEUE}"
RESPONSE=$(curl -s -u "$USER:$PASS" "$API_URL")
# 提取目标字段值
VALUE=$(echo "$RESPONSE" | jq -r ".$METRIC")
# 处理空值
if [[ "$VALUE" == "null" || -z "$VALUE" ]]; then
echo 0
else
echo "$VALUE"
fi
设置执行权限:
chmod +x /usr/local/bin/zbx_rabbitmq_metric.sh
✅ 2. Zabbix Agent 配置
编辑 /etc/zabbix/zabbix_agentd.d/rabbitmq.conf
文件,加入以下内容:
UserParameter=rabbitmq.queue.metric[*],/usr/local/bin/zbx_rabbitmq_metric.sh "$1" "$2" "$3" "$4"
然后重启 Zabbix Agent:
systemctl restart zabbix-agent
✅ 3. Zabbix Web 配置
✅ 添加宏(Template 或 Host 层级)
前往 Zabbix Web → Configuration → Templates (或 Hosts),找到应用的模板或主机,添加以下宏:
宏名称 | 宏值 |
---|---|
{$RABBITMQ.API.USER} |
RabbitMQ 的用户名 |
{$RABBITMQ.API.PASSWORD} |
RabbitMQ 的密码 |
✅ 添加监控项(Item)
-
名称 :
pull_alarms: Consumers
-
键值:
rabbitmq.queue.metric[pull_alarms,consumers,{$RABBITMQ.API.USER},{$RABBITMQ.API.PASSWORD}]
-
类型:Zabbix agent
-
数据类型:Numeric (unsigned)
-
更新间隔:30s 或其他合适间隔
-
单位:个
✅ 可选:添加图形 (Graph)
你可以为该监控项添加图形,例如:
-
图形名称 :
pull_alarms: Number of consumers
-
Y轴单位:Consumers
-
添加 Item:上面创建的监控项
✅ 4. 验证监控效果
执行测试命令检查是否返回消费者数量:
zabbix_agentd -t 'rabbitmq.queue.metric[pull_alarms,consumers,admin,password]'
若输出非 0,表示监控脚本正常工作,Zabbix 也可采集到该指标。
📌 总结
-
监控方式:Zabbix agent + RabbitMQ HTTP API。
-
核心指标:队列
pull_alarms
的消费者数量。 -
扩展:只需替换
pull_alarms
为其他队列名,即可通用化监控。