Appearance
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_URL | RabbitMQ 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 部署後,在 Prometheus 的 values.yaml 中加入對應的 scrape job,Prometheus 即可定期收集 RabbitMQ 的 Queue 深度、訊息速率等指標,再透過 Grafana 建立 Dashboard 監控消費者健康狀況。搭配 KEDA 可以基於 Queue 深度自動擴縮 Consumer Pods。
部署設定參考
以下為實際部署時使用的完整設定,供日後查詢與複製使用。
環境參數
| 項目 | 值 |
|---|---|
| Namespace | monitoring |
| RabbitMQ URL | https://10.30.196.60:15671 |
| RabbitMQ 帳號 | admin |
| RabbitMQ 密碼 | Bed200@Passw0rd |
| SKIPVERIFY | true |
| ConfigMap 名稱 | rabbitmq-exporter-cm |
安裝/升級指令
bash
helm upgrade rabbitmq-exporter \
-f rabbitmq-values.yaml \
--namespace monitoring \
--insecure-skip-tls-verify \
prometheus-community/prometheus-rabbitmq-exportervalues.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"相關概念
- RabbitMQ on Kubernetes 部署 — RabbitMQ 服務的部署設定,含 TLS 與 Management API 端點
- Prometheus on Kubernetes 部署 — 收集 RabbitMQ Exporter 指標的 Prometheus 設定(含 rabbitmq-exporter scrape job)
- Prometheus Exporter 部署模式 — Exporter 的通用 K8s 部署模式
- KEDA(Kubernetes Event-Driven Autoscaling) — 可基於 RabbitMQ Queue 深度自動擴縮 Consumer