DevOps/Observability

[Datadog] RabbitMQ Integration

Jflip 2024. 11. 10. 23:20
728x90

RabbitMQ Integration

  • Agent

RabbitMQ의 Prometheus 플러그인 버전은 Datadog Agent의 Python 3 지원이 필요하므로 Agent v6 이상에서만 지원될 수 있습니다. 통합의 Prometheus 플러그인 버전을 구성하기 전에 에이전트가 업데이트 되었는지 확인해야 합니다.

  • rabbitmq.d/conf.yaml
init_config:

instances:
  - prometheus_plugin:
      url: http://<HOST>:15692
  • prometheus_plugin옵션을 사용할 때 관리 플러그인과 관련된 설정은 무시됩니다.

엔드포인트에서 스크래핑도 가능합니다. 데이터독은 /metrics/detailed 엔드포인트에서 데이터를 수집할 수도 있습니다. (개체별 메트릭을 사용하는 것은 가능하나, 컴퓨팅 비용을 많이 소요한다고 합니다.)

instances:

  - prometheus_plugin:
      url: http://<HOST>:15692
      unaggregated_endpoint: detailed?family=queue_coarse_metrics

설정 완료 후 에이전트를 다시 시작합니다.

  • 로그 수집 위치 변경 (선택)

기본 로그 파일 위치를 수정하려면 RABBITMQ_LOGS환경 변수를 설정하거나 다음 내용을 RabbitMQ 구성 파일에 추가합니다.( /etc/rabbitmq/rabbitmq.conf):

  log.dir = /var/log/rabbit

  log.file = rabbit.log

Datadog Agent에서는 기본적으로 로그 수집이 비활성화되어 있습니다 datadog.yaml. 파일에서 활성화하세요.

logs_enabled: true

RabbitMQ 로그 수집을 시작하려면 파일 logs섹션을 편집하세요 .
- rabbitmq.d/conf.yaml

logs:

  - type: file

    path: /var/log/rabbit/*.log

    source: rabbitmq

    service: myservice

    log_processing_rules:

      - type: multi_line

        name: logs_starts_with_equal_sign

        pattern: "="

에이전트를 다시 시작합니다.

컨테이너 환경에서 RabbitMQ 메트릭 및 로그 수집 설정 (Datadog Autodiscovery 사용)

Datadog 에이전트의 Autodiscovery 기능을 사용하면 컨테이너화된 환경(Kubernetes 포함)에서 RabbitMQ 메트릭과 로그를 쉽게 수집할 수 있습니다. 아래는 Docker 및 Kubernetes 환경에서 RabbitMQ를 설정하는 방법입니다.

  1. Docker 및 Kubernetes에서의 설정 요약

1.1 Datadog Autodiscovery를 활용한 설정

Autodiscovery를 사용하면 컨테이너의 메타데이터와 환경 설정을 자동으로 감지하여 적절한 메트릭 수집 구성을 적용할 수 있습니다.

  • RabbitMQ용 Autodiscovery 예제 설정:
<INTEGRATION_NAME>: rabbitmq

<INIT_CONFIG>: {}

<INSTANCE_CONFIG>: 

  prometheus_plugin:

    url: "http://%%host%%:15692"
  • Kubernetes 환경에서는 Autodiscovery Integration Templates를 참고하여 구성할 수 있습니다.
    이 템플릿은 파라미터 자동 감지를 도와줍니다.
  1. 메트릭 수집 설정 (Metric Collection)
  • RabbitMQ 메트릭 수집 구성Prometheus 플러그인을 통해 수행됩니다.
  • RabbitMQ 컨테이너에서 15692 포트로 노출된 Prometheus 메트릭 엔드포인트를 사용합니다.
<INSTANCE_CONFIG>: 

  prometheus_plugin:

    url: "http://%%host%%:15692"

**%%host%%**는 컨테이너가 실행 중인 호스트 주소로 자동으로 대체됩니다.

  1. 로그 수집 설정 (Log Collection)
  • Datadog 에이전트 v6.0 이상에서 로그 수집 기능을 사용할 수 있습니다.
  • 기본적으로 로그 수집은 비활성화되어 있으며, 이를 활성화하려면 아래 설정을 추가해야 합니다.

3.1 RabbitMQ 로그 수집 구성 예시

<LOG_CONFIG>: 

  source: "rabbitmq"

  service: "rabbitmq"

  log_processing_rules:

type: "multi_line"

      name: "logs_starts_with_equal_sign"

      pattern: "="
  1. Kubernetes에서 로그 수집 활성화
  • Kubernetes 환경에서 로그 수집을 활성화하려면 datadog-agent 설정에서 로그 수집 기능을 true로 설정합니다.

Kubernetes 설정 예시:

apiVersion: v1

kind: ConfigMap

metadata:

  name: datadog-agent

  namespace: default

data:

  datadog.yaml: |

    logs_enabled: true

 

  1. 설정 확인 및 검증 (Validation)
  • Datadog 에이전트가 올바르게 실행되고 있는지 확인하려면 다음 명령어를 사용합니다:

datadog-agent status

  • RabbitMQ가 올바르게 설정된 경우, 명령 결과에서 Checks 섹션에 rabbitmq 항목이 표시됩니다.
  • 참고하면 좋을 내용 :

네트워크의 부하를 줄이기 위해서 30초마다 한번씩 Datadog으로 수집된 큐 정보를 보내는 스크립트를 찾았습니다.

15,000개 큐에 대한 실행도 1초밖에 걸리지 않는다고 합니다.

#!/usr/bin/env ruby

require 'datadog/statsd'

require 'json'

statsd = Datadog::Statsd.new('localhost', 8125)
queue_fields = %w(
  consumer_utilisation
  consumers
  memory
  messages_ready
  name
)

vhosts = JSON.parse(
  `rabbitmqctl list_vhosts --formatter json`,
728x90
반응형