RabbitMQ监控方法以及核心指标
- 1. 监控指标采集
- 2. 使用rabbimq插件采集指标
- 2.1 3.8.0之前版本,使用外部插件暴露
- 2.2 3.8.0之后版本,使用内置插件暴露
- 3. 使用rabbitmq_exporter采集指标
- 3.1 部署rabbitmq_exporter
- 3.2 prometheus采集rabbitmq_exporter的暴露指标
- 3.3 promethues配置告警规则或者配置grafana大盘
- 4. 核心告警指标
- 5. 参考文章
探讨rabbitmq的监控数据采集方式以及需要关注的核心指标,便于日常生产进行监控和巡检。
1. 监控指标采集
rabbitmq的指标采集有2种方式
- rabbitmq的内置或者外部下载的插件暴露指标
- 使用第三方rabbitmq_exporter采集rabbitmq并暴露指标
2. 使用rabbimq插件采集指标
RabbitMQ内部集成Prometheus来获取指标,操作也比较简便。
- 3.8.0之前版本,RabbitMQ可以使用单独的插件prometheus_rabbitmq_exporter来向Prometheus公开指标,要单独下载到RabbitMQ安装目录中进行安装;rabbitmq_exporter
- 3.8.0版本后,RabbitMQ附带了内置的Prometheus&Grafana支持,虽然内置了该插件,但也要进行安装,rabbitmq-prometheus
2.1 3.8.0之前版本,使用外部插件暴露
操作如下,更详细操作方式可以参考官方文档 ,
-
选择合适的版本,下载prometheus_rabbitmq_exporter 插件
-
将插件解压,并放到rabbitmq的安装插件目录/usr/lib/rabbitmq/lib/rabbitmq_server-{version}/plugins下,详细操作可以参考Installing Additional Plugins
-
启动rabbitmq
-
rabbitmq启用插件prometheus_rabbitmq_exporter
# 启用插件
rabbitmq-plugins enable prometheus_rabbitmq_exporter# 查看插件
rabbitmq-plugins list
- 查看相关指标
curl -s localhost:15692/metrics
2.2 3.8.0之后版本,使用内置插件暴露
3.8.0后,rabbitmq内置了相关的插件,因此不需要单独进行下载和配置,只需要开启即可。操作如下,更详细操作方式可以参考官方文档 ,
- 启动rabbitmq
- rabbitmq启用插件rabbitmq_prometheus
# 启用插件
rabbitmq-plugins enable rabbitmq_prometheus# 查看插件
rabbitmq-plugins list
- 查看相关指标
curl -s localhost:15692/metrics
3. 使用rabbitmq_exporter采集指标
如果不希望使用rabbit的内部插件采集监控指标,也可以使用rabbitmq_exporter采集相关的指标。该方式可以适用于所有的rabbitmq版本
3.1 部署rabbitmq_exporter
- rabbitmq_exporter的 下载地址 选择合适的版本下载,并解压
- 配置rabbitmq的账号和密码(如果使用内置的guest/guest该操作可以忽略)
# 需要创建用户名和密码:
rabbitmqctl add_user user pass
# 需要将用户赋予管理员权限:
rabbitmqctl set_user_tags user administrator# 需要将用户赋予vhost权限:
rabbitmqctl set_permissions -p / user ".*" ".*" ".*"
- 启动rabbitmq_exporter
cd /usr/local/rabbitmq_exporter-0.29.0.linux-amd64
RABBIT_USER=guest RABBIT_PASSWORD=guest OUTPUT_FORMAT=json PUBLIC_PORT=15692 RABBIT_URL=http://localhost:15672 ./rabbitmq_exporter
- RABBIT_USER:rabbit用户名
- RABBIT_PASSWORD:rabbit密码
- RABBIT_URL:rabbit服务地址和端口
- OUTPUT_FORMAT:输出格式
- PUBLIC_PORT:暴露端口
- 确定metrics指标暴露出来后,就可以通过prometheus配置target进行指标采集
# 通过promethues协议暴露指标
curl http://localhost:15692/metrics
3.2 prometheus采集rabbitmq_exporter的暴露指标
配置prometheus的指标采集任务
- job_name: rabbitmqstatic_configs:- targets: ['172.19.0.2:15692','172.19.0.3:15692','172.19.0.4:15692']labels:instance: rabbitmq
3.3 promethues配置告警规则或者配置grafana大盘
再次不进行扩展。
4. 核心告警指标
rabbitmq的指标很多,相关的指标含义可以参考 官网文档,本文将摘选出核心的指标,作为rabbitmq集群的核心监控并配置相关的告警。
groups:
- name: RabbitMQ节点宕机rules:- alert: RabbitmqNodeDownexpr: sum(rabbitmq_build_info) < 3for: 0mlabels:severity: errorannotations:summary: "Rabbitmq node down (instance {{ $labels.instance }})"description: "RabbitMQ集群中运行的节点少于3个\n VALUE = {{ $value }}\n LABELS = {{ $labels }}"- name: RabbitMQ节点未分发rules: - alert: RabbitmqNodeNotDistributedexpr: erlang_vm_dist_node_state < 3for: 0mlabels:severity: warningannotations:summary: "Rabbitmq node not distributed (instance {{ $labels.instance }})"description: "RabbitMQ集群分发链接状态未启动\n VALUE = {{ $value }}\n LABELS = {{ $labels }}" - name: RabbitMQ内存高于90%rules: - alert: RabbitmqMemoryHighexpr: rabbitmq_process_resident_memory_bytes / rabbitmq_resident_memory_limit_bytes * 100 > 90for: 2mlabels:severity: warningannotations:summary: "Rabbitmq memory high (instance {{ $labels.instance }})"description: "RabbitMQ集群节点使用超过90%的已分配 RAM\n VALUE = {{ $value }}\n LABELS = {{ $labels }}" - name: RabbitMQ未确认消息过高rules: - alert: RabbitmqTooManyUnackMessagesexpr: sum(rabbitmq_queue_messages_unacked) BY (queue) > 1000for: 1mlabels:severity: warningannotations:summary: "Rabbitmq too many unack messages (instance {{ $labels.instance }})"description: "RabbitMQ集群未确认的消息大于1000\n VALUE = {{ $value }}\n LABELS = {{ $labels }}"- name: RabbitMQ节点总连接数太高rules: - alert: RabbitmqTooManyConnectionsexpr: rabbitmq_connections > 1000for: 2mlabels:severity: warningannotations:summary: "Rabbitmq too many connections (instance {{ $labels.instance }})"description: "RabbitMQ集群节点的总连接数大于1000\n VALUE = {{ $value }}\n LABELS = {{ $labels }}" - name: RabbitMQ没有队列消费者rules: - alert: RabbitmqNoQueueConsumerexpr: rabbitmq_queue_consumers < 1for: 1mlabels:severity: warningannotations:summary: "Rabbitmq no queue consumer (instance {{ $labels.instance }})"description: "RabbitMQ集群队列的消费者少于1个\n VALUE = {{ $value }}\n LABELS = {{ $labels }}"
另外,需要关注执行命令中的alarm,mq集群会内部自检,如果出现alarm需要注意修复
rabbitmqctl cluster_status
通常alarm相关信息,在mq的日志中会有相关的记录,注意获取相关的配置
5. 参考文章
- rabbitmq官网
- rabbitmq监控官网