• /
  • EnglishEspañolFrançais日本語한국어Português
  • 로그인지금 시작하기

사용자의 편의를 위해 제공되는 기계 번역입니다.

영문본과 번역본이 일치하지 않는 경우 영문본이 우선합니다. 보다 자세한 내용은 이 페이지를 방문하시기 바랍니다.

문제 신고

OpenTelemetry를 사용하여 Kubernetes에서 호스팅되는 RabbitMQ를 모니터링하세요.

자동 패드 검색 기능이 있는 OpenTelemetry Collector 사용하여 쿠버네티스 클러스터에서 실행 중인 RabbitMQ 모니터링합니다. 이 가이드는 Kubernetes 옵저버 기반의 동적 브로커 감지 기능을 사용하여 Helm 통해 수집기를 구현하고 배포하는 방법을 안내합니다.

Linux 호스트에서 RabbitMQ를 실행하시겠습니까? 가상 머신 또는 베어 메탈 구현, 배포에 대한 자체 호스팅 설치 가이드를 참조하세요.

통합 작동 방식

이 Kubernetes기본 구현인 배포는 자동 검색 및 모니터링을 제공합니다.

주요 구성 요소:

  • Kubernetes 옵저버: 레이블 선택기를 기반으로 RabbitMQ 파드를 지속적으로 감시합니다.

  • 리시버 생성기: 발견된 각 파드에 대해 RabbitMQ 리시버를 동적으로 생성합니다.

  • 리소스 속성 부여: Kubernetes 메타데이터를 사용하여 메트릭을 자동으로 보강합니다.

    • k8s.cluster.name - 클러스터 식별자
    • k8s.namespace.name - 파드 지우스페이스
    • k8s.pod.name - 개인 파드 이름
    • rabbitmq.deployment.name - 파드 이름에서 유래

구현, 배포 모델: 수집기는 지우스페이스 전체에서 파드를 나열하고 감시할 수 있는 RBAC 권한이 있는 Kubernetes 구현, 배포(단일 복제본)로 실행됩니다. 새로운 RabbitMQ 파드가 생성되거나 기존 파드가 제거될 때, 옵저버는 수집기의 설정을 자동으로 업데이트합니다.

중요

수집기가 RabbitMQ 자동으로 검색하려면 파드에 대한 get, listwatch 권한이 필요합니다.

설치 단계

RabbitMQ 모니터링을 사용하여 OpenTelemetry Collector 구현하고 배포하려면 다음 단계를 따르세요.

시작하기 전에

사용 환경이 다음 요구 사항을 충족하는지 확인하십시오.

관리 엔드포인트를 확인하세요

RabbitMQ 파드에 관리 플러그인이 활성화되어 있는지 확인하십시오.

bash
$
kubectl exec deploy/<your-rabbitmq-deployment> -n <rabbitmq-namespace> -- curl -I -u admin:password http://localhost:15672/api/overview

응답에 HTTP/1.1 200 OK 표시되어야 합니다.

Helm 값 파일을 생성합니다.

otel-collector-values.yaml 이라는 이름의 파일을 생성하세요. 이 설정은 receiver_creatork8s_observer 를 사용하여 RabbitMQ 파드를 자동으로 검색합니다.

다음 플레이스홀더를 업데이트하세요:

  • my-rabbitmq-cluster: 쿠버네티스 클러스터 이름

  • rabbitmqRabbitMQ 파드에 대한 app 레이블의 값입니다.

  • admin/password: RabbitMQ 자격 증명

  • 15672: 관리 API 포트

    opentelemetry-collector:
    mode: deployment
    image:
    repository: otel/opentelemetry-collector-contrib
    pullPolicy: IfNotPresent
    command:
    name: otelcol-contrib
    resources:
    limits:
    cpu: 500m
    memory: 300Mi
    requests:
    cpu: 100m
    memory: 100Mi
    extraEnvs:
    - name: NEWRELIC_LICENSE_KEY
    valueFrom:
    secretKeyRef:
    name: newrelic-licenses
    key: NEWRELIC_LICENSE_KEY
    - name: NEWRELIC_OTLP_ENDPOINT
    valueFrom:
    secretKeyRef:
    name: newrelic-licenses
    key: NEWRELIC_OTLP_ENDPOINT
    - name: K8S_NODE_NAME
    valueFrom:
    fieldRef:
    fieldPath: spec.nodeName
    - name: K8S_CLUSTER_NAME
    value: my-rabbitmq-cluster
    - name: RABBITMQ_USERNAME
    value: admin
    - name: RABBITMQ_PASSWORD
    value: password
    clusterRole:
    create: true
    rules:
    - apiGroups: [""]
    resources: ["pods", "nodes", "nodes/stats", "nodes/proxy"]
    verbs: ["get", "list", "watch"]
    - apiGroups: ["apps"]
    resources: ["replicasets", "deployments", "statefulsets"]
    verbs: ["get", "list", "watch"]
    clusterRoleBinding:
    name: ""
    config:
    extensions:
    health_check:
    endpoint: 0.0.0.0:13133
    k8s_observer:
    auth_type: serviceAccount
    observe_pods: true
    observe_nodes: false
    receivers:
    receiver_creator/rabbitmq:
    watch_observers: [k8s_observer]
    receivers:
    rabbitmq:
    # Discover pods with label "app=rabbitmq"
    # Adjust the label selector to match your RabbitMQ pods
    rule: type == "pod" && labels["app"] == "rabbitmq"
    config:
    endpoint: 'http://`endpoint`:15672'
    username: ${env:RABBITMQ_USERNAME}
    password: ${env:RABBITMQ_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
    resource_attributes:
    rabbitmq.server.endpoint: 'http://`endpoint`:15672'
    rabbitmq.port: '15672'
    processors:
    batch:
    send_batch_size: 1024
    timeout: 30s
    resource/cluster:
    attributes:
    - key: k8s.cluster.name
    value: ${env:K8S_CLUSTER_NAME}
    action: upsert
    transform/rabbitmq:
    metric_statements:
    - context: resource
    statements:
    # Create a display name combining Kubernetes metadata
    - set(attributes["rabbitmq.display.name"], Concat([
    "server",
    "k8s",
    attributes["k8s.cluster.name"],
    attributes["k8s.namespace.name"],
    "pod",
    attributes["k8s.pod.name"],
    "rabbitmq",
    attributes["rabbitmq.port"]
    ], ":"))
    # Use pod name as deployment name
    - set(attributes["rabbitmq.deployment.name"], attributes["k8s.pod.name"])
    exporters:
    otlphttp:
    endpoint: "${NEWRELIC_OTLP_ENDPOINT}"
    headers:
    api-key: "${NEWRELIC_LICENSE_KEY}"
    compression: gzip
    service:
    extensions: [health_check, k8s_observer]
    pipelines:
    metrics/rabbitmq:
    receivers: [receiver_creator/rabbitmq]
    processors: [batch, resource/cluster, transform/rabbitmq]
    exporters: [otlphttp]

    레이블 선택기 사용자 지정: RabbitMQ 파드에서 다른 레이블을 사용하는 경우 rule 줄을 업데이트하세요. 예를 들어:

    • StatefulSet 파드: type == "pod" && labels["app.kubernetes.io/name"] == "rabbitmq"

    • 연산자 구현, 배포: type == "pod" && labels["app.kubernetes.io/component"] == "rabbitmq"

      파드 레이블을 보려면 kubectl get pods --show-labels -n <namespace> 실행하세요.

Kubernetes 시크릿을 생성합니다.

뉴럴릭 자격 증명을 Kubernetes 시크릿에 저장하세요.

뉴렐릭 계정과 일치하는 지역을 선택하세요(뉴렐릭에 로그인할 때 브라우저 URL을 확인하세요):

bash
$
kubectl create secret generic newrelic-licenses \
>
--from-literal=NEWRELIC_LICENSE_KEY=YOUR_LICENSE_KEY \
>
--from-literal=NEWRELIC_OTLP_ENDPOINT=https://otlp.nr-data.net:4318 \
>
--namespace newrelic

YOUR_LICENSE_KEY 뉴렐릭 클러스터 키로 바꿉니다.

bash
$
kubectl create secret generic newrelic-licenses \
>
--from-literal=NEWRELIC_LICENSE_KEY=YOUR_LICENSE_KEY \
>
--from-literal=NEWRELIC_OTLP_ENDPOINT=https://otlp.eu01.nr-data.net:4318 \
>
--namespace newrelic

YOUR_LICENSE_KEY 뉴렐릭 클러스터 키로 바꿉니다.

Helm사용하여 구현하다, 배포하다

OpenTelemetry Helm 저장소를 추가하세요:

bash
$
helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts
$
helm repo update

수집기를 설치하거나 업그레이드하세요.

bash
$
helm upgrade --install rabbitmq-otel-collector \
>
open-telemetry/opentelemetry-collector \
>
--namespace newrelic \
>
--create-namespace \
>
--values otel-collector-values.yaml

이렇게 하면 다음과 같은 결과가 생성됩니다.

  • newrelic 지우스페이스에 rabbitmq-otel-collector 라는 이름의 배포
  • RBAC 권한을 가진 서비스 계정으로 파드를 감시할 수 있습니다.
  • 수집기 설정을 포함하는 ConfigMap

구현, 배포, 데이터 흐름 검증

수집기 패드가 실행 중인지 확인합니다.

bash
$
kubectl get pods -n newrelic -l app.kubernetes.io/name=opentelemetry-collector

예상 출력:

NAME READY STATUS RESTARTS AGE
rabbitmq-otel-collector-6d8c5c5d8d-abc12 1/1 Running 0 2m

패드 검색을 확인하기 위해 수집기 로그 보기:

bash
$
kubectl logs deploy/rabbitmq-otel-collector -n newrelic --tail=50

파드 발견 및 수집 성공을 나타내는 메시지를 찾아보세요.

INFO k8sobserver/extension.go:150 Discovered pod {"kind": "pod", "name": "rabbitmq-0", "namespace": "default"}
INFO RabbitmqReceiver Successfully scraped rabbitmq metrics from pod rabbitmq-0

뉴렐릭에서 데이터를 확인하세요:

데이터가 나타날 때까지 2-3분 정도 기다린 후 쿼리 빌더 에서 다음 쿼리를 실행하세요.

SELECT count(*)
FROM Metric
WHERE metricName LIKE 'rabbitmq.%'
AND instrumentation.provider = 'opentelemetry'
AND k8s.cluster.name = 'my-rabbitmq-cluster'
FACET k8s.pod.name, metricName
SINCE 10 minutes ago

Kubernetes 속성이 있는 각 RabbitMQ 파드의 지표가 표시되어야 합니다.

  • k8s.cluster.name - 클러스터 식별자
  • k8s.namespace.name - 파드 지우스페이스
  • k8s.pod.name - 개인 파드 이름
  • rabbitmq.deployment.name - 파드 이름에서 유래

5분 후에도 데이터가 표시되지 않으면 아래 문제 해결, 해결 섹션을 확인하세요.

문제점 해결

다음은 뭐지?

이제 RabbitMQ 모델 설정이 완료되었으므로 옵저버빌리티를 향상할 수 있습니다.

데이터를 살펴보세요:

모니터링 강화:

  • 알림 생성 - 큐 깊이 및 파드 상태에 대한 알림을 설정합니다.
  • 대시보드 구축 - RabbitMQ 지표를 시각화하기 위한 맞춤형 대시보드 생성
Copyright © 2026 New Relic Inc.

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.