Einrichtung von Prometheus, Grafana und Spring Boot
Geschrieben am von rd
Inhaltsverzeichnis
Navigation überspringen- Einrichtung von Prometheus und Grafana mit Docker-Compose
- Spring Boot Metrics in Prometheus und Grafana auslesen
- Spring Boot Logs in Grafana auslesen
In der heutigen digitalen Welt sind Server und Anwendungen das Herzstück jeder Organisation. Um sicherzustellen, dass alles reibungslos läuft, ist Server Monitoring unerlässlich. Es hilft uns, Probleme frühzeitig zu erkennen und zu verhindern, dass sie zu großen Ausfällen oder Performanceproblemen führen. Wenn wir wichtige Metriken wie CPU-Auslastung und Arbeitsspeicher im Auge behalten, können wir unsere Systeme optimieren und die Benutzererfahrung verbessern.
Hier kommen Prometheus und Grafana ins Spiel. Prometheus ist ein cooles Open-Source-Tool, das dafür sorgt, dass wir alle wichtigen Daten im Blick haben. Es sammelt und speichert Metriken in Echtzeit und macht das Monitoring von dynamischen Umgebungen super einfach. Grafana ergänzt das Ganze mit seiner genialen Visualisierung. Damit können wir Dashboards erstellen, die unsere Daten anschaulich präsentieren und uns helfen, Trends und Muster schnell zu erkennen.
Mit dieser Kombination aus Prometheus und Grafana haben wir die perfekte Lösung, um unsere Server im Griff zu behalten und datengestützte Entscheidungen zu treffen. So bleiben wir immer auf der Höhe und können Probleme proaktiv angehen!
Einrichtung von Prometheus und Grafana mit Docker-Compose
Der schnellste Weg, Prometheus und Grafana zum Laufen zu bringen, ist über Docker. So sparst du jede Menge Zeit bei der Konfiguration und Sicherheit, denn Docker bietet eine solide Basis. Die bereitgestellten Docker-Images sind schon gut vorkonfiguriert, was den Einstieg super einfach macht.
Falls du Docker-Compose noch nicht installiert hast, schau dir am besten diese Dokumentation an: https://docs.docker.com/compose/install/linux/.
Prometheus und Grafana Docker Container
Um loszulegen, erstellst du auf deinem Server, wo bereits Docker und Docker-Compose installiert sind, einfach eine neue `docker-compose.yml`-Datei:
version: '3.7'
services:
prometheus:
image: prom/prometheus
container_name: prometheus
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
ports:
- "9090:9090"
grafana:
image: grafana/grafana
container_name: grafana
ports:
- "3000:3000"
environment:
- GF_SECURITY_ADMIN_PASSWORD=admin
ACHTUNG: Das Passwort solltest du auf jeden Fall nicht auf "admin" lassen, wenn der Server von außen verfügbar ist. Ansonsten dringen gerne solche Viecher wie Script-Kids in euer System ein.
Prometheus Konfigurationsdatei
Im Verzeichnis, in dem sich deine docker-compose.yml
befindet, musst du noch eine Datei mit dem Namen prometheus.yml
erstellen. Füge dann folgenden Code hinzu:
global:
scrape_interval: 15s
scrape_configs:
- job_name: "prometheus"
static_configs:
- targets: ["localhost:9090"]
Hier haben wir nun einen Scrape-Job definiert, der auf den Service localhost:9090
zugreift, das ist der Prometheus-Server selbst. Durch diese Konfiguration werden in Prometheus verschiedene Expressions geladen, die du nutzen kannst, um Metrikdaten bezüglich des Prometheus-Servers einzulesen.
Auf Prometheus und Grafana zugreifen
Nachdem die Konfiguration steht, musst du die Docker-Container starten. Dazu nutzt du den Befehl:
docker-compose up -d
Falls keine weitere Firewall oder Ähnliches im Weg steht, sollten Prometheus und Grafana erreichbar sein.
Um auf Prometheus zuzugreifen, nimmst du folgenden Link:<server-ip>:9090
Da wir in der Konfigurationsdatei einen Scraper definiert haben, der die Metriken aus dem Prometheus-Container ausliest, kannst du als Beispiel mit folgendem Link die Anzahl an HTTP-Requests anzeigen lassen:<server-ip>:9090/graph?g0.expr=prometheus_http_requests_total&g0.tab=0&g0.display_mode=lines&g0.show_exemplars=0&g0.range_input=1h
Um auf Grafana zuzugreifen, nimmst du folgenden Link:<server-ip>:3000
Hier loggst du dich mit dem Passwort ein, das du in der docker-compose.yml
-Datei definiert hast.
Wie du siehst, ist Grafana noch ziemlich leer. Bevor du dein eigenes Dashboard definierst, musst du Prometheus einbinden. Dazu nutzt du folgenden Link:<server-ip>:3000/connections/datasources/new
Da wählst du einfach nur Prometheus aus und verwendest als URL:<server-ip>:9090
Speichere das dann ab.
Prometheus Metrics in Grafana darstellen
In Grafana werden Metrikdaten in Dashboards definiert und je nach Konfiguration visuell angezeigt. Um ein Dashboard zu erstellen, öffne folgenden Link:<server-ip>:3000/dashboards
Hier erstellst du ein neues Dashboard, indem du oben rechts auf "New" klickst. Danach wählst du "Add visualization" und als Data Source nimmst du, wie vorher definiert, Prometheus aus.
Im ersten Schritt kannst du das Panel ganz einfach konfigurieren. Ein Panel enthält eine oder mehrere Metrikdaten, die du von der Data Source ziehst. Hier konfigurierst du alle relevanten Einstellungen zur Darstellung, z. B. Titel, Hintergrund, Graph-Styles usw.
Im zweiten Schritt bestimmst du, wie die Metrik dargestellt werden soll. Du wählst zuerst eine Metrik aus und kannst dann die Daten filtern, z. B. nach bestimmten Codes, die in der Metrik verfügbar sind. Außerdem kannst du verschiedene Operationen ausführen, wie z. B. den Durchschnitt bestimmter Werte berechnen und vieles mehr.
Mehr dazu findest du in der offiziellen Einführung von Grafana:
https://grafana.com/docs/grafana/latest/panels-visualizations/query-transform-data/#add-a-query
... und somit hätten wir es geschafft! Jetzt solltest du Prometheus und Grafana aufgesetzt haben und kannst damit experimentieren. Prometheus und Grafana bilden zusammen ein starkes Duo, wenn es um Monitoring und Visualisierung geht. Beide Tools sind flexibel und bieten dir viele Möglichkeiten, deine Systeme und Anwendungen im Blick zu behalten.
Prometheus ist dein Go-to-Tool, wenn es darum geht, Metrikdaten in Echtzeit zu sammeln und zu speichern. Es holt sich die Daten von deinen Servern und Anwendungen, speichert sie ab und bietet dir eine starke Abfragesprache, um diese Daten zu analysieren. Besonders bei der Überwachung von Microservices und dynamischen Umgebungen zeigt Prometheus seine Stärke.
Grafana ergänzt Prometheus perfekt, wenn es um die Visualisierung der Metrikdaten geht. Du kannst interaktive Dashboards erstellen, die dir auf einen Blick zeigen, wie sich deine Systeme verhalten. Mit Grafana machst du die Daten von Prometheus nicht nur sichtbar, sondern passt sie auch ganz nach deinen Wünschen an.
Zusammen bieten dir Prometheus und Grafana ein mächtiges Monitoring-System, mit dem du sowohl die Leistung deiner Infrastruktur als auch die Stabilität deiner Anwendungen stets im Blick hast.
Spring Boot Metrics in Prometheus und Grafana auslesen
Jetzt gehen wir anwendungsbezogen an das Monitoring ran.
Stell dir vor, du hast eine Spring Boot-Applikation, in der viel Datenverkehr herrscht und jede Menge Logs in verschiedenen Bereichen gespeichert werden. In diesem Abschnitt zeige ich dir, wie du das Ganze einrichtest – mit einer Prometheus-Dependency, Promtail zum Einsenden der Logs in Richtung Loki. Loki fungiert dabei als Schnittstelle, die Grafana nutzt, um die Log-Dateien visuell darzustellen.
Spring Boot Prometheus Dependency Installation
Wir nutzen Maven als Build-Tool, aber mit Gradle funktioniert es genauso – die Herangehensweise bleibt die gleiche.
Maven:
In deiner pom.xml
-Datei musst du folgende Dependency hinzufügen:
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
Gradle:
Für Gradle musst du deine build.gradle
anpassen. Füge diesen Code hinzu:
implementation 'io.micrometer:micrometer-registry-prometheus'
Dann buildest du nochmal dein Projekt neu, um die Änderungen zu übernehmen.
Spring Boot Prometheus Konfiguration
Damit du die Metrics auch auslesen kannst, musst du unbedingt folgendes in deiner application.properties
oder application.yml
hinzufügen:
management.endpoints.web.exposure.include=prometheus
management.endpoint.prometheus.enabled=true
Das sorgt dafür, dass die Prometheus-Metriken über den passenden Endpoint verfügbar sind.
Achtung: Wenn Spring Boot Security aktiviert ist, musst du den Endpoint entsprechend erlauben, damit du auf die Metriken zugreifen kannst.
Spring Boot Metrics in Prometheus konfigurieren
Nun musst du den Scraper noch in der Prometheus-Konfiguration konfigurieren:
Dazu fügst du in der prometheus.yml
folgenden Inhalt hinzu:
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'spring-boot'
static_configs:
- metrics_path: "/actuator/prometheus"
- targets: ['<springboot-server-ip>:8080']
Nachdem du die Änderungen vorgenommen hast, starte den Container neu.
Hat alles geklappt? Dann solltest du in Prometheus oder Grafana neue Expressions finden, wie z. B. jvm_info
.
Spring Boot Metrics Grafana Beispiel Dashboard
Im folgenden Link findest du die ID oder das JSON, das du ganz einfach in Grafana importieren kannst:
https://grafana.com/grafana/dashboards/19004-spring-boot-statistics/
Spring Boot Logs in Grafana auslesen
Das Auslesen von Spring Boot Logs in Grafana ist besonders sinnvoll, da es dir ermöglicht, die Performance und das Verhalten deiner Anwendung in Echtzeit zu überwachen. Durch die zentrale Visualisierung der Logs kannst du Probleme schneller identifizieren und analysieren, wodurch du effizientere Debugging- und Optimierungsprozesse einleiten kannst. Grafana bietet dir die Möglichkeit, Logs interaktiv zu durchsuchen und verschiedene Metriken zu korrelieren, was die Fehlerdiagnose erheblich vereinfacht. So behältst du nicht nur den Überblick über die Logs, sondern kannst auch fundierte Entscheidungen zur Verbesserung deiner Anwendung treffen.
In diesem Vorgang musst du ebenfalls Docker installiert haben, um den Docker-Image Promtail auf dem Server zu installieren, auf dem auch Spring Boot läuft. Promtail dient dazu, die Logs Richtung Loki zu schicken. Loki kann ebenfalls als Docker-Image installiert werden und wird von Grafana ausgelesen, denn Grafana bietet bereits eine Loki-Datenquelle, um die Logs visuell darzustellen. Das hat nichts mehr mit Prometheus zu tun.
Docker-Compose auf Spring Boot Server mit Promtail Installation
Dazu erstellst du auf dem Spring Boot Server eine docker-compose.yaml
mit folgendem Inhalt:
version: '3.8'
services:
promtail:
image: grafana/promtail:latest
container_name: promtail
volumes:
- ../tomcat/logs:/var/log
- ./promtail-config.yml:/etc/promtail/promtail-config.yml
command: -config.file=/etc/promtail/promtail-config.yml
restart: always
Achtung: Der Pfad ../tomcat/logs
dient hier nur als Beispiel. Es ist wichtig, dass du den Pfad zu deinen Logs anpasst, da er bei dir anders sein könnte.
Promtail Konfiguration
Hierzu erstellst du eine neue Datei namens promtail-config.yml
und nimmst diese Vorlage als Inhalt:
server:
http_listen_port: 9080
grpc_listen_port: 0
positions:
filename: /tmp/positions.yaml
clients:
- url:<grafana-server-ip>/loki/api/v1/push
scrape_configs:
- job_name: "tomcat-logs"
static_configs:
- targets:
- localhost
labels:
job: "tomcat"
__path__: /var/log/*.log
Stelle sicher, dass du den url
-Eintrag zum Grafana-Server anpasst.
Dann kannst du den Container auch starten.
Loki Installation und Konfiguration
Loki kannst du dort installieren, wo auch Grafana installiert ist. Dazu erweiterst du die docker-compose.yml
auf deinem Server:
version: '3.7'
services:
prometheus:
image: prom/prometheus
container_name: prometheus
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
ports:
- "9090:9090"
grafana:
image: grafana/grafana
container_name: grafana
ports:
- "3000:3000"
environment:
- GF_SECURITY_ADMIN_PASSWORD=admin
# loki hinzufügen
loki:
image: grafana/loki:2.9.10
container_name: loki
command: -config.file=/etc/loki/local-config.yaml
restart: always
ports:
- "3100:3100"
Dann kannst du den Loki Container auch starten.
Loki in Grafana einbinden
Dazu gehst du wieder unter:
<server-ip>:3000/connections/datasources/new
und wählst als Data-Source diesmal Loki aus. Als URL nimmst du:
<server-ip>:3100
Dann kannst du ein neues Dashboard erstellen und nutzt dann Loki als Data Source.
Spring Boot INFO Logs Grafana Beispiel Dashboard
Als Beispiel kannst du dieses Dashboard einfach als JSON importieren. Es sollte, wie im Bild sichtbar, die INFO Logs anzeigen. Natürlich könnte man da die Filter rausnehmen und das Ganze individuell filtern:
{
"annotations": {
"list": [
{
"builtIn": 1,
"datasource": {
"type": "grafana",
"uid": "-- Grafana --"
},
"enable": true,
"hide": true,
"iconColor": "rgba(0, 211, 255, 1)",
"name": "Annotations & Alerts",
"type": "dashboard"
}
]
},
"editable": true,
"fiscalYearStartMonth": 0,
"graphTooltip": 0,
"id": 8,
"links": [],
"panels": [
{
"datasource": {
"default": false,
"type": "loki",
"uid": "fdzus37vrepkwb"
},
"description": "",
"gridPos": {
"h": 7,
"w": 12,
"x": 0,
"y": 0
},
"id": 98,
"options": {
"dedupStrategy": "none",
"enableLogDetails": true,
"prettifyLogMessage": true,
"showCommonLabels": false,
"showLabels": false,
"showTime": false,
"sortOrder": "Descending",
"wrapLogMessage": false
},
"pluginVersion": "11.2.0",
"targets": [
{
"datasource": {
"type": "loki",
"uid": "fdzus37vrepkwb"
},
"editorMode": "builder",
"expr": "{filename=\"/var/log/spring.log\"} |= `INFO`",
"hide": false,
"queryType": "range",
"refId": "A"
}
],
"title": "INFOS",
"type": "logs"
}
],
"schemaVersion": 39,
"tags": [],
"templating": {
"list": []
},
"time": {
"from": "now-6h",
"to": "now"
},
"timepicker": {},
"timezone": "browser",
"title": "Info Logs Springboot Test Dashboard",
"uid": "fe0ggsmsm2igwd",
"version": 3,
"weekStart": ""
}
Und da haben wir es! Die Konfiguration ist endlich abgeschlossen. Jetzt kannst du die Logs und Metrikdaten deiner Spring Boot-Anwendung in Grafana genießen und ganz einfach visualisieren. Die Möglichkeit, alles an einem Ort zu sehen, macht es viel einfacher, die Leistung deiner Anwendung zu überwachen und schnell auf potenzielle Probleme zu reagieren.
Mit Grafana hast du ein mächtiges Werkzeug, um die gesammelten Daten effektiv darzustellen. Du kannst interaktive Dashboards erstellen, die dir auf einen Blick zeigen, wie es um deine Anwendung steht. Egal, ob du Performance-Überwachung oder Fehleranalyse machst, das Zusammenspiel von Prometheus, Grafana und Spring Boot gibt dir die Kontrolle und Einblicke, die du benötigst.
Viel Spaß beim Experimentieren mit den Metriken und Logs!