4.2. Grundlagen¶
4.2.1. Monitoring und Metriken¶
In einer Welt von verteilten Systemen und Cloud-Computing ist es wichtig, die Leistung und den Zustand von Anwendungen und Infrastruktur zu überwachen. Die Komplexität von verteilten Systemen macht es schwierig, Probleme zu erkennen und zu beheben. Probleme können an verschiedenen Stellen auftreten, z.B. in der Anwendung, im Netzwerk oder in der Infrastruktur. Deshalb ist es wichtig, Metriken zu sammeln und zu analysieren, und diese an einem zentralen Ort zu visualisieren und zugänglich zu machen.
Was sind Metriken?¶
Metriken sind numerische Werte, die den Zustand und die Leistung von Anwendungen und Infrastruktur beschreiben. Sie können z.B. die Anzahl der Anfragen an einen Webserver, die CPU-Auslastung eines Servers oder die Latenzzeit einer Anwendung sein.
Was sind Zeitseriendatenbanken?¶
Zeitseriendatenbanken sind spezielle Datenbanken, die für die Speicherung von Zeitreihendaten optimiert sind. Zeitreihendaten sind Datenpunkte, die mit einem Zeitstempel versehen sind, z.B. der sekündliche Wert eines Sensors oder die Anzahl der Anfragen an einen Webserver. Zeitreihendatenbanken sind darauf ausgelegt, große Mengen von Zeitreihendaten effizient zu speichern und abzufragen.
4.2.2. Prometheus¶
Prometheus ist ein Open-Source-Systemüberwachungs- und Alarmierungstoolkit, ursprünglich seit 2012 entwickelt bei SoundCloud. Seit 2016 ist es ein eigenständiges Open-Source-Projekt und unabhängig von SoundCloud unter einer Apache 2 Lizenz verfügbar. Durch das Inkubationsprogramm der Cloud Native Computing Foundation (CNCF) im Jahr 2018 wurde es zu einem der Top-Level-Projekte der Stiftung.
Funktionsweise¶
Prometheus sammelt Metriken von Anwendungen und speichert diese in einer Zeitreihendatenbank. Dabei ist das Datenmodell in Labels und Metriken unterteilt. Labels sind Schlüssel-Wert-Paare, die Metriken beschreiben, z.B. der Name des Prozesses, der die Metrik erzeugt hat (Auch Dimensions genannt). Metriken bestehen aus einem Timestamp und einem Sample, das den Wert der Metrik zu diesem Zeitpunkt darstellt.
Im Gegensatz zu traditionellen Monitoring-Systemen, die Metriken in regelmäßigen Abständen abfragen, verwendet Prometheus ein Pull-Modell. „Pull-based“ bedeutet, dass der Prometheus-Server Metriken von Zielen (Infrastruktur und Anwendungen) abruft, anstatt dass die Infrastruktur und Anwendungen Metrikendaten an Prometheus senden. Das Pullen der Daten über HTTP bietet einige Vorteile, darunter die Möglichkeit, zusätzliche Überwachungsinstanzen bei Bedarf zu starten, die zuverlässigere Feststellung, ob ein Ziel nicht erreichbar ist und die manuelle Überprüfung der Gesundheit eines Ziels mit einem Webbrowser. Ein weiterer Vorteil ist, dass ein pull-basiertes System weniger wahrscheinlich von fehlerhaft konfigurierten Agenten überlastet wird, die zu viele Daten pushen. Ein Pull-basiertes System erfordert außerdem, dass man den „guten Zustand“ der Umgebung kennt.
Die gesammelten Metriken können über die Query-Language PromQL
abgefragt und verarbeitet werden.
Exporter¶
Prometheus kann Metriken von verschiedenen Quellen sammeln, darunter Anwendungen, Datenbanken und Infrastruktur. Um Metriken von einer Anwendung oder Infrastruktur zu sammeln, muss ein Exporter installiert werden. Ein Exporter ist ein kleines Programm, das Metriken von einer Anwendung oder Infrastruktur sammelt und sie in einem Format bereitstellt, das von Prometheus verstanden wird.
Beispiele für Exporter sind: - Node Exporter: sammelt Metriken von Linux-Systemen - cAdvisor: sammelt Metriken von Docker-Containern - MySQL Exporter: sammelt Metriken von MySQL-Datenbanken - PostgreSQL Exporter: sammelt Metriken von PostgreSQL-Datenbanken - JMX Exporter: sammelt Metriken von Java-Anwendungen
PromQL¶
PromQL ist eine Abfragesprache, die speziell für Prometheus entwickelt wurde. Sie ermöglicht es, Metriken zu aggregieren, zu filtern und zu verarbeiten.
Beispiel, um mit PromQL die Anzahl der HTTP-Anfragen an einen API-Server in den letzten 5 Minuten zu ermitteln:
rate(http_requests_total{job="api-server"}[5m])
4.2.3. Grafana¶
Grafana ist ein Open-Source-Visualisierungstool, das es ermöglicht, Metriken und Protokolle in Dashboards anzuzeigen. Es unterstützt verschiedene Datenquellen, darunter Prometheus, InfluxDB, Elasticsearch und viele andere. Es wird unter einer AGPL v3 Lizenz veröffentlicht und ist auf GitHub verfügbar.
Die Hauptfeatures von Grafana sind: - Visualisierung: Erstellen von Dashboards, um Metriken und Protokolle anzuzeigen - Abfragen: Abfragen von Metriken und Protokollen aus verschiedenen Datenquellen - Benachrichtigungen: Konfigurieren von Benachrichtigungen, um über Probleme informiert zu werden
Funktionsweise¶
Über die Query-Languages der unterschiedlichen Datenquellen können Metriken und Protokolle abgefragt und in Dashboards visualisiert werden. Grafana bietet eine Vielzahl von Visualisierungen, darunter Graphen, Tabellen, Balken- und Tortendiagramme. Metriken und Protokolle aus verschiedenen Datenquellen könenen diesen Visualisierungselementen zugrunde gelegt werden, um die Leistung und den Zustand von Anwendungen und Infrastruktur zu überwachen. Die Dashboards können angepasst und geteilt werden, um die Zusammenarbeit zu erleichtern.
Während Grafana mit Loki eine eigene Protokollspeicherung bietet, ist es auch möglich, Prometheus als Datenquelle zu verwenden, um Metriken anzuzeigen. Da diese Lösung weit verbreitet ist und Prometheus im Vergleich zu Loki mit Pull-Prinzip statt Push-Prinzip arbeitet, wird sie in diesem Tutorial verwendet.