Einführung in Prometheus: Ein umfassendes Überwachungssystem
Prometheus ist ein quelloffenes Überwachungssystem, das auf Metriken basiert. Es sammelt Daten von verschiedenen Diensten und Hosts, indem es HTTP-Anfragen an spezielle Metrik-Endpunkte sendet. Diese gesammelten Daten werden anschließend in einer Zeitreihendatenbank gespeichert und stehen dann für detaillierte Analysen und die Einrichtung von Warnmeldungen zur Verfügung.
Warum ist Überwachung wichtig?
- Sie ermöglicht das Einrichten von Warnmeldungen, die bei Fehlfunktionen Alarm schlagen, idealerweise bevor diese auftreten. So kann rechtzeitig reagiert werden.
- Sie liefert wertvolle Einblicke, die bei der Analyse, dem Debugging und der anschließenden Problemlösung helfen.
- Sie ermöglicht die Beobachtung von Trends und Veränderungen über einen bestimmten Zeitraum. Beispielsweise lässt sich die Anzahl aktiver Sitzungen zu einem bestimmten Zeitpunkt verfolgen. Solche Daten sind entscheidend für Designentscheidungen und die Kapazitätsplanung.
Überwachung bezieht sich oft auf das Erfassen von Ereignissen. Ein Ereignis kann beispielsweise der Empfang einer HTTP-Anfrage, das Senden einer Antwort, das Lesen von Daten von der Festplatte oder eine Benutzeranmeldung sein. Die Überwachung eines Systems kann Profilerstellung, Protokollierung, Tracing, die Erfassung von Metriken, Alarmierung und die Visualisierung der Daten umfassen.
Blackbox- vs. Whitebox-Überwachung
Grundsätzlich unterscheidet man zwei Hauptansätze der Überwachung:
Blackbox-Überwachung
Bei der Blackbox-Überwachung wird das System von außen beobachtet. Die Überwachung erfolgt also auf Anwendungs- oder Hostebene. Dies kann jedoch einschränkend sein, da man keine Einblicke in die interne Funktionsweise erhält.
Whitebox-Überwachung
Im Gegensatz dazu erlaubt die Whitebox-Überwachung, die Interna eines Dienstes zu überwachen. Dadurch werden Daten über den Zustand und die Leistung der internen Komponenten sichtbar.
Die vier goldenen Signale
Laut Google
sollten Sie, wenn Sie nur vier Metriken für Ihr nutzerorientiertes System erfassen können, sich auf die folgenden vier konzentrieren, die als die „vier goldenen Signale“ bezeichnet werden:
#1. Latenz
Die Latenz ist die Zeit, die für die Bearbeitung einer Anfrage benötigt wird – unabhängig davon, ob sie erfolgreich war oder fehlgeschlagen ist. Es ist wichtig, sowohl erfolgreiche als auch fehlgeschlagene Anfragen zu erfassen.
#2. Verkehr
Der Verkehr misst, wie stark Ihr System belastet wird. Bei einem Webdienst sind dies normalerweise die HTTP-Anfragen pro Sekunde.
#3. Fehler
Die Fehlerrate zeigt, wie viele Anfragen fehlschlagen.
#4. Sättigung
Die Sättigung gibt an, wie ausgelastet Ihr Service ist. Eine steigende Latenz ist oft ein Frühindikator für eine Sättigung. Viele Systeme verlieren an Leistung, lange bevor sie eine 100-prozentige Auslastung erreichen.
Prometheus Metriktypen
Es gibt vier Haupttypen von Metriken in Prometheus:
#1. Zähler
Der Wert eines Zählers steigt stetig an. Er kann niemals sinken, aber auf Null zurückgesetzt werden. Ein fehlgeschlagener Scrape bedeutet lediglich einen fehlenden Datenpunkt. Die kumulierte Erhöhung wird beim nächsten Auslesen verfügbar sein. Beispiele hierfür sind die Gesamtzahl der empfangenen HTTP-Anfragen oder die Anzahl der aufgetretenen Ausnahmen.
#2. Messgerät
Ein Messgerät liefert eine Momentaufnahme zu einem bestimmten Zeitpunkt. Es kann sowohl zu- als auch abnehmen. Bei einem fehlgeschlagenen Datenabruf geht ein Sample verloren. Der nächste Abruf kann einen anderen Wert anzeigen. Beispiele hierfür sind Speicherplatz oder Speichernutzung.
#3. Histogramm
Ein Histogramm erfasst Beobachtungen und ordnet sie in konfigurierbare „Buckets“ ein. Es wird beispielsweise für die Messung der Anfragedauer oder Antwortgrößen verwendet. Anstatt jede einzelne Dauer zu speichern, speichert Prometheus die Häufigkeit von Anfragen, die in einen bestimmten Bucket fallen.
#4. Zusammenfassung
Ähnlich wie beim Histogramm werden hier Beobachtungen wie Dauer oder Antwortgrößen erfasst. Die Zusammenfassung liefert eine Gesamtzahl der Beobachtungen und die Summe aller beobachteten Werte, sodass der Durchschnitt berechnet werden kann. Wenn beispielsweise drei Anfragen 2, 3 und 4 Sekunden gedauert haben, beträgt die Summe 9 und die Anzahl 3, was eine durchschnittliche Latenz von 3 Sekunden ergibt.
Komponenten des Prometheus-Ökosystems
Der Prometheus-Server
Der Server ist das Herzstück und sammelt Metriken, speichert diese, stellt sie für Abfragen zur Verfügung und sendet Warnungen basierend auf den gesammelten Metriken.
Scraping
Prometheus arbeitet nach dem Pull-Prinzip. Um Metriken zu erhalten, sendet Prometheus eine HTTP-Anfrage, die als „Scrape“ bezeichnet wird. Basierend auf seiner Konfiguration führt es Scrapes an definierten Zielen aus.
Jedes Ziel (statisch definiert oder dynamisch entdeckt) wird in einem regelmäßigen Intervall (Scrape-Intervall) abgefragt. Bei jedem Scrape wird der HTTP-Endpunkt „/metrics“ aufgerufen, um den aktuellen Status der Client-Metriken zu erhalten. Die Werte werden dann in der Zeitreihendatenbank von Prometheus gespeichert.
Es gibt auch andere Zeitreihendatenbanken für Überwachungslösungen, die Sie in Betracht ziehen könnten.
Client-Bibliotheken
Um einen Dienst zu überwachen, müssen Sie Instrumentierung in Ihren Code einbauen. Für alle gängigen Sprachen und Laufzeitumgebungen stehen Client-Bibliotheken zur Verfügung. Durch die Verwendung dieser Bibliotheken kann Ihr Code nach dem Hinzufügen einiger Codezeilen mit der Ausgabe von Metriken beginnen. Dies wird als direkte Instrumentierung bezeichnet. Die Bibliotheken ermöglichen es, interne Metriken zu definieren und sie über einen HTTP-Endpunkt zur Verfügung zu stellen. Wenn Prometheus den Metrik-Endpunkt abruft, sendet die Client-Bibliothek die Metriken an den Server.
Offizielle Client-Bibliotheken werden von Prometheus für Go, Java, Python und Ruby angeboten. Prometheus hat ein offenes Ökosystem. Es gibt auch von der Community erstellte Client-Bibliotheken für C, PHP, Node.js, C#/.NET und viele andere.
Exporteure
Viele Anwendungen stellen Metriken nicht im Prometheus-Format bereit. Für diese Anwendungen, die Sie nicht besitzen oder für die Sie keinen Zugriff auf den Code haben, können Sie die Instrumentierung nicht direkt hinzufügen. Beispiele hierfür sind MySQL-, Kafka-, JMX-, HAProxy- und NGINX-Server. In solchen Fällen können Sie auf Exporteure zurückgreifen.
Ein Exporter ist ein Hilfsprogramm, das Sie zusammen mit der Anwendung bereitstellen, von der Sie Metriken erhalten möchten. Er agiert als Vermittler zwischen der Anwendung und Prometheus. Der Exporter empfängt Anfragen vom Prometheus-Server, sammelt Daten aus den Zugriffsprotokollen und Fehlerprotokollen der Anwendung, wandelt sie in das korrekte Format um und gibt sie dann an den Prometheus-Server zurück.
Einige der beliebtesten Exporteure sind:
- Windows – für Windows-Server-Metriken
- Node – für Linux-Server-Metriken
- Blackbox – für DNS- und Website-Leistungsmetriken
- JMX – für Java-basierte Anwendungsmetriken
Nachdem die Anwendungen instrumentiert wurden oder die Exporteure eingerichtet sind, müssen Sie Prometheus mitteilen, wo sich diese befinden. Dies kann über eine statische Konfiguration erfolgen. In dynamischen Umgebungen ist dies nicht praktikabel, daher wird die Dienstentdeckung eingesetzt.
Alarmierung
Die Alarmierung mit Prometheus besteht aus zwei Hauptteilen:
Alarmierungsregeln senden Warnmeldungen an den Alertmanager.
Der Alertmanager verwaltet diese Warnungen. Er kann Benachrichtigungen über verschiedene Integrationen wie E-Mail, Slack, Hipchat oder PagerDuty versenden. Der Alertmanager kann auch Warnmeldungen stummschalten oder aggregieren, um die Anzahl der Benachrichtigungen zu reduzieren.
Hier finden Sie eine Anleitung zur Überwachung eines Linux-Servers mit Prometheus und einem Dashboard.
Visualisierung mit Dashboards
Prometheus bietet APIs, die es ermöglichen, mit PromQL-Abfragen Rohdaten für die Visualisierung zu erzeugen.
Obwohl Prometheus einen eigenen Ausdrucksbrowser für Ad-hoc-Abfragen mitbringt, ist Grafana das beste Tool für diesen Zweck. Grafana lässt sich nahtlos in Prometheus integrieren und ermöglicht die Erstellung verschiedenster Dashboards.
Sie müssen Prometheus als Datenquelle in Grafana konfigurieren.
Dashboards können hinzugefügt werden durch:
- Importieren von von der Community erstellten Dashboards
- Erstellung eigener Dashboards
- Verwendung vordefinierter Dashboards
Ein Beispiel für ein vordefiniertes Node-Exporter-Dashboard:
Grafana verfügt auch über ein WorldPing-Modul, das die Überwachung von Site- und DNS-Leistungsmetriken weltweit ermöglicht.
Zusammenfassung
Prometheus hat geringe Anforderungen. Es kann recht einfach als einzelne Binärdatei mit einer Konfigurationsdatei ausgeführt werden. Es kann Tausende von Zielen verwalten und Millionen von Samples pro Sekunde aufnehmen. Prometheus wurde entwickelt, um den allgemeinen Zustand und das Verhalten von Systemen zu verfolgen.
Grafana ist das beste verfügbare Werkzeug zur Visualisierung von Metriken und lässt sich nahtlos in Prometheus integrieren.