Skip to content

RabbitMQ Exporter 部署

使用 prometheus-community Helm Chart 部署 RabbitMQ Exporter,將 RabbitMQ Management API 的指標匯出至 Prometheus。

概述

RabbitMQ Exporter(kbudde/rabbitmq_exporter)透過 RabbitMQ Management HTTP API 採集指標,包括 Queue 深度、訊息吞吐量、Consumer 數量等,供 Prometheus 抓取。在 Kubernetes 上透過 prometheus-community 提供的 Helm Chart 部署,部署至 monitoring namespace。

帳號密碼的管理有特別的設計:不應寫在 values.yaml(會被存入 ConfigMap 明文),而應另外建立 ConfigMap 存放連線資訊,並在 values.yaml 中以 configMapOverrideReference 引用。理想上應改用 Kubernetes Secret,目前實際做法仍使用 ConfigMap。

核心內容

連線設定方式

RabbitMQ Exporter 的連線資訊(URL、帳密、TLS 設定)透過環境變數傳入。Helm Chart 支援以 configMapOverrideReference 指定一個 ConfigMap,其中的所有 key-value 會被注入為環境變數,覆蓋預設設定。

關鍵環境變數:

變數說明
RABBIT_URLRabbitMQ Management API 端點(含 scheme 和 port)
RABBIT_USER登入帳號
RABBIT_PASSWORD登入密碼
SKIPVERIFY跳過 TLS 憑證驗證(true/false

當 RabbitMQ 啟用 TLS(disableNonTLSListeners: true)時,Management API 會在 15671 埠以 HTTPS 提供服務,RABBIT_URL 需使用 https:// scheme,並視需要設定 SKIPVERIFY=true

安全性考量

目前實作以明文存放帳密於 ConfigMap,屬於技術債。建議的改善方向是改用 Kubernetes Secret 搭配環境變數注入,讓敏感資訊不出現在 ConfigMap 或 values.yaml 中。

關鍵要點

  • 帳密不應直接寫入 values.yaml,應透過 configMapOverrideReference 引用外部 ConfigMap
  • RabbitMQ TLS 模式下 Management API 使用 https://hostname:15671
  • SKIPVERIFY=true 跳過自簽憑證驗證,正式環境應改用憑證認證
  • 安全最佳實踐:改用 Kubernetes Secret 取代 ConfigMap 存放帳密

實際應用

RabbitMQ Exporter 部署後,在 Prometheusvalues.yaml 中加入對應的 scrape job,Prometheus 即可定期收集 RabbitMQ 的 Queue 深度、訊息速率等指標,再透過 Grafana 建立 Dashboard 監控消費者健康狀況。搭配 KEDA 可以基於 Queue 深度自動擴縮 Consumer Pods。

部署設定參考

以下為實際部署時使用的完整設定,供日後查詢與複製使用。

環境參數

項目
Namespacemonitoring
RabbitMQ URLhttps://10.30.196.60:15671
RabbitMQ 帳號admin
RabbitMQ 密碼Bed200@Passw0rd
SKIPVERIFYtrue
ConfigMap 名稱rabbitmq-exporter-cm

安裝/升級指令

bash
helm upgrade rabbitmq-exporter \
  -f rabbitmq-values.yaml \
  --namespace monitoring \
  --insecure-skip-tls-verify \
  prometheus-community/prometheus-rabbitmq-exporter

values.yaml

yaml
rabbitmq:
  configMapOverrideReference: "rabbitmq-exporter-cm"

ConfigMap(連線資訊)

yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: rabbitmq-exporter-cm
  namespace: monitoring
data:
  RABBIT_URL: "https://10.30.196.60:15671"
  RABBIT_USER: "admin"
  RABBIT_PASSWORD: "Bed200@Passw0rd"
  SKIPVERIFY: "true"

相關概念

來源