• /
  • EnglishEspañolFrançais日本語한국어Português
  • Inicia sesiónComenzar ahora

Te ofrecemos esta traducción automática para facilitar la lectura.

En caso de que haya discrepancias entre la versión en inglés y la versión traducida, se entiende que prevalece la versión en inglés. Visita esta página para obtener más información.

Crea una propuesta

Monitorear RabbitMQ alojado en Kubernetes con OpenTelemetry

Monitoree RabbitMQ que se ejecuta en clústeres de Kubernetes utilizando el OpenTelemetry Collector con descubrimiento automático de pods. Esta guía le explica cómo desplegar el colector mediante Helm con detección dinámica de brokers basada en el observador de Kubernetes.

Sugerencia

¿Ejecuta RabbitMQ en hosts Linux? Consulte la guía de instalación autohospedada para implementaciones en máquinas virtuales o bare metal.

Cómo funciona la integración

Esta implementación nativa de Kubernetes proporciona descubrimiento y monitoreo automáticos:

Componentes clave:

  • Observador de Kubernetes: Observa continuamente los pods de RabbitMQ basándose en selectores de etiquetas

  • Creador de receptores: Crea dinámicamente receptores de RabbitMQ para cada pod descubierto

  • Atribución de recursos: Enriquece automáticamente las métricas con metadatos de Kubernetes:

    • k8s.cluster.name - Su identificador de clúster
    • k8s.namespace.name - Espacio de nombres del pod
    • k8s.pod.name - Nombre del pod individual
    • rabbitmq.deployment.name - Derivado del nombre del pod

Modelo de despliegue: El recopilador se ejecuta como un despliegue de Kubernetes (réplica única) con permisos RBAC para listar y observar pods en todos los espacios de nombres. Cuando se crean nuevos pods de RabbitMQ o se eliminan los existentes, el observador actualiza automáticamente la configuración del colector.

Importante

El recopilador requiere permisos de get, list y watch en los pods para descubrir instancias de RabbitMQ automáticamente.

Pasos de instalación

Siga estos pasos para desplegar el OpenTelemetry Collector con monitoreo de RabbitMQ.

Antes de que empieces

Asegúrese de que su entorno cumpla con estos requisitos:

Verificar el punto de conexión de gestión

Asegúrese de que los pods de RabbitMQ tengan habilitado el plugin de administración:

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

Debería ver HTTP/1.1 200 OK en la respuesta.

Crear archivo de valores de Helm

Cree un archivo llamado otel-collector-values.yaml. Esta configuración utiliza el receiver_creator con k8s_observer para descubrir automáticamente pods de RabbitMQ.

Actualice estos marcadores de posición:

  • my-rabbitmq-cluster: Nombre de su clúster de Kubernetes

  • rabbitmq: El valor de la etiqueta app para sus pods de RabbitMQ

  • admin/password: Sus credenciales de RabbitMQ

  • 15672: El puerto de la API de gestión

    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]

    Sugerencia

    Personalización del selector de etiquetas: Si sus pods de RabbitMQ utilizan etiquetas diferentes, actualice la línea rule. Por ejemplo:

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

    • Implementaciones del operador: type == "pod" && labels["app.kubernetes.io/component"] == "rabbitmq"

      Ejecute kubectl get pods --show-labels -n <namespace> para ver las etiquetas de su pod.

Crear secreto de Kubernetes

Guarde sus credenciales de New Relic en un secreto de Kubernetes.

Selecciona la región que corresponde a tu cuenta de New Relic (revisa la URL de tu navegador cuando inicies sesión en New Relic):

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

Reemplaza YOUR_LICENSE_KEY por tu clave de licencia de New Relic.

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

Reemplaza YOUR_LICENSE_KEY por tu clave de licencia de New Relic.

Desplegar con Helm

Agregue el repositorio Helm de OpenTelemetry:

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

Instale o actualice el colector:

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

Esto crea:

  • Una implementación llamada rabbitmq-otel-collector en el espacio de nombres newrelic
  • Una cuenta de servicio con permisos RBAC para observar pods
  • ConfigMaps que contienen la configuración del recopilador

Verifique el despliegue y el flujo de datos

Compruebe que el pod del colector se esté ejecutando:

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

Resultado esperado:

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

Vea los logs del recopilador para verificar el descubrimiento de pods:

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

Busque mensajes que indiquen el descubrimiento de pods y la recolección de métricas exitosos:

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

Verifique sus datos en New Relic:

Espere de 2 a 3 minutos para que aparezcan los datos, luego ejecute esta consulta en el generador de consultas:

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

Debería ver métricas de cada pod de RabbitMQ con atributos de Kubernetes:

  • k8s.cluster.name - Su identificador de clúster
  • k8s.namespace.name - Espacio de nombres del pod
  • k8s.pod.name - Nombre del pod individual
  • rabbitmq.deployment.name - Derivado del nombre del pod

Sugerencia

Si no ve datos después de 5 minutos, consulte la sección de solución de problemas a continuación.

Resolución de problemas

¿Que sigue?

Ahora que tiene configurado el monitoreo de RabbitMQ, puede mejorar su observabilidad:

Explore sus datos:

Mejorar el monitoreo:

  • Crear alertas - Configura alertas para la profundidad de las colas y la salud de los pods
  • Crear paneles - Cree paneles personalizados para visualizar sus métricas de RabbitMQ
Copyright © 2026 New Relic Inc.

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