Überwachung von Java-Anwendungen: Von den Grundlagen bis zu Produktionslösungen
Die Überwachung von Java-Anwendungen ist eine kritisch wichtige Praxis zur Gewährleistung von Stabilität, Leistung und Ausfallsicherheit moderner Serversysteme. Ohne eine qualitativ hochwertige Überwachung ist es unmöglich, Speicherlecks, Probleme mit Threads, Leistungseinbußen oder Fehler in der Geschäftslogik rechtzeitig zu erkennen. In diesem Artikel betrachten wir die wichtigsten Tools und Bibliotheken für die Java-Überwachung, von den integrierten JVM-Mitteln bis hin zu modernen Lösungen auf Basis von Micrometer, Prometheus und Grafana.
Warum ist die Überwachung von Java-Anwendungen notwendig?
Java-Anwendungen, insbesondere solche, die 24/7 laufen, erfordern aus mehreren Gründen eine ständige Beobachtung:
- Leistung: Verfolgung von Antwortzeiten, Durchsatz, CPU- und Speicherauslastung.
- Zuverlässigkeit: Erkennung von Fehlern, Ausnahmen, Verbindungsabbrüchen zu Datenbanken und externen Diensten.
- Skalierung: Verständnis, wann Ressourcen hinzugefügt oder Code optimiert werden muss.
- Sicherheit: Erkennung anomaler Aktivitäten und potenzieller Schwachstellen.
Integrierte Mittel: JMX und JConsole
Java Management Extensions (JMX) ist der Standardmechanismus zur Überwachung und Verwaltung der JVM. Damit können Informationen über Speicher, Threads, Klassenladung, Garbage Collection und den Zustand von MBean-Komponenten abgerufen werden. Verwenden Sie JConsole oder VisualVM, um eine Verbindung zu einer entfernten Anwendung herzustellen.
Beispiel für die Aktivierung von JMX beim Start der Anwendung:
java -Dcom.sun.management.jmxremote \ -Dcom.sun.management.jmxremote.port=9010 \ -Dcom.sun.management.jmxremote.local.only=false \ -Dcom.sun.management.jmxremote.authenticate=false \ -Dcom.sun.management.jmxremote.ssl=false \ -jar myapp.jarNachteil: JMX liefert Rohdaten, kann aber keine Metriken aggregieren und Diagramme erstellen. Für eine vollständige Überwachung ist eine Integration mit externen Systemen erforderlich.
Micrometer: Fassade für Metriken
Micrometer ist eine Fassadenbibliothek, die eine einheitliche API zum Sammeln von Metriken in Java-Anwendungen bereitstellt. Sie unterstützt die gängigsten Überwachungssysteme: Prometheus, Datadog, New Relic, Graphite, InfluxDB und andere. Micrometer lässt sich in Spring Boot, Micronaut, Quarkus und andere Frameworks integrieren.
Beispiel für das Hinzufügen von Micrometer zu einem Maven-Projekt:
<dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> <version>1.12.5</version></dependency>Beispiel für die Erstellung und Registrierung einer benutzerdefinierten Metrik:
import io.micrometer.core.instrument.MeterRegistry;import io.micrometer.core.instrument.Counter;import org.springframework.stereotype.Component;
@Componentpublic class OrderMetrics { private final Counter orderCreatedCounter;
public OrderMetrics(MeterRegistry registry) { this.orderCreatedCounter = Counter.builder("orders.created") .description("Anzahl der erstellten Bestellungen") .tag("region", "ru-central1") .register(registry); }
public void recordOrderCreated() { orderCreatedCounter.increment(); }}Micrometer unterstützt mehrere Metriktypen:
- Counter — Zähler, der nur erhöht wird.
- Gauge — aktueller Wert (z. B. Warteschlangengröße).
- Timer — Ausführungszeit von Operationen.
- DistributionSummary — Verteilung von Werten.
Prometheus: Sammlung und Speicherung von Metriken
Prometheus ist ein Open-Source-System zum Sammeln und Speichern von Metriken. Es arbeitet
Auch in der Bibliothek
Geolokalisierung und Karten in Go (Golang): Bibliotheken und Codebeispiele
Aufgabenwarteschlangen in Go: Überblick über die Bibliotheken async, gocelery und machinery
Arbeiten mit Daten in Kotlin: Bibliotheken und Werkzeuge für die Entwicklung
cast für Go: Vollständige Anleitung mit Beispielen