Prometheus-Monitoring für Java-Entwickler

Anders als traditionelle Monitoring-Tools wie Nagios verfolgt Prometheus einen White-Box-Ansatz: Es wird nicht nur geprüft, ob eine Applikation läuft, sondern Applikationen stellen aktiv Metriken über ihren internen Status bereit.

In Pocket speichern vorlesen Druckansicht 1 Kommentar lesen
Prometheus-Monitoring für Java-Entwickler
Lesezeit: 13 Min.
Von
  • Fabian Stäber
Inhaltsverzeichnis

Dieser Artikel wendet sich an Java-Entwickler, die bisher keine Erfahrung mit Prometheus haben. Der erste Teil des Artikels gibt eine allgemeine Einführung in Prometheus, der zweite Teil beschreibt, wie man Java-Programme instrumentiert, um Metriken für das Monitoring mit Prometheus bereitzustellen.

Einer der Erfolgsfaktoren von Prometheus, das konzeptionell auf Googles internem Borgmon-System beruht, ist der modulare Aufbau. Das zentrale Modul ist der Prometheus-Server, der eine Time-Series-Datenbank und die zugehörige Abfragesprache PromQL bereitstellt. Die Datenbank speichert Folgen von 64-Bit-Fließkommazahlen zusammen mit dem jeweiligen Zeitstempel, der anzeigt, wann der Wert in die Datenbank aufgenommen wurde. Mit PromQL lassen sich die Zeitreihen statistisch auswerten und miteinander in Relation bringen.

Weitere Funktionen, die man von einer vollständigen Monitoring-Software erwartet, steuern externe Tools bei. Die drei wichtigsten Komponenten sind:

  • Exporter: Tools, die Metriken über spezifische Komponenten wie Betriebssysteme oder Datenbanken bereitstellen. Die Prometheus-Dokumentation weist auf mehrere Exporter hin.
  • Grafana: eine webbasierte grafische Benutzeroberfläche mit Dashboard-Funktionen.
  • Alertmanager: kümmern sich unter anderem um das Routing von Alarmen zu Pager-Diensten und um das Unterdrücken sich wiederholender Alarme.

Der modulare Ansatz führt dazu, dass jedes Modul einen klaren Fokus und überschaubaren Umfang hat. Das Modell passt gut zur Open-Source-Philosophie von Prometheus: Rund um den Prometheus-Server hat sich ein umfangreiches Ökosystem aus vielen kleinen und größeren Projekten gebildet, die jeweils spezifische Aufgaben übernehmen.

Das folgende Set-up genügt, um die Beispiele zu PromQL im nachfolgenden Abschnitt praktisch am eigenen PC auszuprobieren. Ein etwas ausführlicheres Tutorial ist als 30-minütiges Video verfügbar.

Um sich mit Prometheus vertraut zu machen, benötigt man als erstes Metriken. Eine einfache Möglichkeit zur Bereitstellung bietet der node_exporter. Das ist ein Programm, das Betriebssystemmetriken wie Netzwerk, Festplatte oder CPU liefert. Der Download von der GitHub-Release-Seite umfasst den Exporter als ausführbare Datei, die sich in der Default-Konfiguration ohne weitere Parameter starten lässt. Nach dem Start stehen die Metriken unter http://localhost:9100/metrics bereit. Der Webbrowser zeigt unter dieser URL eine für Menschen lesbare Darstellung der Metriken.

In Schritt zwei sollen die Metriken in die Time-Series-Datenbank des Prometheus-Servers eingelesen werden. Dazu laden Entwickler zunächst den Prometheus-Server von der GitHub-Release-Seite herunter, entpacken den Download und bearbeiten die Beispielkonfigurationsdatei prometheus.yml. Um die Metriken aus dem node_exporter abzufragen, fügt man am Ende der Datei im Abschnitt scrape_configs folgende Job-Definition hinzu:

- job_name: 'node'
static_configs:
- targets: ['localhost:9100']

Der Prometheus-Server wird mit folgendem Befehl gestartet:

./prometheus -config.file ./prometheus.yml

Nach erfolgreichem Start stellt der Prometheus-Server ein Web-Interface zum Debugging unter http://localhost:9090 bereit. Unter Status | Targets sieht man, dass das Target auf Port 9100 "up" ist.