Selbst gehostete Überwachung für Spring Boot-Anwendungen

1. Einleitung

Eine der vielen großartigen Eigenschaften von Spring Boot sind die eingebauten Aktuatoren. Diese Aktuatoren bieten eine einfache Möglichkeit, nahezu jeden Aspekt einer Spring Boot-Anwendung zu überwachen und zu steuern.

In diesem Lernprogramm wird die Verwendung des Metrikaktors zum Erstellen einer selbst gehosteten Überwachungslösung für Spring Boot-Anwendungen beschrieben.

2. Metrikdatenbank

Der erste Teil der Überwachung von Spring Boot-Anwendungen besteht in der Auswahl einer Metrikdatenbank . Standardmäßig konfiguriert Spring Boot in jeder Anwendung eine Mikrometer-Metrikregistrierung.

Diese Standardimplementierung sammelt einen vordefinierten Satz von Anwendungsmetriken wie Speicher- und CPU-Auslastung, HTTP-Anforderungen und einige andere. Aber diese Metriken werden nur im Speicher gespeichert , was bedeutet , werden sie jederzeit verloren die Anwendung neu gestartet wird.

Um eine selbst gehostete Überwachungslösung zu erstellen, sollten Sie zunächst eine Metrikdatenbank auswählen, die sich außerhalb der Spring Boot-Anwendung befindet. In den folgenden Abschnitten werden nur einige der verfügbaren selbst gehosteten Optionen erläutert.

Beachten Sie, dass Spring Boot jedes Mal, wenn es eine andere Metrikdatenbank im Klassenpfad erkennt, die In-Memory-Registrierung automatisch deaktiviert.

2.1. InfluxDB

InfluxDB ist eine Open-Source-Zeitreihendatenbank. Der schnellste Weg, um mit InfluxDB zu beginnen, besteht darin, es lokal als Docker-Container auszuführen:

docker run -p 8086:8086 -v /tmp:/var/lib/influxdb influxdb

Beachten Sie, dass dadurch Metriken in der lokalen / tmp- Partition gespeichert werden . Dies ist in Ordnung für Entwicklung und Test, aber für Produktionsumgebungen keine gute Wahl.

Sobald InfluxDB ausgeführt wird, können wir unsere Spring Boot-Anwendung so konfigurieren, dass Metriken veröffentlicht werden, indem die entsprechende Mikrometerabhängigkeit hinzugefügt wird :

 io.micrometer micrometer-registry-influx 

Zusätzlich müssen wir der Datei application.properties einen neuen Eintrag hinzufügen :

management.metrics.export.influx.uri=//localhost:8086

Standardmäßig wird der Datenbankname auf mydb festgelegt , während der Benutzername und das Kennwort nicht festgelegt werden.

Wir können die Standardwerte jedoch mithilfe dedizierter Eigenschaften überschreiben:

management.metrics.export.influx.db=customDbName management.metrics.export.influx.user-name=myUserName management.metrics.export.influx.password=mySecret

InfluxDB bietet kein natives Visualisierungstool . Es bietet jedoch ein separates Tool namens Chronograph, das sich gut zur Visualisierung von InfluxDB-Daten eignet.

2.2. Prometheus

Prometheus ist ein Open-Source-Toolkit für Überwachung und Alarmierung, das ursprünglich bei SoundCloud entwickelt wurde. Es funktioniert etwas anders als InfluxDB.

Anstatt unsere Anwendung so zu konfigurieren, dass Metriken in Prometheus veröffentlicht werden, konfigurieren wir Prometheus so, dass unsere Anwendung regelmäßig abgefragt wird .

Zunächst konfigurieren wir unsere Spring Boot-Anwendung so, dass ein neuer Prometheus-Aktorendpunkt verfügbar gemacht wird. Wir tun dies, indem wir die Mikrometer-Register-Prometheus-Abhängigkeit einbeziehen:

 io.micrometer micrometer-registry-prometheus 

Dadurch wird ein neuer Aktorendpunkt erstellt, der Metrikdaten in einem speziellen Format erzeugt, das Prometheus versteht.

Als nächstes müssen wir Prometheus so konfigurieren, dass unsere Anwendung abgefragt wird, indem unsere gewünschte Konfiguration in eine prometheus.yml- Datei eingefügt wird.

Die folgende Konfiguration weist Prometheus an, unsere Anwendung alle 5 Sekunden mit dem neuen Aktuatorendpunkt abzufragen:

scrape_configs: - job_name: 'spring-actuator' metrics_path: '/actuator/prometheus' scrape_interval: 5s static_configs: - targets: ['127.0.0.1:8080']

Schließlich können wir mit Docker einen lokalen Prometheus-Server starten. Dies setzt voraus, dass sich unsere benutzerdefinierte Konfigurationsdatei in der lokalen Datei /etc/prometheus/prometheus.yml befindet :

docker run -d \ --name=prometheus \ -p 9090:9090 \ -v /etc/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \ prom/prometheus \ --config.file=/etc/prometheus/prometheus.yml

Prometheus bietet ein eigenes Visualisierungstool zum Anzeigen der gesammelten Metriken. Der Zugriff erfolgt unter der URL // localhost: 9090 /.

2.3. Graphit

Graphit ist eine weitere Open-Source-Zeitreihendatenbank. Die Architektur ist etwas komplizierter als die anderen Datenbanken, die wir uns angesehen haben. Mit Docker ist es jedoch einfach, eine Instanz lokal auszuführen:

docker run -d \ --name graphite \ --restart=always \ -p 80:80 \ -p 2003-2004:2003-2004 \ -p 2023-2024:2023-2024 \ -p 8125:8125/udp \ -p 8126:8126 \ graphiteapp/graphite-statsd

Anschließend können wir Spring Boot so konfigurieren, dass Metriken in unserer Instanz veröffentlicht werden, indem die Abhängigkeit Mikrometer-Registrierung-Graphit hinzugefügt wird:

 io.micrometer micrometer-registry-graphite 

Neben dem Hinzufügen der Konfigurationseigenschaften zu application.properties :

management.metrics.export.graphite.host=127.0.0.1 management.metrics.export.graphite.port=2004

Wie Prometheus enthält Graphite ein eigenes Visualisierungs-Dashboard. Es ist unter der URL // localhost / verfügbar .

3. Visualisierungstools

Sobald wir eine Lösung zum Speichern von Metriken außerhalb unserer Spring Boot-Anwendung haben, ist die nächste Entscheidung, wie wir die Daten visualisieren möchten .

Einige der zuvor genannten Metrikdatenbanken enthalten eigene Visualisierungstools. Es gibt ein eigenständiges Visualisierungstool, das einen Blick auf unsere selbst gehostete Überwachungslösung wert ist.

3.1. Grafana

Grafana is an open-source analytics and monitoring tool. It can connect to all of the previously mentioned databases, as well as many others.

Grafana generally provides better configuration and superior alerting than most built-in visualization tools. It can easily be extended using plugins, and there are lots of pre-built dashboards that can be imported to quickly create our own visualizations.

To run Grafana locally, we can start it using Docker:

docker run -d -p 3000:3000 grafana/grafana

We can now access the Grafana home page at the URL //localhost:3000/.

At this point, we would need to configure one or more data sources. This can be any of the metrics databases discussed previously or a variety of other supported tools.

Sobald eine Datenquelle konfiguriert ist, können wir ein neues Dashboard erstellen oder eines importieren, das das tut, was wir wollen.

4. Fazit

In diesem Artikel haben wir uns mit der Erstellung einer selbst gehosteten Überwachungslösung für Spring Boot-Anwendungen befasst.

Wir haben uns drei Metrikdatenbanken angesehen, die Spring Boot problemlos unterstützt, und gesehen, wie sie lokal ausgeführt werden.

Wir haben uns auch kurz Grafana angesehen, ein leistungsstarkes Visualisierungstool, mit dem Metrikdaten aus verschiedenen Quellen angezeigt werden können.