https://aeric.io/post/rabbitmq-prometheus-monitoring/
https://www.cnblogs.com/caoweixiong/p/12736573.html
https://www.codenong.com/jsab2f7c1e5ce0/
https://wqblogs.com/2020/04/09/监控rabbitmq/
zabbix监控
1、rabbitmq概述
rabbitmq是一个消息中间件,当大量消息生产时,但是消费者无法进行消费,可能会导致消息堆积,面对这种情况应当如何去预防呢?可以通过zabbix监控来rabbitmq消息队列是否出现堆积
使用的是rabbitmq的命令来实现的
rabbitmqctl list_queues
2、rabbitmq监控配置
由于zabbix通过rabbitmqctl权限方面并且还要获取rabbitmq的用户名和密码,所以采用crontab每分钟获取一次rabbitmq获取消息队列名称和消息堆积的数据。具体实现如下,通过一个脚本实现
# vim /usr/local/zabbix/queues_list.sh
#!/bin/bash
rabbitmqctl list_queues |grep -v 'Listing queues ...' | grep -v Timeout: > /tmp/.queues.txt
# vim /usr/local/zabbix/queues_list.sh
#!/bin/bash
rabbitmqctl list_queues |grep -v 'Listing queues ...' | grep -v Timeout: > /tmp/.queues.txt
在crontab -e 添加任务,特别注意:rabbitmq不是绝对路径,所以crontab环境变量一般为/bin,特别注意rabbitmqctl相关命令做个软连接至/bin目录下
# ln -s /sbin/rabbitmqctl /bin/rabbitmqctl
# ln -s /usr/lib/rabbitmq/bin/rabbitmq-env /bin/rabbitmq-env
# ln -s /usr/lib/erlang/bin/erl /bin/erl
# RMQ消息告警监控
*/1 * * * * /bin/bash /usr/local/zabbix/queues_list.sh
# ln -s /sbin/rabbitmqctl /bin/rabbitmqctl
# ln -s /usr/lib/rabbitmq/bin/rabbitmq-env /bin/rabbitmq-env
# ln -s /usr/lib/erlang/bin/erl /bin/erl
# RMQ消息告警监控
*/1 * * * * /bin/bash /usr/local/zabbix/queues_list.sh
由于消息队列 名称是动态的,所以采用zabbix的自动发现功能,那么为了实现功能
# vim /usr/local/zabbix/rabbitmq-queues.sh
#!/bin/bash
####################################
#实现zabbix自动发现功能
####################################
proc_array=(`cat /tmp/.queues.txt | awk '{print $1}'`)
length=${#proc_array[@]}
printf "{\n"
printf '\t'"\"data\":["
for ((i=0;i<$length;i++))
do
printf "\n\t\t{"
printf "\"{#QUEUES_NAME}\":\"${proc_array[$i]}\"}"
if [ $i -lt $[$length-1] ];then
printf ","
fi
done
printf "\n\t]\n"
printf "}\n"
# vim /usr/local/zabbix/rabbitmq-queues.sh
#!/bin/bash
####################################
#实现zabbix自动发现功能
####################################
proc_array=(`cat /tmp/.queues.txt | awk '{print $1}'`)
length=${#proc_array[@]}
printf "{\n"
printf '\t'"\"data\":["
for ((i=0;i<$length;i++))
do
printf "\n\t\t{"
printf "\"{#QUEUES_NAME}\":\"${proc_array[$i]}\"}"
if [ $i -lt $[$length-1] ];then
printf ","
fi
done
printf "\n\t]\n"
printf "}\n"
# vim /usr/local/zabbix/queues_check.sh
#!/bin/bash
###############################
#zabbix获取key
###############################
queues=$1
function rmq_queues {
queues_key=`cat /tmp/.queues.txt | grep "\b${queues}\b" | awk '{print $2}'`
echo "$queues_key"
}
rmq_queues
# vim /usr/local/zabbix/queues_check.sh
#!/bin/bash
###############################
#zabbix获取key
###############################
queues=$1
function rmq_queues {
queues_key=`cat /tmp/.queues.txt | grep "\b${queues}\b" | awk '{print $2}'`
echo "$queues_key"
}
rmq_queues
3、zabbix_agentd配置
zabbix_agented配置文件配置如下图:特别注意/etc/zabbix/zabbix_agentd.conf文件中的Timeout参数记得修改为1-30任意数字
# chown zabbix. -R /usr/local/zabbix/
# chmod -R 755 /usr/local/zabbix/
# vim /etc/zabbix/zabbix_agentd.d/Items.conf
#监控RMQ消息积压
UserParameter=rabbitmq.queues,/bin/bash /usr/local/zabbix/rabbitmq-queues.sh
UserParameter=queues.check[*],/bin/bash /usr/local/zabbix/queues_check.sh $1
# chown zabbix. -R /usr/local/zabbix/
# chmod -R 755 /usr/local/zabbix/
# vim /etc/zabbix/zabbix_agentd.d/Items.conf
#监控RMQ消息积压
UserParameter=rabbitmq.queues,/bin/bash /usr/local/zabbix/rabbitmq-queues.sh
UserParameter=queues.check[*],/bin/bash /usr/local/zabbix/queues_check.sh $1
4、zabbix_server配置
以下均是图形配置
(1)、‘配置’---》‘模块’----》‘创建模板’,如下图:
(2)、‘模板’对话框如下图:
模板名:RabbitMQ-Queues
群组:jzkj
(3)、创建应用集,如下图:
(4)、设置‘自动发现规则’,如下图:
(5)、设置‘监控项原型’,如下图:
(6)、设置‘触发器类型’,如下图: