Theme:

RabbitMQ의 큐 깊이가 비정상적으로 늘어나고 있는지, 연결 수가 한계에 도달했는지를 실시간으로 파악하려면 어떻게 해야 할까요?

RabbitMQ 메트릭을 Prometheus로 수집 하는 방법은 내장 플러그인과 외부 Exporter 두 가지입니다. RabbitMQ 3.8 이상이라면 내장 플러그인(rabbitmq_prometheus)이 관리가 간단하고 성능 오버헤드도 적어 권장됩니다.

두 가지 방식 비교

RabbitMQ 메트릭을 Prometheus에 수집하는 방법은 크게 두 가지입니다.

항목내장 플러그인 (rabbitmq_prometheus)외부 Exporter (rabbitmq_exporter)
설치RabbitMQ에 포함, 플러그인 활성화만 하면 됨별도 바이너리 설치 필요
메트릭 포트156929419
메트릭 수집 방식RabbitMQ 내부에서 직접 노출Management API(15672)를 폴링
상세 메트릭/metrics/per-object, /metrics/detailed 등 다양한 엔드포인트설정에 따라 다름
권장 여부RabbitMQ 공식 문서에서 ** 권장**레거시 환경이나 특수 요구사항이 있을 때

RabbitMQ 3.8 이상이라면 내장 플러그인 방식을 사용하는 것이 관리가 간단하고 성능 오버헤드도 적습니다.


방법 1: 내장 플러그인 활성화 (권장)

플러그인 활성화

SHELL
rabbitmq-plugins enable rabbitmq_prometheus
sudo systemctl restart rabbitmq-server

활성화 후 메트릭이 노출되는지 확인합니다.

SHELL
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에서 설정합니다.

INI
prometheus.tcp.port = 15692
prometheus.tcp.ip   = 0.0.0.0

방법 2: 외부 Exporter 설치

레거시 환경이거나 내장 플러그인을 사용할 수 없는 경우, 외부 Exporter를 설치합니다.

바이너리 다운로드

SHELL
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를 생성합니다.

JSON
{
  "rabbit_url": "http://<RabbitMQ IP>:15672",
  "rabbit_user": "<관리자 계정>",
  "rabbit_pass": "<비밀번호>"
}

(주의) 이 설정 파일에 RabbitMQ 관리자 비밀번호가 평문으로 저장됩니다. 파일 권한을 600으로 제한하고, 가능하면 읽기 전용 권한의 별도 모니터링 계정을 사용하는 것을 권장합니다.

systemd 서비스 등록

/etc/systemd/system/rabbitmq-exporter.service를 생성합니다.

INI
[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
SHELL
sudo systemctl daemon-reload
sudo systemctl enable rabbitmq-exporter
sudo systemctl start rabbitmq-exporter

외부 Exporter는 기본적으로 ** 포트 9419**에서 메트릭을 노출합니다.


Prometheus 스크랩 설정

사용하는 방식에 따라 prometheus.yml에 추가합니다.

내장 플러그인 방식

YAML
scrape_configs:
  - job_name: 'rabbitmq'
    scrape_interval: 15s
    static_configs:
      - targets: ['<RabbitMQ IP>:15692']

외부 Exporter 방식

YAML
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인 경우

  1. Exporter/플러그인 포트에 직접 curl로 접근 가능한지 확인
  2. Prometheus 서버 → RabbitMQ 서버 간 네트워크(방화벽, 보안 그룹) 확인
  3. 외부 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별도 바이너리 설치
메트릭 포트156929419
권장 환경RabbitMQ 3.8+레거시 환경
Prometheus 설정targets: ['<IP>:15692']targets: ['<IP>:9419']
Grafana 대시보드grafana.com/orgs/rabbitmq에서 임포트동일
댓글 로딩 중...