Comment surveiller votre instance RabbitMQ pour des performances optimales
Surveillez RabbitMQ avec l'interface de gestion, Prometheus, Grafana et rabbitmqctl pour détecter les problèmes de files d'attente, de consommateurs, de mémoire et de disque.
Comment surveiller votre instance RabbitMQ pour des performances optimales
RabbitMQ se situe entre vos producteurs et consommateurs, donc de petits problèmes de courtier peuvent rapidement devenir des problèmes d'application. Si la profondeur de la file d'attente augmente, les accusés de réception stagnent ou un nœud atteint une alarme mémoire ou disque, vos utilisateurs peuvent voir des travaux retardés bien avant que le courtier ne tombe complètement en panne.
Une bonne surveillance de RabbitMQ suit le flux de messages, la santé des consommateurs, les ressources des nœuds et l'état du cluster. Ce guide couvre le plugin de gestion intégré, Prometheus et Grafana, ainsi que les commandes rabbitmqctl que vous pouvez utiliser lors d'un incident.
Métriques essentielles de RabbitMQ à suivre
La surveillance de RabbitMQ implique le suivi de trois catégories principales de métriques : la santé des files d'attente, l'activité des connexions/canaux et les ressources système.
Métriques de santé des files d'attente
Les métriques de file d'attente sont les indicateurs les plus critiques de l'efficacité du traitement des messages et des retards potentiels :
- Taux de messages (Publication/Livraison/Accusé de réception) : Suit les messages entrant, sortant et étant confirmés par les consommateurs. De faibles taux de livraison associés à des taux de publication élevés indiquent souvent des consommateurs lents ou des goulots d'étranglement.
- Longueur de la file d'attente (
messages_ready) : Le nombre total de messages en attente d'être livrés. Une longueur qui augmente rapidement indique que les consommateurs ne peuvent pas suivre la charge du producteur. - Messages non accusés réception (
messages_unacknowledged) : Messages qui ont été livrés mais qui attendent toujours un accusé de réception. Un nombre élevé ici peut signifier des défaillances de consommateurs, des temps de traitement longs ou des consommateurs bloqués. - Nombre de consommateurs : Le nombre de consommateurs actifs attachés à la file d'attente. Une file d'attente avec une charge élevée mais zéro consommateur est un point de défaillance certain.
- Utilisation de files d'attente durables et de messages persistants : Confirmez que les files d'attente et les messages qui doivent survivre aux redémarrages du courtier sont configurés pour la durabilité. La durabilité est un paramètre de conception, tandis que le comportement d'écriture sur disque dépend également des confirmations de l'éditeur et de l'état du stockage.
Activité des connexions et des canaux
Ces métriques aident à identifier les fuites ou un nettoyage inapproprié des ressources :
- Nombre de connexions : Total des connexions TCP ouvertes. Trop de connexions peuvent submerger le système d'exploitation sous-jacent ou la machine virtuelle Erlang.
- Nombre de canaux : Canaux actifs au sein des connexions. Les canaux sont moins coûteux que les connexions, mais des nombres excessifs indiquent toujours une tension sur les ressources.
- État de la connexion client : Recherchez les connexions bloquées dans des états transitoires ou des taux élevés de renouvellement de connexions.
Ressources système et de la machine virtuelle Erlang
RabbitMQ fonctionne sur la machine virtuelle Erlang, ce qui rend son utilisation interne des ressources distincte des processus OS standard :
- Utilisation de la mémoire : Mémoire totale consommée par la machine virtuelle Erlang. RabbitMQ utilise un système de seuil ; si la mémoire atteint le seuil haut, il limite les producteurs.
- Processus Erlang : Le nombre total de processus légers en cours d'exécution dans la machine virtuelle. Un nombre de processus incontrôlé indique une fuite de ressources potentielle ou une boucle infinie dans un plugin.
- Descripteurs de fichiers : Surveille la disponibilité des handles de fichiers, cruciaux pour les connexions, les files d'attente et le stockage persistant.
- Limite d'espace disque libre : RabbitMQ déclenche une alarme disque et bloque les éditeurs lorsque l'espace disque libre tombe en dessous du seuil configuré. La valeur par défaut a souvent été faible pour les petits systèmes de test, donc les nœuds de production doivent définir et surveiller une valeur explicite.
Surveillance avec le plugin de gestion RabbitMQ
Le plugin de gestion RabbitMQ est l'outil intégré principal pour la visualisation et les contrôles opérationnels en temps réel. Il fournit à la fois une interface Web et une API HTTP puissante.
Activation du plugin
Le plugin est généralement installé avec RabbitMQ mais doit être explicitement activé :
sudo rabbitmq-plugins enable rabbitmq_management
Une fois activé, l'interface Web est généralement accessible sur le port 15672 (par exemple, http://localhost:15672).
Vues clés dans l'interface Web
- Page d'aperçu : Fournit des statistiques de haut niveau, y compris les taux de flux de messages (publication/livraison globale), l'utilisation de la mémoire et les nombres de connexions. C'est votre tableau de bord de santé initial.
- Onglet Files d'attente : Offre des métriques détaillées pour chaque file d'attente, y compris les taux de messages instantanés et agrégés, l'utilisation du consommateur et la longueur de la file d'attente. Utilisez la fonction de tri pour trouver rapidement les files d'attente les plus longues ou les plus occupées.
- Onglets Connexions et Canaux : Permet d'inspecter les connexions client individuelles, montrant leur statut, les détails du protocole et l'utilisation de la bande passante.
Utilisation de l'API HTTP
Pour les contrôles automatisés et l'intégration dans des tableaux de bord personnalisés, le plugin de gestion expose une API HTTP étendue. C'est idéal pour script des contrôles de santé ou s'intégrer à des systèmes de surveillance propriétaires.
Exemple : Vérification de la santé du cluster
# Vérifier les statistiques de base de l'aperçu
curl -u user:password http://localhost:15672/api/overview
# Obtenir les métriques pour une file d'attente spécifique (par exemple, 'task_queue')
curl -u user:password http://localhost:15672/api/queues/%2F/task_queue
Astuce : L'API HTTP renvoie des données JSON détaillées, vous permettant de filtrer et d'alerter sur des seuils numériques spécifiques, tels que la longueur de la file d'attente ou les nombres de messages non accusés réception.
Surveillance avancée avec Prometheus et Grafana
Pour les environnements de production, l'intégration des métriques RabbitMQ avec des systèmes de surveillance de séries temporelles standard comme Prometheus (pour la collecte) et Grafana (pour la visualisation) est la meilleure pratique. RabbitMQ fournit un plugin dédié pour cela.
1. Activation du plugin Prometheus
Ce plugin expose les métriques dans le format attendu par Prometheus, généralement sur le port 15692 (ou 15672/metrics si vous utilisez le port de gestion).
sudo rabbitmq-plugins enable rabbitmq_prometheus
2. Configuration du scraping Prometheus
Une fois activé, vous devez configurer Prometheus pour scraper le point de terminaison. Ajoutez un travail similaire à ce qui suit à votre configuration prometheus.yml :
scrape_configs:
- job_name: 'rabbitmq'
metrics_path: /metrics
# Le plugin rabbitmq_prometheus expose /metrics sur le port 15692 par défaut.
static_configs:
- targets: ['rabbitmq-host:15692']
3. Visualisation dans Grafana
Grafana utilise les données collectées par Prometheus pour créer des tableaux de bord puissants. Les panneaux clés devraient inclure :
- Arriéré de files d'attente : Graphique
rabbitmq_queue_messages_readyetrabbitmq_queue_messages_unackedau fil du temps. - Taux de messages : Suivez les taux de publication, de livraison et d'accusé de réception pour voir si les consommateurs suivent le rythme.
- Utilisation des ressources du nœud : Suivez la mémoire, les descripteurs de fichiers, l'utilisation des processus Erlang et les alarmes disque.
Exemple de métrique Prometheus pour la longueur de file d'attente :
La métrique standard pour la longueur de file d'attente exposée par le plugin est :
rabbitmq_queue_messages_ready{queue="my_critical_queue", vhost="/"}
Meilleure pratique de surveillance : Alertes
Configurez des alertes dans Prometheus Alertmanager ou Grafana basées sur des seuils clairs :
| Signal | Exemple d'alerte | Action recommandée |
|---|---|---|
| Messages prêts | L'arriéré de la file d'attente continue de croître pendant 5 minutes | Vérifiez les erreurs des consommateurs, ajoutez des consommateurs si l'application peut traiter en toute sécurité, ou ralentissez les producteurs. |
| Messages non accusés réception | Le nombre de non accusés réception reste élevé tandis que le taux d'accusé de réception est faible | Inspectez la latence des consommateurs, les plantages, les paramètres de prélecture et les dépendances en aval. |
| Alarme disque | Un nœud signale une alarme d'espace disque libre | Libérez de l'espace, étendez le stockage ou déplacez les données avant que les producteurs ne restent bloqués. |
| Alarme mémoire | Un nœud signale une alarme mémoire | Trouvez les grandes files d'attente, les nombres élevés de connexions/canaux ou les plugins gourmands en mémoire et ajustez la capacité. |
Diagnostics CLI avec rabbitmqctl
L'utilitaire en ligne de commande rabbitmqctl est essentiel pour une inspection rapide et directe et des contrôles opérationnels, surtout lorsque l'interface Web ou les systèmes de surveillance externes ne sont pas disponibles.
Vérification de l'état du nœud
Cette commande fournit une vérification rapide de la santé, montrant les applications en cours d'exécution, l'utilisation de la mémoire, les nombres de descripteurs de fichiers et les détails de connexion.
rabbitmqctl status
Liste des files d'attente critiques
Vous pouvez utiliser list_queues pour identifier rapidement les goulots d'étranglement en vous concentrant sur les indicateurs clés de performance (KPI) :
# Lister les files d'attente montrant le nom, le nombre total de messages, les messages prêts et le nombre de consommateurs
rabbitmqctl list_queues name messages messages_ready consumers
# Pour un nœud occupé, envoyez la sortie via sort localement.
rabbitmqctl list_queues name messages messages_ready consumers | sort -k2 -nr | head
Analyse des connexions et des canaux
Pour dépanner un comportement client spécifique, vous pouvez lister les connexions et les canaux, en filtrant par utilisateur ou adresse réseau :
# Lister les connexions actives, montrant l'utilisateur et l'IP source
rabbitmqctl list_connections user peer_host
# Lister les canaux actifs et leur statut de flux de messages
rabbitmqctl list_channels connection_details consumer_count messages_unacknowledged
Sur les grands clusters, les commandes de liste générales peuvent ajouter de la charge à un nœud déjà stressé. Préférez les vérifications ciblées de file d'attente, de vhost ou de connexion lors d'un incident.
Meilleures pratiques pour maintenir les performances
- Surveiller la capacité des consommateurs : Surveillez la capacité des consommateurs dans l'interface de gestion et les métriques exportées. Une valeur faible signifie souvent que les files d'attente peuvent livrer plus vite que les consommateurs ne peuvent accepter le travail, ce qui indique des consommateurs lents, une faible prélecture ou une latence en aval.
- Gérer le contrôle de flux des producteurs : RabbitMQ utilise les alarmes mémoire et disque d'Erlang pour appliquer une contre-pression. Surveillez ces alarmes de près, car elles indiquent que le nœud atteint les limites de capacité et que les producteurs sont limités.
- Intégration des journaux : Intégrez les journaux RabbitMQ dans un système de journalisation centralisé (pile ELK, Splunk, etc.). Recherchez les avertissements récurrents liés aux défaillances réseau, aux tentatives d'authentification échouées ou à la synchronisation mémoire lente.
- Vérifications de santé du cluster : Si vous exécutez un cluster, surveillez l'appartenance des nœuds, les partitions réseau, la santé des files d'attente de quorum et l'état de synchronisation.
rabbitmqctl cluster_statusest une première vérification utile lorsque les nœuds ne sont pas d'accord sur l'appartenance au cluster.
Point clé à retenir
Utilisez l'interface de gestion pour une inspection rapide, Prometheus et Grafana pour les tendances et les alertes, et rabbitmqctl pour les diagnostics ciblés lorsque quelque chose ne va pas déjà. Commencez les alertes autour des arriérés croissants, des messages non accusés réception bloqués, des alarmes disque, des alarmes mémoire et de la santé du cluster ; ces signaux vous indiquent généralement des problèmes avant que les applications n'expirent.