Monitorez RabbitMQ s'exécutant sur des hôtes Linux en installant et en configurant le collecteur OpenTelemetry. Ce guide complet vous accompagne dans l'installation, la configuration et la vérification des systèmes Debian, Ubuntu, RHEL et CentOS.
Étapes d'installation
Suivez ces étapes pour configurer le monitoring de votre instance RabbitMQ auto-hébergée.
Avant de commencer
Assurez-vous que votre environnement respecte ces prérequis :
Activer le plugin de gestion RabbitMQ
Le plugin de gestion expose l'API que l'OpenTelemetry Collector scrape :
$sudo rabbitmq-plugins enable rabbitmq_managementVérifier que cela fonctionne :
$curl -I -u admin:password http://localhost:15672/api/overviewVous devriez voir HTTP/1.1 200 OK dans la réponse.
Installer le collecteur OpenTelemetry
Pour toutes les distributions Linux :
Téléchargez et installez le binaire OpenTelemetry Collector Contrib pour le système d'exploitation de votre hôte à partir des versions d'OpenTelemetry Collector.
Configurer le collecteur
Créer ou remplacer /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]Mettez à jour ces valeurs dans la configuration :
endpoint: Votre URL d'API de gestion RabbitMQ (par défaut :http://localhost:15672)usernameetpassword: Vos identifiants RabbitMQrabbitmq.deployment.name: Un nom unique pour cette instance RabbitMQcollection_interval: Fréquence de collecte des métriques (par défaut : 30 secondes)
Définir les variables d'environnement
Créer un fichier de surcharge systemd pour les variables d'environnement :
$sudo mkdir -p /etc/systemd/system/otelcol-contrib.service.dChoisissez votre région 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"$EOFRemplacez YOUR_LICENSE_KEY par votre clé de licence 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"$EOFRemplacez YOUR_LICENSE_KEY par votre clé de licence New Relic.
Rechargez systemd et redémarrez le collecteur :
$sudo systemctl daemon-reload$sudo systemctl restart otelcol-contribVérifiez vos données dans New Relic
Vérifiez l'état du service :
$sudo systemctl status otelcol-contribVous devriez voir active (running) dans la sortie.
Voir les logs récents :
$sudo journalctl -u otelcol-contrib -n 50 --no-pagerRecherchez des messages indiquant une collecte de métriques réussie :
INFO RabbitmqReceiver Successfully scraped rabbitmq metricsVérifier les métriques dans New Relic :
Attendez 2 à 3 minutes que les données apparaissent, puis exécutez cette requête dans le générateur de requêtes:
SELECT count(*)FROM MetricWHERE metricName LIKE 'rabbitmq.%' AND instrumentation.provider = 'opentelemetry' AND rabbitmq.deployment.name = 'my-rabbitmq-server'FACET metricNameSINCE 10 minutes agoVous devriez voir des noms de métriques tels que :
rabbitmq.queue.count- Nombre de files d'attenterabbitmq.queue.message.count- Total des messages dans les files d'attenterabbitmq.connection.count- Connexions activesrabbitmq.consumer.count- Consommateurs actifs
Conseil
Si vous ne voyez pas de données après 5 minutes, consultez la section de dépannage ci-dessous.
(Facultatif) Transférer les logs RabbitMQ vers New Relic
En plus des métriques, vous pouvez transférer les logs d'application RabbitMQ vers New Relic pour une observabilité complète. Cela permet de corréler les problèmes entre les métriques et les logs.
Important
Le transfert de logs nécessite une configuration supplémentaire et des permissions système. Assurez-vous de disposer des accès nécessaires avant de continuer.
Mettez à jour /etc/otelcol-contrib/config.yaml pour ajouter le récepteur 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]Accordez au collecteur l'autorisation de lire les logs. Choisissez une méthode :
Ajouter au groupe rabbitmq :
$sudo usermod -a -G rabbitmq otelcol-contribOu définissez les permissions de fichier :
$sudo chmod 644 /var/log/rabbitmq/*.logRedémarrez le collecteur :
$sudo systemctl restart otelcol-contribVérifiez que les logs sont collectés dans New Relic :
SELECT count(*)FROM LogWHERE service.name = 'rabbitmq' AND rabbitmq.deployment.name = 'my-rabbitmq-server'SINCE 10 minutes agoTrouvez vos données
Après quelques minutes, vos métriques RabbitMQ devraient apparaître dans New Relic. Consultez Trouver et interroger vos données pour obtenir des instructions détaillées sur l'exploration de vos métriques RabbitMQ dans les différentes vues de l'interface utilisateur New Relic.
Vous pouvez également interroger vos données avec NRQL :
FROM Metric SELECT * WHERE rabbitmq.deployment.name = 'my-rabbitmq-server'Dépannage
Prochaines étapes
Maintenant que vous avez configuré le monitoring de RabbitMQ, vous pouvez améliorer votre observabilité :
Explorez vos données :
- Trouver et interroger vos données - Naviguer dans l'interface New Relic et écrire des requêtes NRQL
- Explorer les métriques RabbitMQ - Référence complète des métriques avec des recommandations d'alerte
Améliorer le monitoring :
- Créer des alertes - Configurer des alertes pour les profondeurs de file d'attente et les arriérés de messages
- Créer des dashboards - Créez des dashboards personnalisés pour visualiser vos métriques RabbitMQ