OpenTelemetry Collector를 설치하고 구성하여 Linux 호스트에서 실행 중인 RabbitMQ를 모니터링하세요. 이 종합 가이드는 Debian, Ubuntu, RHEL 및 CentOS 시스템의 설치, 설정 및 검증 과정을 단계별로 안내합니다.
설치 단계
자체 호스팅 RabbitMQ 인스턴스에 대한 모니터링을 설정하려면 다음 단계를 따르십시오.
시작하기 전에
사용 환경이 다음 요구 사항을 충족하는지 확인하십시오.
RabbitMQ 관리 플러그인을 활성화하세요.
관리 플러그인은 OpenTelemetry Collector가 수집하는 API를 제공합니다.
$sudo rabbitmq-plugins enable rabbitmq_management제대로 작동하는지 확인하세요:
$curl -I -u admin:password http://localhost:15672/api/overview응답에 HTTP/1.1 200 OK 표시되어야 합니다.
OpenTelemetry Collector를 설치하세요.
모든 리눅스 배포판에서 사용 가능:
호스트 운영 체제에 맞는 OpenTelemetry Collector Contrib 바이너리를 OpenTelemetry Collector 릴리스 페이지 에서 다운로드하여 설치하십시오.
수집기 구성
/etc/otelcol-contrib/config.yaml 생성하거나 교체하세요:
receivers: rabbitmq: endpoint: http://localhost:15672 username: admin password: password collection_interval: 30s metrics: # Queue Metrics (essential for message flow and backlog) rabbitmq.consumer.count: enabled: true rabbitmq.message.delivered: enabled: true rabbitmq.message.published: enabled: true rabbitmq.message.acknowledged: enabled: true rabbitmq.message.dropped: enabled: true rabbitmq.message.current: enabled: true # Crucial for monitoring queue backlog, includes 'ready' and 'unacknowledged' states
# Node Health Metrics (critical for server resource monitoring) rabbitmq.node.disk_free: enabled: true rabbitmq.node.disk_free_limit: enabled: true rabbitmq.node.disk_free_alarm: enabled: true rabbitmq.node.mem_used: enabled: true rabbitmq.node.mem_limit: enabled: true rabbitmq.node.mem_alarm: enabled: true rabbitmq.node.mem_used_details.rate: enabled: true rabbitmq.node.fd_used: enabled: true rabbitmq.node.fd_total: enabled: true rabbitmq.node.sockets_used: enabled: true rabbitmq.node.sockets_total: enabled: true rabbitmq.node.proc_used: enabled: true rabbitmq.node.proc_total: enabled: true rabbitmq.node.uptime: enabled: true rabbitmq.node.run_queue: enabled: true rabbitmq.node.processors: enabled: true rabbitmq.node.context_switches_details.rate: enabled: true rabbitmq.node.gc_num_details.rate: enabled: true rabbitmq.node.gc_bytes_reclaimed_details.rate: enabled: true
# I/O Metrics (important for understanding disk and network activity) rabbitmq.node.io_read_count_details.rate: enabled: true rabbitmq.node.io_read_bytes_details.rate: enabled: true rabbitmq.node.io_read_avg_time_details.rate: enabled: true rabbitmq.node.io_write_count_details.rate: enabled: true rabbitmq.node.io_write_bytes_details.rate: enabled: true rabbitmq.node.io_write_avg_time_details.rate: enabled: true rabbitmq.node.io_sync_count_details.rate: enabled: true rabbitmq.node.io_sync_avg_time_details.rate: enabled: true rabbitmq.node.io_seek_count_details.rate: enabled: true rabbitmq.node.io_seek_avg_time_details.rate: enabled: true rabbitmq.node.io_reopen_count_details.rate: enabled: true
# Mnesia and Store Metrics (for internal database and message storage) rabbitmq.node.mnesia_ram_tx_count_details.rate: enabled: true rabbitmq.node.mnesia_disk_tx_count_details.rate: enabled: true rabbitmq.node.msg_store_read_count_details.rate: enabled: true rabbitmq.node.msg_store_write_count_details.rate: enabled: true rabbitmq.node.queue_index_write_count_details.rate: enabled: true rabbitmq.node.queue_index_read_count_details.rate: enabled: true
# Connection/Channel/Queue Lifecycle Metrics rabbitmq.node.connection_created_details.rate: enabled: true rabbitmq.node.connection_closed_details.rate: enabled: true rabbitmq.node.channel_created_details.rate: enabled: true rabbitmq.node.channel_closed_details.rate: enabled: true rabbitmq.node.queue_declared_details.rate: enabled: true rabbitmq.node.queue_created_details.rate: enabled: true rabbitmq.node.queue_deleted_details.rate: enabled: true
# processors: Process data before exporting.processors: resourcedetection: detectors: [system] system: resource_attributes: host.name: enabled: true host.id: enabled: true resource: attributes: - key: instrumentation.provider value: opentelemetry action: upsert - key: rabbitmq.deployment.name value: my-rabbitmq-server # Replace with your server name action: upsert batch: send_batch_size: 1024 timeout: 30s
exporters: otlphttp/newrelic: endpoint: ${env:NEWRELIC_OTLP_ENDPOINT} headers: api-key: ${env:NEWRELIC_LICENSE_KEY} compression: gzip
service: pipelines: metrics: receivers: [rabbitmq] processors: [resourcedetection, resource, batch] exporters: [otlphttp/newrelic]설정에서 다음 값을 업데이트하세요.
endpointRabbitMQ 관리 API URL (기본값:http://localhost:15672)username및password: RabbitMQ 자격 증명rabbitmq.deployment.name이 RabbitMQ 인스턴스에 대한 고유한 이름입니다.collection_interval메트릭을 수집하는 빈도(기본값: 30초)
환경 변수 설정
환경 변수에 대한 systemd 재정의 파일을 생성합니다.
$sudo mkdir -p /etc/systemd/system/otelcol-contrib.service.d뉴렐릭 지역을 선택하세요:
$cat <<EOF | sudo tee /etc/systemd/system/otelcol-contrib.service.d/environment.conf$[Service]$Environment="NEWRELIC_OTLP_ENDPOINT=https://otlp.nr-data.net:4318"$Environment="NEWRELIC_LICENSE_KEY=YOUR_LICENSE_KEY"$EOFYOUR_LICENSE_KEY 뉴렐릭 클러스터 키로 바꿉니다.
$cat <<EOF | sudo tee /etc/systemd/system/otelcol-contrib.service.d/environment.conf$[Service]$Environment="NEWRELIC_OTLP_ENDPOINT=https://otlp.eu01.nr-data.net:4318"$Environment="NEWRELIC_LICENSE_KEY=YOUR_LICENSE_KEY"$EOFYOUR_LICENSE_KEY 뉴렐릭 클러스터 키로 바꿉니다.
systemd 다시 로드하고 수집기를 재시작하세요.
$sudo systemctl daemon-reload$sudo systemctl restart otelcol-contrib뉴렐릭에서 데이터를 확인하세요
서비스 상태를 확인하세요:
$sudo systemctl status otelcol-contrib출력 결과에 active (running) 표시되어야 합니다.
최근 로그 보기:
$sudo journalctl -u otelcol-contrib -n 50 --no-pager데이터 수집이 성공적으로 완료되었음을 나타내는 메시지를 찾아보세요.
INFO RabbitmqReceiver Successfully scraped rabbitmq metrics뉴렐릭에서 지표를 확인하세요.
데이터가 나타날 때까지 2-3분 정도 기다린 후 쿼리 빌더 에서 다음 쿼리를 실행하세요.
SELECT count(*)FROM MetricWHERE metricName LIKE 'rabbitmq.%' AND instrumentation.provider = 'opentelemetry' AND rabbitmq.deployment.name = 'my-rabbitmq-server'FACET metricNameSINCE 10 minutes ago다음과 같은 메트릭 이름이 표시될 것입니다.
rabbitmq.queue.count- 대기열 수rabbitmq.queue.message.count- 큐 전체의 총 메시지 수rabbitmq.connection.count- 활성 연결rabbitmq.consumer.count- 적극적인 소비자
팁
5분 후에도 데이터가 표시되지 않으면 아래 문제 해결, 해결 섹션을 확인하세요.
(선택 사항) RabbitMQ 로그를 뉴렐릭으로 전달합니다.
메트릭 외에도 포괄적인 옵저버빌리티를 위해 RabbitMQ 로그 로그를 뉴렐릭으로 전달할 수 있습니다. 이는 지표와 로그 전반에 걸쳐 문제를 연관시키는 데 도움이 됩니다.
중요
로그 포워딩에는 추가 설정 및 시스템 권한이 필요합니다. 진행하기 전에 필요한 접근 권한이 있는지 확인하십시오.
/etc/otelcol-contrib/config.yaml업데이트하여 파일 로그 수신기를 추가하세요.
receivers: rabbitmq: # ... existing rabbitmq config ...
# Add filelog receiver for RabbitMQ logs filelog/rabbitmq: include: - /var/log/rabbitmq/*.log - /var/log/rabbitmq/**/*.log include_file_path: true include_file_name: false operators: - type: regex_parser regex: '^(?P<timestamp>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3}) \[(?P<level>\w+)\] <(?P<pid>[^>]+)> (?P<message>.*)$' timestamp: parse_from: attributes.timestamp layout: '%Y-%m-%d %H:%M:%S.%L' severity: parse_from: attributes.severity
processors: # ... existing processors ...
transform/rabbitmq_logs: log_statements: - context: resource statements: - set(attributes["rabbitmq.display.name"], Concat(["server", attributes["rabbitmq.deployment.name"]], ":"))
service: pipelines: metrics: receivers: [rabbitmq] processors: [resourcedetection, resource, batch] exporters: [otlphttp/newrelic]
logs/rabbitmq: receivers: [filelog] processors: [batch, resource, transform/rabbitmq_logs] exporters: [otlphttp/newrelic]수집기가 로그를 읽을 수 있는 권한을 부여하십시오. 한 가지 방법을 선택하세요:
rabbitmq 그룹에 추가:
$sudo usermod -a -G rabbitmq otelcol-contrib또는 파일 권한을 설정하세요.
$sudo chmod 644 /var/log/rabbitmq/*.log수집기를 재시작하세요:
$sudo systemctl restart otelcol-contrib뉴렐릭에서 로그가 수집되고 있는지 확인하세요.
SELECT count(*)FROM LogWHERE service.name = 'rabbitmq' AND rabbitmq.deployment.name = 'my-rabbitmq-server'SINCE 10 minutes ago데이터 찾기
몇 분 후 RabbitMQ 창이 뉴렐릭에 나타날 것입니다. 뉴럴릭 UI 의 다양한 보기에서 RabbitMQ 대역폭을 탐색하는 방법에 대한 자세한 지침은 데이터 찾기 및 검색을 참조하세요.
NRQL을 사용하여 데이터를 쿼리할 수도 있습니다.
FROM Metric SELECT * WHERE rabbitmq.deployment.name = 'my-rabbitmq-server'문제점 해결
다음 단계
이제 RabbitMQ 모델 설정이 완료되었으므로 옵저버빌리티를 향상할 수 있습니다.
데이터를 살펴보세요:
- 데이터 찾기 및 쿼리 - 뉴렐릭 UI 탐색하고 NRQL 쿼리 작성
- RabbitMQ 메트릭 살펴보기 - 알림 권장 사항을 포함한 완벽한 메트릭 참조 자료
모니터링 강화: