Binkski - stock.adobe.com
Wie man Prometheus für das Kubernetes-Monitoring einrichtet
Mit Prometheus können IT-Teams ihre Infrastruktur nativ in Kubernetes mit Open Source Tools automatisieren und konfigurieren. Folgen Sie diesem Tutorial hierfür.
Kubernetes hilft IT-Teams bei der Verwaltung verteilter Anwendungen in Containern und hat in den letzten Jahren einen kometenhaften Aufstieg hinter sich. Das bedeutet jedoch zeitgleich neue Herausforderung für die IT – wie zum Beispiel die Überwachung. Zur richtigen Überwachung der dynamischen Komponenten in einem containerisierten Ökosystem benötigen Administratoren Tools, die sie nativ in Kubernetes bereitstellen und skalieren können.
Sie erhalten in diesem Artikel eine Zusammenfassung der wichtigsten Grundlagen für Prometheus, unter anderem Client-Bibliotheken, die Komponenten des kube-prometheus-Projekts und andere Technologien, wie zum Beispiel Operatoren in Kubernetes. Im Anschluss finden sie ein Tutorial, wie Sie Prometheus für die Kubernetes-Überwachung in den hier vorgestellten Schritten mit dem Helm-Paketmanager und der kubectl-Kommandozeile (Command Line Interface, CLI) installieren und ausführen.
Übersicht über Prometheus
Prometheus ist eine Open-Source-Anwendung für die Überwachung und zum Verschicken von Alarmmeldungen bei Ereignissen. Ursprünglich von SoundCloud entwickelt, wurde Prometheus 2016 an die Cloud Native Computing Foundation (CNCF) übergeben und wird nun als eigenständiges, unabhängiges Projekt auf GitHub gehostet.
Es erfasst Echtzeitmetriken in einer Zeitreihendatenbank und bietet ein mehrdimensionales Datenmodell sowie eine flexible Abfragesprache. Prometheus verwendet die Pull-Methode zum Erfassen von Metriken über HTTP. Benutzer können für eine eingeschränkte Zahl von Anwendungsfällen auch eine Push-basierte Überwachung implementieren.
IT-Administratoren können Prometheus für die Kubernetes-Überwachung verwenden – allerdings müssen sie zunächst die erforderliche Instrumentierung zu ihrem Code hinzufügen.
Dazu verwenden Sie eine der Prometheus-Client-Bibliotheken, die verschiedene Arten von Metriken implementieren. Man wählt am besten diejenige Client-Bibliothek, die der primären Anwendungsentwicklungssprache entspricht. Das ermöglicht es Entwicklern, Metriken zu definieren und sie über HTTP-Endpunkte auf der Anwendungsinstanz bereitzustellen.
Zu den am häufigsten verwendeten Client-Bibliotheken zum Schreiben und Bereitstellen von Überwachungsmetriken gehören Go, Java, Scala, Python und Ruby.
Zu den inoffiziellen Client-Bibliotheken von Drittanbietern gehören außerdem Bash, C, C++, Elixir, PHP und Rust.
Prometheus lässt sich über offizielle und Drittanbieterprogramme auch in andere Anwendungen wie MySQL, Amazon CloudWatch und Kubernetes integrieren.
Der Prometheus-Operator und das kube-prometheus-Projekt
Ein Operator in Kubernetes ist ein domänen- und applikationsspezifischer Controller, der als Erweiterung der Kubernetes-API zur Verwaltung von Anwendungsinstanzen dient. Der Operator bietet eine Möglichkeit, Prometheus-Cluster auf Kubernetes aufzubauen, zu konfigurieren und zu verwalten.
Das kube-prometheus-Projekt dient der Cluster-Überwachung. Dafür sammelt es Metriken aus Kubernetes-Komponenten. Es verfügt auch über Funktionen für Dashboards und Regeln für Warnungen. Das Projekt ist Open Source und auf GitHub zu finden. Es kombiniert Kubernetes-Manifestdateien, vorkonfigurierte Grafana-Dashboards und Prometheus-Regeln, um eine Abstraktionsschicht und Kubernetes-Cluster-Überwachungsfunktionen über den Prometheus-Operator bereitzustellen.
Die folgenden Komponenten sind im kube-prometheus-Paket enthalten:
- Der Prometheus-Operator
- Prometheus-Server
- Alertmanager
- Prometheus node-exporter
- Prometheus Adapter for Kubernetes Metrics APIs
- kube-state-metrics
- Grafana-Dashboards
Installation und Konfiguration
Bevor Sie Prometheus installieren, lassen Sie einen Kubernetes Cluster laufen und installieren Sie den Helm-Paketmanager, über den Sie dann den Kubernetes-Operator beziehen.
Erstellen Sie anschließend einen separaten Namensraum für das Einrichten der Überwachung:
kubectl create namespace monitoring
Installieren Sie nun eine stabile Version des Prometheus-Operators im Überwachungsnamensraum. Die Version aus diesem Beispiel gehört zum im vorigen Abschnitt besprochenen kube-prometheus-Projekt:
helm install stable/prometheus-operator --namespace monitoring --generate-name
Warten Sie nach der Installation des Prometheus-Operators einige Minuten, bis die Container gestartet sind, und warten Sie dann, bis das System alle Pods aufgelistet hat, die in den überwachten Namensräumen laufen:
kubectl get pods -n monitoring
Abbildung 2 zeigt einige Pods, auf denen verschiedene Komponenten des Prometheus-Operators laufen, wie zum Beispiel das Prometheus-Dashboard, das Grafana-Dashboard und der Alertmanager.
Verwenden Sie als nächstes Port Forward, um das Prometheus-Dashboard über Port 9090 anzuzeigen, indem Sie http://localhost:9090 öffnen:
kubectl port-forward -n monitoring prometheus-prometheus-operator-158533-prometheus-0 9090
Nachdem Sie den Browser gestartet und localhost auf Port 9090 geöffnet haben, werden Sie zum Prometheus Expression Browser auf http://localhost:9090/graph weitergeleitet. Hier können Sie Ad-hoc-Abfragen schreiben und ausführen, mit Ausdrücken debuggen und die Ergebnisse entweder in einer tabellarischen Ansicht oder als Graf entlang der Zeitachse anzeigen lassen.
Um das Grafana-Dashboard anzusehen, richten Sie die Port-Weiterleitung auf Port 3000 ein und greifen Sie über den Browser unter http://localhost:3000 darauf zu:
kubectl port-forward prometheus-operator-1585337500-grafana-68c49d679f-92ft9 3000 -n monitoring
Wenn Sie aufgefordert werden, sich anzumelden, geben Sie den Benutzernamen admin mit dem Passwort prom-operator in die entsprechenden Eingabefelder ein.
Das Dashboard von Grafana enthält Grafen und Diagramme mit Metriken aus Zeitreihendatenbanken, die aus Prometheus stammen. Zum Beispiel überwacht das Dashboard in Abbildung 3 den Kubernetes API-Server hinsichtlich Anfragen, Speicher, CPU-Auslastung und laufende Routinen.
Zuletzt richten Sie Ihre Aufmerksamkeit auf den Alertmanager, der die vom Prometheus-Server gesendeten Warnungen verarbeitet. Diese Komponente gruppiert Warnungen, löscht Duplikate und sendet Meldungen über Kommunikationsprogramme wie Slack oder E-Mail, an die entsprechenden Teams oder Teammitglieder.
Um den Alertmanager hinzuzufügen, leiten Sie den Port 9093 des Alertmanager-Containers an den localhost weiter:
kubectl port-forward alertmanager-prometheus-operator-158533-alertmanager-0 9093 -n monitoring
Sie können ihn dann im Browser wie in Abbildung 4 unter http://localhost:9093 anwählen.