So überwachen Sie Ihre RabbitMQ-Instanz für optimale Leistung

Überwachen Sie RabbitMQ mit Management-UI, Prometheus, Grafana und rabbitmqctl, um Probleme mit Warteschlangen, Verbrauchern, Speicher und Festplatten zu erkennen.

So überwachen Sie Ihre RabbitMQ-Instanz für optimale Leistung

RabbitMQ sitzt zwischen Ihren Produzenten und Verbrauchern, daher können kleine Broker-Probleme schnell zu Anwendungsproblemen werden. Wenn die Warteschlangentiefe wächst, Bestätigungen ins Stocken geraten oder ein Knoten einen Speicher- oder Festplattenalarm auslöst, können Ihre Benutzer lange vor einem vollständigen Broker-Ausfall Verzögerungen bei der Arbeit bemerken.

Eine gute RabbitMQ-Überwachung verfolgt den Nachrichtenfluss, die Gesundheit der Verbraucher, die Knotenressourcen und den Clusterzustand. Diese Anleitung behandelt das integrierte Management-Plugin, Prometheus und Grafana sowie rabbitmqctl-Befehle, die Sie während eines Vorfalls verwenden können.

Wichtige RabbitMQ-Metriken zur Überwachung

Die Überwachung von RabbitMQ umfasst die Verfolgung von drei Hauptkategorien von Metriken: Warteschlangengesundheit, Verbindungs-/Kanalaktivität und Systemressourcen.

Metriken zur Warteschlangengesundheit

Warteschlangenmetriken sind die kritischsten Indikatoren für die Effizienz der Nachrichtenverarbeitung und mögliche Rückstände:

  • Nachrichtenraten (Veröffentlichen/Zustellen/Bestätigen): Verfolgt Nachrichten, die eingehen, verlassen und von Verbrauchern bestätigt werden. Niedrige Zustellraten in Verbindung mit hohen Veröffentlichungsraten deuten oft auf langsame Verbraucher oder Engpässe hin.
  • Warteschlangenlänge (messages_ready): Die Gesamtzahl der Nachrichten, die auf die Zustellung warten. Eine schnell wachsende Länge zeigt an, dass die Verbraucher mit der Produzentenlast nicht Schritt halten können.
  • Unbestätigte Nachrichten (messages_unacknowledged): Nachrichten, die zugestellt wurden, aber noch auf eine Bestätigung warten. Eine hohe Anzahl hier kann auf Verbraucherfehler, lange Verarbeitungszeiten oder blockierte Verbraucher hindeuten.
  • Verbraucheranzahl: Die Anzahl der aktiven Verbraucher, die an der Warteschlange angeschlossen sind. Eine Warteschlange mit hoher Last, aber null Verbrauchern, ist ein definitiver Fehlerpunkt.
  • Verwendung dauerhafter Warteschlangen und persistenter Nachrichten: Stellen Sie sicher, dass Warteschlangen und Nachrichten, die einen Broker-Neustart überleben müssen, für Dauerhaftigkeit konfiguriert sind. Dauerhaftigkeit ist eine Designeinstellung, während das Schreibverhalten auf der Festplatte auch von Publisher-Bestätigungen und der Speicherintegrität abhängt.

Verbindungs- und Kanalaktivität

Diese Metriken helfen, Lecks oder unsachgemäße Ressourcenbereinigung zu identifizieren:

  • Verbindungsanzahl: Gesamtzahl der offenen TCP-Verbindungen. Zu viele Verbindungen können das zugrunde liegende Betriebssystem oder die Erlang-VM überlasten.
  • Kanalanzahl: Aktive Kanäle innerhalb von Verbindungen. Kanäle sind billiger als Verbindungen, aber übermäßige Zahlen deuten dennoch auf eine Ressourcenbelastung hin.
  • Client-Verbindungsstatus: Achten Sie auf Verbindungen, die in transienten Zuständen stecken bleiben, oder auf hohe Raten von Verbindungswechseln.

System- und Erlang-VM-Ressourcen

RabbitMQ läuft auf der Erlang-VM, was seine interne Ressourcennutzung von Standard-OS-Prozessen unterscheidet:

  • Speichernutzung: Gesamtspeicher, der von der Erlang-VM verbraucht wird. RabbitMQ verwendet ein Wasserzeichensystem; wenn der Speicher die hohe Wasserzeichenmarke erreicht, drosselt es die Produzenten.
  • Erlang-Prozesse: Die Gesamtzahl der leichtgewichtigen Prozesse, die innerhalb der VM laufen. Eine außer Kontrolle geratene Prozessanzahl deutet auf ein mögliches Ressourcenleck oder eine Endlosschleife innerhalb eines Plugins hin.
  • Dateideskriptoren: Überwacht die Verfügbarkeit von Dateihandles, die für Verbindungen, Warteschlangen und persistenten Speicher entscheidend sind.
  • Festplattenfreigrenze: RabbitMQ löst einen Festplattenalarm aus und blockiert Publisher, wenn der freie Speicherplatz unter den konfigurierten Schwellenwert fällt. Der Standardwert war für kleine Testsysteme oft niedrig, daher sollten Produktionsknoten einen expliziten Wert festlegen und überwachen.

Überwachung mit dem RabbitMQ-Management-Plugin

Das RabbitMQ-Management-Plugin ist das primäre, integrierte Tool für Visualisierung und Echtzeit-Betriebsprüfungen. Es bietet sowohl eine Weboberfläche als auch eine leistungsstarke HTTP-API.

Aktivieren des Plugins

Das Plugin wird normalerweise zusammen mit RabbitMQ installiert, muss aber explizit aktiviert werden:

sudo rabbitmq-plugins enable rabbitmq_management

Nach der Aktivierung ist die Weboberfläche normalerweise auf Port 15672 zugänglich (z. B. http://localhost:15672).

Wichtige Ansichten in der Weboberfläche

  1. Übersichtsseite: Bietet allgemeine Statistiken, einschließlich Nachrichtenflussraten (globales Veröffentlichen/Zustellen), Speichernutzung und Verbindungsanzahlen. Dies ist Ihr anfängliches Gesundheits-Dashboard.
  2. Registerkarte "Warteschlangen": Bietet detaillierte Metriken für jede Warteschlange, einschließlich sofortiger und aggregierter Nachrichtenraten, Verbraucher-Auslastung und Warteschlangenlänge. Verwenden Sie die Sortierfunktion, um schnell die längsten oder am stärksten ausgelasteten Warteschlangen zu finden.
  3. Registerkarten "Verbindungen" und "Kanäle": Ermöglicht die Inspektion einzelner Client-Verbindungen und zeigt deren Status, Protokolldetails und Bandbreitennutzung an.

Verwenden der HTTP-API

Für automatisierte Prüfungen und die Integration in benutzerdefinierte Dashboards stellt das Management-Plugin eine umfangreiche HTTP-API zur Verfügung. Dies ist ideal für die Skripterstellung von Gesundheitschecks oder die Integration in proprietäre Überwachungssysteme.

Beispiel: Überprüfung der Cluster-Gesundheit

# Grundlegende Übersichtsstatistiken abrufen
curl -u benutzer:passwort http://localhost:15672/api/overview

# Metriken für eine bestimmte Warteschlange abrufen (z. B. 'task_queue')
curl -u benutzer:passwort http://localhost:15672/api/queues/%2F/task_queue

Tipp: Die HTTP-API gibt detaillierte JSON-Daten zurück, sodass Sie nach bestimmten numerischen Schwellenwerten wie Warteschlangenlänge oder Anzahl unbestätigter Nachrichten filtern und alarmieren können.


Erweiterte Überwachung mit Prometheus und Grafana

Für Produktionsumgebungen ist die Integration von RabbitMQ-Metriken in standardmäßige Zeitreihen-Überwachungssysteme wie Prometheus (für die Erfassung) und Grafana (für die Visualisierung) die beste Praxis. RabbitMQ bietet ein dediziertes Plugin dafür.

1. Aktivieren des Prometheus-Plugins

Dieses Plugin stellt Metriken in dem von Prometheus erwarteten Format bereit, normalerweise auf Port 15692 (oder 15672/metrics bei Verwendung des Management-Ports).

sudo rabbitmq-plugins enable rabbitmq_prometheus

2. Konfigurieren des Prometheus-Scrapings

Nach der Aktivierung müssen Sie Prometheus so konfigurieren, dass es den Endpunkt scraped. Fügen Sie Ihrer prometheus.yml-Konfiguration einen ähnlichen Job wie den folgenden hinzu:

scrape_configs:
  - job_name: 'rabbitmq'
    metrics_path: /metrics
    # Das rabbitmq_prometheus-Plugin stellt /metrics standardmäßig auf Port 15692 bereit.
    static_configs:
      - targets: ['rabbitmq-host:15692']

3. Visualisierung in Grafana

Grafana verwendet die von Prometheus gesammelten Daten, um leistungsstarke Dashboards zu erstellen. Zu den wichtigsten Panels sollten gehören:

  • Warteschlangenrückstand: Zeichnen Sie rabbitmq_queue_messages_ready und rabbitmq_queue_messages_unacked im Zeitverlauf auf.
  • Nachrichtenraten: Verfolgen Sie Veröffentlichungs-, Zustellungs- und Bestätigungsraten, um zu sehen, ob die Verbraucher mithalten.
  • Knotenressourcennutzung: Verfolgen Sie Speicher, Dateideskriptoren, Erlang-Prozessnutzung und Festplattenalarme.

Beispiel-Prometheus-Metrik für die Warteschlangenlänge:

Die vom Plugin bereitgestellte Standardmetrik für die Warteschlangenlänge ist:

rabbitmq_queue_messages_ready{queue="my_critical_queue", vhost="/"}

Überwachungs-Best-Practice: Alarmierung

Richten Sie Alarme in Prometheus Alertmanager oder Grafana basierend auf klaren Schwellenwerten ein:

Signal Beispiel-Alarm Empfohlene Aktion
Bereite Nachrichten Warteschlangenrückstand wächst seit 5 Minuten Überprüfen Sie Verbraucherfehler, fügen Sie Verbraucher hinzu, wenn die App sicher verarbeiten kann, oder verlangsamen Sie Produzenten.
Unbestätigte Nachrichten Unbestätigte Anzahl bleibt hoch, während die Bestätigungsrate niedrig ist Untersuchen Sie Verbraucherlatenz, Abstürze, Prefetch-Einstellungen und nachgelagerte Abhängigkeiten.
Festplattenalarm Ein Knoten meldet einen Festplatten-Freigabealarm Geben Sie Speicherplatz frei, erweitern Sie den Speicher oder verschieben Sie Daten, bevor Produzenten blockiert bleiben.
Speicheralarm Ein Knoten meldet einen Speicheralarm Finden Sie große Warteschlangen, hohe Verbindungs-/Kanalanzahlen oder speicherintensive Plugins und passen Sie die Kapazität an.

CLI-Diagnose mit rabbitmqctl

Das Befehlszeilentool rabbitmqctl ist für schnelle, direkte Inspektionen und Betriebsprüfungen unerlässlich, insbesondere wenn die Weboberfläche oder externe Überwachungssysteme nicht verfügbar sind.

Überprüfen des Knotenstatus

Dieser Befehl bietet eine schnelle Gesundheitsprüfung und zeigt die laufenden Anwendungen, die Speichernutzung, die Anzahl der Dateideskriptoren und Verbindungsdetails an.

rabbitmqctl status

Auflisten kritischer Warteschlangen

Sie können list_queues verwenden, um Engpässe schnell zu identifizieren, indem Sie sich auf wichtige Leistungsindikatoren (KPIs) konzentrieren:

# Warteschlangen mit Name, Gesamtnachrichten, bereiten Nachrichten und Verbraucheranzahl auflisten
rabbitmqctl list_queues name messages messages_ready consumers

# Für einen ausgelasteten Knoten die Ausgabe lokal sortieren.
rabbitmqctl list_queues name messages messages_ready consumers | sort -k2 -nr | head

Analysieren von Verbindungen und Kanälen

Um bestimmtes Client-Verhalten zu beheben, können Sie Verbindungen und Kanäle auflisten und nach Benutzer oder Netzwerkadresse filtern:

# Aktive Verbindungen mit Benutzer und Quell-IP auflisten
rabbitmqctl list_connections user peer_host

# Aktive Kanäle und deren Nachrichtenflussstatus auflisten
rabbitmqctl list_channels connection_details consumer_count messages_unacknowledged

In großen Clustern können umfassende Auflistungsbefehle zusätzliche Last auf einen bereits gestressten Knoten ausüben. Bevorzugen Sie während eines Vorfalls gezielte Prüfungen von Warteschlangen, Vhosts oder Verbindungen.

Best Practices zur Aufrechterhaltung der Leistung

  1. Überwachen Sie die Verbraucherkapazität: Beobachten Sie die Verbraucherkapazität in der Management-Oberfläche und in den exportierten Metriken. Ein niedriger Wert bedeutet oft, dass Warteschlangen schneller zustellen können, als Verbraucher Arbeit annehmen können, was auf langsame Verbraucher, niedrigen Prefetch oder nachgelagerte Latenz hindeutet.
  2. Verwalten Sie die Produzenten-Flusskontrolle: RabbitMQ verwendet Erlangs Speicher- und Festplattenalarme, um Gegendruck auszuüben. Überwachen Sie diese Alarme genau, da sie anzeigen, dass der Knoten seine Kapazitätsgrenzen erreicht und Produzenten gedrosselt werden.
  3. Log-Integration: Integrieren Sie RabbitMQ-Protokolle in ein zentralisiertes Protokollierungssystem (ELK-Stack, Splunk usw.). Achten Sie auf wiederkehrende Warnungen im Zusammenhang mit Netzwerkfehlern, fehlgeschlagenen Authentifizierungsversuchen oder langsamer Speichersynchronisation.
  4. Cluster-Gesundheitschecks: Wenn Sie einen Cluster betreiben, überwachen Sie die Knotenmitgliedschaft, Netzwerkpartitionen, die Gesundheit von Quorum-Warteschlangen und den Synchronisationsstatus. rabbitmqctl cluster_status ist eine nützliche erste Überprüfung, wenn Knoten sich über die Cluster-Mitgliedschaft uneinig sind.

Wichtigste Erkenntnis

Verwenden Sie die Management-Oberfläche für schnelle Inspektionen, Prometheus und Grafana für Trends und Alarme und rabbitmqctl für gezielte Diagnosen, wenn bereits etwas schief läuft. Richten Sie Alarme für wachsende Rückstände, feststeckende unbestätigte Nachrichten, Festplattenalarme, Speicheralarme und die Cluster-Gesundheit ein; diese Signale informieren Sie normalerweise über Probleme, bevor Anwendungen eine Zeitüberschreitung erleiden.