Skip to content

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)、设置‘触发器类型’,如下图: