RabbitMQ Exporter 설치
RabbitMQ의 큐 깊이가 비정상적으로 늘어나고 있는지, 연결 수가 한계에 도달했는지를 실시간으로 파악하려면 어떻게 해야 할까요?
RabbitMQ 메트릭을 Prometheus로 수집 하는 방법은 내장 플러그인과 외부 Exporter 두 가지입니다. RabbitMQ 3.8 이상이라면 내장 플러그인(rabbitmq_prometheus)이 관리가 간단하고 성능 오버헤드도 적어 권장됩니다.
두 가지 방식 비교
RabbitMQ 메트릭을 Prometheus에 수집하는 방법은 크게 두 가지입니다.
| 항목 | 내장 플러그인 (rabbitmq_prometheus) | 외부 Exporter (rabbitmq_exporter) |
|---|---|---|
| 설치 | RabbitMQ에 포함, 플러그인 활성화만 하면 됨 | 별도 바이너리 설치 필요 |
| 메트릭 포트 | 15692 | 9419 |
| 메트릭 수집 방식 | RabbitMQ 내부에서 직접 노출 | Management API(15672)를 폴링 |
| 상세 메트릭 | /metrics/per-object, /metrics/detailed 등 다양한 엔드포인트 | 설정에 따라 다름 |
| 권장 여부 | RabbitMQ 공식 문서에서 ** 권장** | 레거시 환경이나 특수 요구사항이 있을 때 |
RabbitMQ 3.8 이상이라면 내장 플러그인 방식을 사용하는 것이 관리가 간단하고 성능 오버헤드도 적습니다.
방법 1: 내장 플러그인 활성화 (권장)
플러그인 활성화
rabbitmq-plugins enable rabbitmq_prometheus
sudo systemctl restart rabbitmq-server
활성화 후 메트릭이 노출되는지 확인합니다.
curl -s localhost:15692/metrics | head -5
메트릭 엔드포인트
내장 플러그인은 용도별로 여러 엔드포인트를 제공합니다.
| 엔드포인트 | 설명 |
|---|---|
/metrics | 집계된 전체 메트릭 (기본, 오버헤드 낮음) |
/metrics/per-object | 큐, 연결 등 개별 객체 단위 메트릭 |
/metrics/detailed | 쿼리 파라미터로 필터링 가능한 상세 메트릭 |
/metrics/memory-breakdown | 컴포넌트별 메모리 사용량 |
(참고) RabbitMQ 공식 문서에서는 프로덕션 환경에서 스크랩 간격을 최소 15초, RabbitMQ의
collect_statistics_interval을 10초로 설정하는 것을 권장합니다. 너무 짧은 간격은 RabbitMQ에 부하를 줄 수 있습니다.
포트 및 바인딩 변경
기본 포트(15692)를 변경하려면 rabbitmq.conf에서 설정합니다.
prometheus.tcp.port = 15692
prometheus.tcp.ip = 0.0.0.0
방법 2: 외부 Exporter 설치
레거시 환경이거나 내장 플러그인을 사용할 수 없는 경우, 외부 Exporter를 설치합니다.
바이너리 다운로드
mkdir -p /opt/rabbitmq_exporter/conf
wget https://github.com/kbudde/rabbitmq_exporter/releases/download/v1.0.0/rabbitmq_exporter_1.0.0_linux_amd64.tar.gz
tar -xzvf rabbitmq_exporter_1.0.0_linux_amd64.tar.gz -C /opt/rabbitmq_exporter
설정 파일 작성
/opt/rabbitmq_exporter/conf/rabbitmq.conf를 생성합니다.
{
"rabbit_url": "http://<RabbitMQ IP>:15672",
"rabbit_user": "<관리자 계정>",
"rabbit_pass": "<비밀번호>"
}
(주의) 이 설정 파일에 RabbitMQ 관리자 비밀번호가 평문으로 저장됩니다. 파일 권한을
600으로 제한하고, 가능하면 읽기 전용 권한의 별도 모니터링 계정을 사용하는 것을 권장합니다.
systemd 서비스 등록
/etc/systemd/system/rabbitmq-exporter.service를 생성합니다.
[Unit]
Description=RabbitMQ Exporter
After=network.target
[Service]
Type=simple
ExecStart=/opt/rabbitmq_exporter/rabbitmq_exporter \
-config-file=/opt/rabbitmq_exporter/conf/rabbitmq.conf
Restart=always
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable rabbitmq-exporter
sudo systemctl start rabbitmq-exporter
외부 Exporter는 기본적으로 ** 포트 9419**에서 메트릭을 노출합니다.
Prometheus 스크랩 설정
사용하는 방식에 따라 prometheus.yml에 추가합니다.
내장 플러그인 방식
scrape_configs:
- job_name: 'rabbitmq'
scrape_interval: 15s
static_configs:
- targets: ['<RabbitMQ IP>:15692']
외부 Exporter 방식
scrape_configs:
- job_name: 'rabbitmq'
scrape_interval: 60s
scrape_timeout: 30s
static_configs:
- targets: ['<Exporter IP>:9419']
설정 반영 후 Prometheus 웹 UI의 Status > Targets 에서 상태가 UP 인지 확인합니다.
트러블슈팅
메트릭이 노출되지 않는 경우
| 확인 항목 | 명령 |
|---|---|
| 플러그인 활성화 여부 | rabbitmq-plugins list | grep prometheus |
| 메트릭 포트 리스닝 | ss -tlnp | grep 15692 |
| Management API 접근 (외부 Exporter) | curl http://localhost:15672/api/overview |
Prometheus에서 타깃이 DOWN인 경우
- Exporter/플러그인 포트에 직접
curl로 접근 가능한지 확인 - Prometheus 서버 → RabbitMQ 서버 간 네트워크(방화벽, 보안 그룹) 확인
- 외부 Exporter의 경우 설정 파일의 IP, 계정, 비밀번호 정확성 확인
Grafana 대시보드
RabbitMQ 팀에서 공식으로 관리하는 Grafana 대시보드가 있습니다. grafana.com/orgs/rabbitmq에서 RabbitMQ-Overview 대시보드를 임포트하면 노드 상태, 연결 수, 메시지 처리량, 메모리 사용량을 한눈에 확인할 수 있습니다.
주의할 점
스크랩 간격이 너무 짧으면 RabbitMQ에 부하
내장 플러그인의 /metrics/per-object 엔드포인트는 큐, 연결 등 개별 객체 단위 메트릭을 제공합니다. 큐가 수천 개인 환경에서 스크랩 간격을 5초로 설정하면 RabbitMQ 자체에 심각한 부하가 발생할 수 있습니다. 프로덕션에서는 최소 15초 이상을 권장합니다.
외부 Exporter 설정 파일의 평문 비밀번호
외부 Exporter의 설정 파일(rabbitmq.conf)에 RabbitMQ 관리자 비밀번호가 평문으로 저장됩니다. 파일 권한을 600으로 제한하고, 가능하면 모니터링 전용 읽기 권한 계정을 사용합니다.
정리
| 항목 | 내장 플러그인 | 외부 Exporter |
|---|---|---|
| 설치 | rabbitmq-plugins enable rabbitmq_prometheus | 별도 바이너리 설치 |
| 메트릭 포트 | 15692 | 9419 |
| 권장 환경 | RabbitMQ 3.8+ | 레거시 환경 |
| Prometheus 설정 | targets: ['<IP>:15692'] | targets: ['<IP>:9419'] |
| Grafana 대시보드 | grafana.com/orgs/rabbitmq에서 임포트 | 동일 |