Monitore o RabbitMQ em execução em clusters Kubernetes usando o OpenTelemetry Collector com descoberta automática de pods. Este guia orienta você na implantação do coletor via Helm com detecção dinâmica de broker baseada no observador do Kubernetes.
Dica
Executando RabbitMQ em hosts Linux? Consulte o guia de instalação auto-hospedada para implantações em máquinas virtuais ou bare metal.
Como a integração funciona
Esta implantação nativa do Kubernetes fornece descoberta e monitoramento automáticos:
Principais componentes:
Observador do Kubernetes: Monitora continuamente os pods do RabbitMQ com base em seletores de rótulo
Criador de receptores: Cria dinamicamente receptores RabbitMQ para cada pod descoberto
Atribuição de recursos: Enriquece automaticamente as métricas com metadados do Kubernetes:
k8s.cluster.name- Seu identificador de clusterk8s.namespace.name- Namespace do Podk8s.pod.name- Nome do pod individualrabbitmq.deployment.name- Derivado do nome do pod
Modelo de implantação: O coletor é executado como um Deployment do Kubernetes (réplica única) com permissões RBAC para listar e observar pods em todos os namespaces. Quando novos pods do RabbitMQ são criados ou os existentes são removidos, o observador atualiza automaticamente a configuração do coletor.
Importante
O coletor requer permissões de get, list e watch nos pods para descobrir instâncias do RabbitMQ automaticamente.
Etapas de instalação
Siga estas etapas para implantar o OpenTelemetry Collector com monitoramento do RabbitMQ.
Antes de você começar
Certifique-se de que seu ambiente atenda a estes requisitos:
Verifique o endpoint de gerenciamento
Certifique-se de que os pods do RabbitMQ tenham o plugin de gerenciamento habilitado:
$kubectl exec deploy/<your-rabbitmq-deployment> -n <rabbitmq-namespace> -- curl -I -u admin:password http://localhost:15672/api/overviewVocê deve ver HTTP/1.1 200 OK na resposta.
Crie o arquivo de valores do Helm
Crie um arquivo chamado otel-collector-values.yaml. Esta configuração usa o receiver_creator com k8s_observer para descobrir automaticamente os pods do RabbitMQ.
Atualize estes espaços reservados:
my-rabbitmq-cluster: O nome do seu cluster Kubernetesrabbitmq: O valor do rótuloapppara seus pods do RabbitMQadmin/password: Suas credenciais do RabbitMQ15672: A porta da API de gerenciamentoopentelemetry-collector:mode: deploymentimage:repository: otel/opentelemetry-collector-contribpullPolicy: IfNotPresentcommand:name: otelcol-contribresources:limits:cpu: 500mmemory: 300Mirequests:cpu: 100mmemory: 100MiextraEnvs:- name: NEWRELIC_LICENSE_KEYvalueFrom:secretKeyRef:name: newrelic-licenseskey: NEWRELIC_LICENSE_KEY- name: NEWRELIC_OTLP_ENDPOINTvalueFrom:secretKeyRef:name: newrelic-licenseskey: NEWRELIC_OTLP_ENDPOINT- name: K8S_NODE_NAMEvalueFrom:fieldRef:fieldPath: spec.nodeName- name: K8S_CLUSTER_NAMEvalue: my-rabbitmq-cluster- name: RABBITMQ_USERNAMEvalue: admin- name: RABBITMQ_PASSWORDvalue: passwordclusterRole:create: truerules:- 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:13133k8s_observer:auth_type: serviceAccountobserve_pods: trueobserve_nodes: falsereceivers:receiver_creator/rabbitmq:watch_observers: [k8s_observer]receivers:rabbitmq:# Discover pods with label "app=rabbitmq"# Adjust the label selector to match your RabbitMQ podsrule: type == "pod" && labels["app"] == "rabbitmq"config:endpoint: 'http://`endpoint`:15672'username: ${env:RABBITMQ_USERNAME}password: ${env:RABBITMQ_PASSWORD}collection_interval: 30smetrics:# Queue Metrics (essential for message flow and backlog)rabbitmq.consumer.count:enabled: truerabbitmq.message.delivered:enabled: truerabbitmq.message.published:enabled: truerabbitmq.message.acknowledged:enabled: truerabbitmq.message.dropped:enabled: truerabbitmq.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: truerabbitmq.node.disk_free_limit:enabled: truerabbitmq.node.disk_free_alarm:enabled: truerabbitmq.node.mem_used:enabled: truerabbitmq.node.mem_limit:enabled: truerabbitmq.node.mem_alarm:enabled: truerabbitmq.node.mem_used_details.rate:enabled: truerabbitmq.node.fd_used:enabled: truerabbitmq.node.fd_total:enabled: truerabbitmq.node.sockets_used:enabled: truerabbitmq.node.sockets_total:enabled: truerabbitmq.node.proc_used:enabled: truerabbitmq.node.proc_total:enabled: truerabbitmq.node.uptime:enabled: truerabbitmq.node.run_queue:enabled: truerabbitmq.node.processors:enabled: truerabbitmq.node.context_switches_details.rate:enabled: truerabbitmq.node.gc_num_details.rate:enabled: truerabbitmq.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: truerabbitmq.node.io_read_bytes_details.rate:enabled: truerabbitmq.node.io_read_avg_time_details.rate:enabled: truerabbitmq.node.io_write_count_details.rate:enabled: truerabbitmq.node.io_write_bytes_details.rate:enabled: truerabbitmq.node.io_write_avg_time_details.rate:enabled: truerabbitmq.node.io_sync_count_details.rate:enabled: truerabbitmq.node.io_sync_avg_time_details.rate:enabled: truerabbitmq.node.io_seek_count_details.rate:enabled: truerabbitmq.node.io_seek_avg_time_details.rate:enabled: truerabbitmq.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: truerabbitmq.node.mnesia_disk_tx_count_details.rate:enabled: truerabbitmq.node.msg_store_read_count_details.rate:enabled: truerabbitmq.node.msg_store_write_count_details.rate:enabled: truerabbitmq.node.queue_index_write_count_details.rate:enabled: truerabbitmq.node.queue_index_read_count_details.rate:enabled: true# Connection/Channel/Queue Lifecycle Metricsrabbitmq.node.connection_created_details.rate:enabled: truerabbitmq.node.connection_closed_details.rate:enabled: truerabbitmq.node.channel_created_details.rate:enabled: truerabbitmq.node.channel_closed_details.rate:enabled: truerabbitmq.node.queue_declared_details.rate:enabled: truerabbitmq.node.queue_created_details.rate:enabled: truerabbitmq.node.queue_deleted_details.rate:enabled: trueresource_attributes:rabbitmq.server.endpoint: 'http://`endpoint`:15672'rabbitmq.port: '15672'processors:batch:send_batch_size: 1024timeout: 30sresource/cluster:attributes:- key: k8s.cluster.namevalue: ${env:K8S_CLUSTER_NAME}action: upserttransform/rabbitmq:metric_statements:- context: resourcestatements:# 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: gzipservice:extensions: [health_check, k8s_observer]pipelines:metrics/rabbitmq:receivers: [receiver_creator/rabbitmq]processors: [batch, resource/cluster, transform/rabbitmq]exporters: [otlphttp]Dica
Personalização do seletor de rótulos: Se seus pods RabbitMQ usam rótulos diferentes, atualize a linha
rule. Por exemplo:Pods do StatefulSet:
type == "pod" && labels["app.kubernetes.io/name"] == "rabbitmq"Implantações do Operador:
type == "pod" && labels["app.kubernetes.io/component"] == "rabbitmq"Execute
kubectl get pods --show-labels -n <namespace>para visualizar os rótulos do seu pod.
Criar segredo do Kubernetes
Armazene suas credenciais do New Relic em um segredo do Kubernetes.
Selecione a região que corresponde à sua conta New Relic (verifique a URL do seu navegador quando estiver logado no New Relic):
$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 newrelicSubstitua YOUR_LICENSE_KEY por sua chave de licença New Relic.
$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 newrelicSubstitua YOUR_LICENSE_KEY por sua chave de licença New Relic.
Implantar com Helm
Adicione o repositório Helm do OpenTelemetry:
$helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts$helm repo updateInstale ou atualize o coletor:
$helm upgrade --install rabbitmq-otel-collector \> open-telemetry/opentelemetry-collector \> --namespace newrelic \> --create-namespace \> --values otel-collector-values.yamlIsso cria:
- Uma implantação chamada
rabbitmq-otel-collectorno namespacenewrelic - Uma ServiceAccount com permissões RBAC para monitorar pods
- ConfigMaps contendo a configuração do coletor
Verifique a implantação e o fluxo de dados
Verifique se o pod do coletor está em execução:
$kubectl get pods -n newrelic -l app.kubernetes.io/name=opentelemetry-collectorResultado esperado:
NAME READY STATUS RESTARTS AGErabbitmq-otel-collector-6d8c5c5d8d-abc12 1/1 Running 0 2mVisualize os logs do coletor para verificar a descoberta de pods:
$kubectl logs deploy/rabbitmq-otel-collector -n newrelic --tail=50Procure mensagens indicando a descoberta de pods e a coleta de métricas bem-sucedidas:
INFO k8sobserver/extension.go:150 Discovered pod {"kind": "pod", "name": "rabbitmq-0", "namespace": "default"}INFO RabbitmqReceiver Successfully scraped rabbitmq metrics from pod rabbitmq-0Verifique seus dados no New Relic:
Aguarde de 2 a 3 minutos para que os dados apareçam e, em seguida, execute esta consulta no construtor de consultas:
SELECT count(*)FROM MetricWHERE metricName LIKE 'rabbitmq.%' AND instrumentation.provider = 'opentelemetry' AND k8s.cluster.name = 'my-rabbitmq-cluster'FACET k8s.pod.name, metricNameSINCE 10 minutes agoVocê deve ver métricas de cada pod do RabbitMQ com atributos do Kubernetes:
k8s.cluster.name- Seu identificador de clusterk8s.namespace.name- Namespace do Podk8s.pod.name- Nome do pod individualrabbitmq.deployment.name- Derivado do nome do pod
Dica
Se você não visualizar dados após 5 minutos, consulte a seção de solução de problemas abaixo.
Resolução de problemas
Qual é o próximo?
Agora que você configurou o monitoramento do RabbitMQ, pode aprimorar sua observabilidade:
Explore seus dados:
- Explore as métricas do RabbitMQ - Lista completa de métricas com exemplos de consulta NRQL
Aprimore o monitoramento:
- Criar alertas - Configure alertas para profundidade de fila e integridade do pod
- Construa dashboards - Crie dashboards personalizados para visualizar suas métricas do RabbitMQ