Monitore o RabbitMQ em execução em hosts Linux instalando e configurando o OpenTelemetry Collector. Este guia abrangente orienta você na instalação, configuração e verificação para sistemas Debian, Ubuntu, RHEL e CentOS.
Etapas de instalação
Siga estas etapas para configurar o monitoramento da sua instância auto-hospedada do RabbitMQ.
Antes de você começar
Certifique-se de que seu ambiente atenda a estes requisitos:
Habilite o plugin de gerenciamento do RabbitMQ
O plugin de gerenciamento expõe a API que o OpenTelemetry Collector coleta:
$sudo rabbitmq-plugins enable rabbitmq_managementVerifique se está funcionando:
$curl -I -u admin:password http://localhost:15672/api/overviewVocê deve ver HTTP/1.1 200 OK na resposta.
Instale o OpenTelemetry Collector
Para todas as distribuições Linux:
Baixe e instale o binário OpenTelemetry Collector Contrib para o sistema operacional do seu host em OpenTelemetry Collector releases.
Configurar o coletor
Criar ou substituir /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]Atualize estes valores na configuração:
endpoint: Sua URL da API de gerenciamento do RabbitMQ (padrão:http://localhost:15672)usernameepassword: Suas credenciais do RabbitMQrabbitmq.deployment.name: Um nome exclusivo para esta instância do RabbitMQcollection_interval: Com que frequência coletar métricas (padrão: 30 segundos)
Definir variáveis de ambiente
Crie um arquivo de override do systemd para variáveis de ambiente:
$sudo mkdir -p /etc/systemd/system/otelcol-contrib.service.dEscolha sua região da New Relic:
$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"$EOFSubstitua YOUR_LICENSE_KEY por sua chave de licença New Relic.
$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"$EOFSubstitua YOUR_LICENSE_KEY por sua chave de licença New Relic.
Recarregue o systemd e reinicie o coletor:
$sudo systemctl daemon-reload$sudo systemctl restart otelcol-contribVerifique seus dados no New Relic
Verifique o status do serviço:
$sudo systemctl status otelcol-contribVocê deve ver active (running) na saída.
Visualizar logs recentes:
$sudo journalctl -u otelcol-contrib -n 50 --no-pagerProcure por mensagens indicando uma coleta de métricas bem-sucedida:
INFO RabbitmqReceiver Successfully scraped rabbitmq metricsVerifique as métricas 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 rabbitmq.deployment.name = 'my-rabbitmq-server'FACET metricNameSINCE 10 minutes agoVocê deve ver nomes de métricas como:
rabbitmq.queue.count- Número de filasrabbitmq.queue.message.count- Total de mensagens nas filasrabbitmq.connection.count- Conexões ativasrabbitmq.consumer.count- Consumidores ativos
Dica
Se você não visualizar dados após 5 minutos, consulte a seção de solução de problemas abaixo.
(Opcional) Encaminhar logs do RabbitMQ para o New Relic
Além de métricas, você pode encaminhar logs de aplicativo do RabbitMQ para o New Relic para uma observabilidade abrangente. Isso ajuda a correlacionar problemas entre métricas e logs.
Importante
O encaminhamento de logs requer configuração adicional e permissões do sistema. Certifique-se de ter o acesso necessário antes de prosseguir.
Atualize /etc/otelcol-contrib/config.yaml para adicionar o receptor filelog:
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]Conceda permissão ao coletor para ler logs. Escolha um método:
Adicionar ao grupo rabbitmq:
$sudo usermod -a -G rabbitmq otelcol-contribOu defina as permissões de arquivo:
$sudo chmod 644 /var/log/rabbitmq/*.logReinicie o coletor:
$sudo systemctl restart otelcol-contribVerifique se os logs estão sendo coletados no New Relic:
SELECT count(*)FROM LogWHERE service.name = 'rabbitmq' AND rabbitmq.deployment.name = 'my-rabbitmq-server'SINCE 10 minutes agoEncontre seus dados
Após alguns minutos, suas métricas do RabbitMQ devem aparecer no New Relic. Veja Encontre e consulte seus dados para instruções detalhadas sobre como explorar suas métricas do RabbitMQ em diferentes visualizações na UI do New Relic.
Você também pode consultar seus dados com NRQL:
FROM Metric SELECT * WHERE rabbitmq.deployment.name = 'my-rabbitmq-server'Resolução de problemas
Próximos passos
Agora que você configurou o monitoramento do RabbitMQ, pode aprimorar sua observabilidade:
Explore seus dados:
- Encontre e consulte seus dados - Navegue pela interface do New Relic e escreva consultas NRQL
- Explore as métricas do RabbitMQ - Referência completa de métricas com recomendações de alerta
Aprimore o monitoramento:
- Criar alertas - Configure alertas para profundidades de fila e backlogs de mensagens
- Construa dashboards - Crie dashboards personalizados para visualizar suas métricas do RabbitMQ