Prometheus 全方位监控实战(六)RabbitMQ 集群搭建、监控部署

一、架构概览

组件 IP 地址 端口 说明
RabbitMQ Node1 10.0.0.42 5672, 15672, 15692 集群主节点
RabbitMQ Node2 10.0.0.42 5673, 15673, 15693 集群从节点
RabbitMQ Node3 10.0.0.42 5674, 15674, 15694 集群从节点
Prometheus 10.0.0.31 9090 监控数据采集
Grafana 10.0.0.31 3000 监控可视化

端口说明

端口类型 端口范围 用途
AMQP 5672-5674 RabbitMQ 消息协议端口
Management 15672-15674 Web 管理界面
Prometheus 15692-15694 Prometheus 指标暴露

二、环境准备

2.1 系统要求

  • 操作系统:CentOS 7+ / Ubuntu 18.04+
  • Docker 版本:20.10+
  • 网络:10.0.0.42 与 10.0.0.31 互通

2.2 参考地址

官网:https://www.rabbitmq.com/

Docker镜像:https://hub.docker.com/_/rabbitmq/tags

Prometheus 全方位监控实战(六)RabbitMQ 集群搭建、监控部署


三、部署 RabbitMQ 集群

3.1 创建数据目录

# 在 10.0.0.42 上执行
mkdir -p /data/rabbitmq/{node1,node2,node3}

3.2 生成统一 Erlang Cookie

# 生成固定 Cookie(三个节点必须一致)
COOKIE="RABBITMQ_CLUSTER_COOKIE_$(date +%s | sha256sum | head -c 32)"
echo $COOKIE > /tmp/.erlang.cookie
# 复制到各节点目录
for i in 1 2 3; do
  cp /tmp/.erlang.cookie /data/rabbitmq/node$i/.erlang.cookie
  chmod 600 /data/rabbitmq/node$i/.erlang.cookie
done

3.3 创建配置文件

# Node1 配置
cat > /data/rabbitmq/node1/rabbitmq.conf << 'EOF'
loopback_users.guest = false
listeners.tcp.default = 5672
management.tcp.port = 15672
prometheus.tcp.port = 15692
cluster_formation.peer_discovery_backend = rabbit_peer_discovery_classic_config
cluster_formation.classic_config.nodes.1 = rabbit@rabbitmq-node1
cluster_formation.classic_config.nodes.2 = rabbit@rabbitmq-node2
cluster_formation.classic_config.nodes.3 = rabbit@rabbitmq-node3
EOF
# Node2 配置
cat > /data/rabbitmq/node2/rabbitmq.conf << 'EOF'
loopback_users.guest = false
listeners.tcp.default = 5673
management.tcp.port = 15673
prometheus.tcp.port = 15693
cluster_formation.peer_discovery_backend = rabbit_peer_discovery_classic_config
cluster_formation.classic_config.nodes.1 = rabbit@rabbitmq-node1
cluster_formation.classic_config.nodes.2 = rabbit@rabbitmq-node2
cluster_formation.classic_config.nodes.3 = rabbit@rabbitmq-node3
EOF
# Node3 配置
cat > /data/rabbitmq/node3/rabbitmq.conf << 'EOF'
loopback_users.guest = false
listeners.tcp.default = 5674
management.tcp.port = 15674
prometheus.tcp.port = 15694
cluster_formation.peer_discovery_backend = rabbit_peer_discovery_classic_config
cluster_formation.classic_config.nodes.1 = rabbit@rabbitmq-node1
cluster_formation.classic_config.nodes.2 = rabbit@rabbitmq-node2
cluster_formation.classic_config.nodes.3 = rabbit@rabbitmq-node3
EOF

3.4 启动容器

# 创建 Docker 网络
docker network create rabbitmq-cluster --driver bridge
# 启动 Node1
docker run -d \
  --name rabbitmq-node1 \
  --hostname rabbitmq-node1 \
  --network rabbitmq-cluster \
  -p 5672:5672 \
  -p 15672:15672 \
  -p 15692:15692 \
  -v /data/rabbitmq/node1/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf:ro \
  -v /data/rabbitmq/node1/.erlang.cookie:/var/lib/rabbitmq/.erlang.cookie \
  -v /data/rabbitmq/node1/data:/var/lib/rabbitmq/mnesia \
  -e RABBITMQ_DEFAULT_USER=admin \
  -e RABBITMQ_DEFAULT_PASS=admin123 \
  rabbitmq:4.3.0-management-alpine
# 启动 Node2
docker run -d \
  --name rabbitmq-node2 \
  --hostname rabbitmq-node2 \
  --network rabbitmq-cluster \
  -p 5673:5673 \
  -p 15673:15673 \
  -p 15693:15693 \
  -v /data/rabbitmq/node2/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf:ro \
  -v /data/rabbitmq/node2/.erlang.cookie:/var/lib/rabbitmq/.erlang.cookie \
  -v /data/rabbitmq/node2/data:/var/lib/rabbitmq/mnesia \
  -e RABBITMQ_DEFAULT_USER=admin \
  -e RABBITMQ_DEFAULT_PASS=admin123 \
  rabbitmq:4.3.0-management-alpine
# 启动 Node3
docker run -d \
  --name rabbitmq-node3 \
  --hostname rabbitmq-node3 \
  --network rabbitmq-cluster \
  -p 5674:5674 \
  -p 15674:15674 \
  -p 15694:15694 \
  -v /data/rabbitmq/node3/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf:ro \
  -v /data/rabbitmq/node3/.erlang.cookie:/var/lib/rabbitmq/.erlang.cookie \
  -v /data/rabbitmq/node3/data:/var/lib/rabbitmq/mnesia \
  -e RABBITMQ_DEFAULT_USER=admin \
  -e RABBITMQ_DEFAULT_PASS=admin123 \
  rabbitmq:4.3.0-management-alpine

3.5 组建集群

# 等待容器启动
sleep 30
# Node2 加入集群
docker exec rabbitmq-node2 rabbitmqctl stop_app
docker exec rabbitmq-node2 rabbitmqctl reset
docker exec rabbitmq-node2 rabbitmqctl join_cluster rabbit@rabbitmq-node1
docker exec rabbitmq-node2 rabbitmqctl start_app
# Node3 加入集群
docker exec rabbitmq-node3 rabbitmqctl stop_app
docker exec rabbitmq-node3 rabbitmqctl reset
docker exec rabbitmq-node3 rabbitmqctl join_cluster rabbit@rabbitmq-node1
docker exec rabbitmq-node3 rabbitmqctl start_app
# 启用 Prometheus 插件
docker exec rabbitmq-node1 rabbitmq-plugins enable rabbitmq_prometheus
docker exec rabbitmq-node2 rabbitmq-plugins enable rabbitmq_prometheus
docker exec rabbitmq-node3 rabbitmq-plugins enable rabbitmq_prometheus
# 验证集群状态
docker exec rabbitmq-node1 rabbitmqctl cluster_status

3.6 配置镜像队列(可选,高可用)

# 设置镜像队列策略(队列复制到所有节点)
docker exec rabbitmq-node1 rabbitmqctl set_policy ha-all "^ha\." '{"ha-mode":"all","ha-sync-mode":"automatic"}'

四、Prometheus 监控

4.1 修改配置文件,添加job

在 10.0.0.31 上执行:

cd /oldboyedu/softwares/prometheus-2.53.4.linux-amd64/
vim prometheus.yml
  - job_name: 'rabbitmq-cluster'
    static_configs:
      - targets:
        - '10.0.0.42:15692'
        - '10.0.0.42:15693'
        - '10.0.0.42:15694'
    metrics_path: '/metrics'
    relabel_configs:
      - source_labels: [__address__]
        regex: '.*:15692'
        target_label: 'node'
        replacement: 'rabbitmq-node1'
      - source_labels: [__address__]
        regex: '.*:15693'
        target_label: 'node'
        replacement: 'rabbitmq-node2'
      - source_labels: [__address__]
        regex: '.*:15694'
        target_label: 'node'
        replacement: 'rabbitmq-node3'
# 热加载,没配置https验证可以去掉 -k -u k8s:yinzhengjie
curl -X POST https://10.0.0.31:9090/-/reload -k -u k8s:yinzhengjie

Prometheus 全方位监控实战(六)RabbitMQ 集群搭建、监控部署


五、部署 Grafana

5.1 导入 Dashboard

方法一:通过 ID 导入

  1. 左侧菜单 → +Import
  2. 输入 Dashboard ID:10991(RabbitMQ-Overview)
  3. 点击 Load
  4. 选择数据源 RabbitMQ-Prometheus
  5. 点击 Import

Prometheus 全方位监控实战(六)RabbitMQ 集群搭建、监控部署


六 通过 Web UI 创建测试数据

6.1 访问 RabbitMQ 管理界面

  1. 打开浏览器访问:http://10.0.0.42:15672
  2. 登录账号/密码:admin / admin123
  3. 点击 Queues 标签页

6.2 创建测试队列

  1. 点击 Add a new queue
  2. 填写以下信息:
    • Type:Classic
    • Name:test_queue_01
    • Durability:Durable
  3. 点击 Add queue

预期:队列列表中显示 test_queue_01

6.3 发送测试消息

  1. 点击队列名称 test_queue_01 进入详情页
  2. 滚动到底部 Publish message 区域
  3. 填写:
    • Payload:Hello RabbitMQ – Test Message 1
  4. 点击 Publish message

预期:页面顶部显示 “Message published”

Prometheus 全方位监控实战(六)RabbitMQ 集群搭建、监控部署

6.4 查看队列消息数

在队列详情页,查看 Overview 部分:

  • Ready:待消费消息数
  • Unacked:未确认消息数
  • Total:消息总数

预期:Ready 消息数等于你发送的消息数量

6.5 消费消息

在同一页面 Get messages 区域:

  1. Count:选择 5
  2. Ack mode:选择 Ack message(确认并删除)
  3. 点击 Get messages

预期:显示你之前发送的消息内容

Prometheus 全方位监控实战(六)RabbitMQ 集群搭建、监控部署

6.4 在 Grafana 中查看数据

Prometheus 全方位监控实战(六)RabbitMQ 集群搭建、监控部署

© 版权声明

相关文章