Spring Boot APM in 10 Minuten: So integrieren Sie Micrometer für Performance-Metriken und Traces mit Lescopr

CODING WORKSPACE - HOMEOFFICE
Erfahren Sie, wie Sie Spring Boot APM mit Micrometer und Lescopr in nur 10 Minuten einrichten – inklusive Performance-Metriken, Traces und praktischen Lösungen für häufige Probleme.

Performance-Probleme in Spring Boot-Anwendungen bleiben oft unbemerkt, bis sie die Nutzererfahrung beeinträchtigen. Mit Micrometer lassen sich Metriken und Traces sammeln, doch ohne eine APM-Lösung wie Lescopr fehlt der Kontext, um diese Daten sinnvoll zu nutzen. In diesem FAQ-Guide beantworten wir die häufigsten Fragen und Einwände zur Einrichtung von APM in Spring Boot – von der Grundkonfiguration bis hin zu fortgeschrittenen Optimierungen.

Warum brauche ich APM für Spring Boot, wenn ich bereits Micrometer nutze?

Micrometer ist ein mächtiges Werkzeug, um Metriken aus Spring Boot-Anwendungen zu exportieren. Es unterstützt verschiedene Backends wie Prometheus, Graphite oder InfluxDB. Doch Micrometer allein bietet keine automatische Instrumentierung für alle Komponenten Ihrer Anwendung, keine zentralisierte Visualisierung der Daten und keine korrelierten Traces über Microservices hinweg.

APM-Lösungen wie Lescopr ergänzen Micrometer, indem sie:

  • Automatisch alle relevanten Metriken (z. B. HTTP-Requests, Datenbankabfragen, Cache-Treffer) erfassen
  • Traces für verteilte Systeme generieren, um Latenzquellen zu identifizieren
  • Dashboards bereitstellen, die Metriken und Traces in einem Kontext darstellen
  • Alerts auslösen, sobald Schwellenwerte überschritten werden

Ohne APM verbringen Entwickler oft Stunden damit, Logs zu durchforsten oder manuell Metriken zu analysieren – Zeit, die mit einer integrierten Lösung wie Lescopr eingespart werden kann.

Wie richte ich Micrometer für Spring Boot APM ein?

Die Grundeinrichtung von Micrometer in Spring Boot ist einfach, erfordert aber einige Schritte, um sicherzustellen, dass alle relevanten Metriken erfasst werden. Hier ist der Prozess im Detail:

1. Abhängigkeiten hinzufügen

Fügen Sie die notwendigen Abhängigkeiten in Ihre pom.xml oder build.gradle ein. Für Lescopr benötigen Sie zusätzlich den Lescopr-Exporter:

<!-- Maven -->
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-core</artifactId>
</dependency>
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-lescopr</artifactId>
</dependency>

2. Micrometer aktivieren

Spring Boot aktiviert Micrometer automatisch, wenn die Abhängigkeiten vorhanden sind. Sie können die Standardkonfiguration in der application.properties oder application.yml anpassen:

# application.properties
management.endpoints.web.exposure.include=health,metrics,prometheus
management.metrics.export.lescopr.enabled=true
management.metrics.export.lescopr.api-key=IHR_LESCOPR_API_KEY
management.metrics.export.lescopr.uri=https://api.lescopr.com

3. Automatische Instrumentierung nutzen

Micrometer bietet automatische Instrumentierung für:

  • HTTP-Requests (z. B. Response-Zeiten, Statuscodes)
  • Datenbankabfragen (z. B. JDBC, JPA, Hibernate)
  • Cache-Operationen (z. B. Caffeine, Ehcache)
  • Message Broker (z. B. Kafka, RabbitMQ)

Aktivieren Sie die automatische Instrumentierung durch die entsprechenden Abhängigkeiten:

<!-- Für HTTP-Requests -->
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-tracing-bridge-brave</artifactId>
</dependency>

<!-- Für Datenbanken -->
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-jdbc</artifactId>
</dependency>

4. Benutzerdefinierte Metriken hinzufügen

Für anwendungsspezifische Metriken können Sie Counter, Gauges oder Timers verwenden:

import io.micrometer.core.instrument.Counter;
import io.micrometer.core.instrument.MeterRegistry;

@RestController
public class MyController {
    private final Counter myCounter;

    public MyController(MeterRegistry registry) {
        this.myCounter = Counter.builder("my.custom.metric")
                .description("Anzahl der Aufrufe meiner Endpunkte")
                .register(registry);
    }

    @GetMapping("/my-endpoint")
    public String myEndpoint() {
        myCounter.increment();
        return "OK";
    }
}

Welche häufigen Probleme treten bei der Einrichtung auf – und wie löse ich sie?

Auch wenn die Einrichtung von Micrometer und Lescopr relativ einfach ist, gibt es einige häufige Fallstricke, die Entwickler beachten sollten:

  • Fehlende Metriken in Lescopr: Überprüfen Sie, ob der Lescopr-Exporter korrekt konfiguriert ist und der API-Key gültig ist. Nutzen Sie die Debug-Logs von Micrometer, um zu sehen, welche Metriken exportiert werden:

    logging.level.io.micrometer=DEBUG
    
  • Hohe Kardinalität von Metriken: Zu viele einzigartige Metriken (z. B. durch dynamische Tags) können die Performance beeinträchtigen. Begrenzen Sie die Anzahl der Tags oder nutzen Sie Aggregationen in Lescopr.

  • Keine Traces für bestimmte Komponenten: Stellen Sie sicher, dass die automatische Instrumentierung für alle relevanten Bibliotheken aktiviert ist. Für Spring WebFlux oder Reactive Streams sind zusätzliche Abhängigkeiten erforderlich.

  • Latenz in der Darstellung: Wenn Metriken mit Verzögerung in Lescopr angezeigt werden, überprüfen Sie die Export-Intervalle in der Konfiguration:

    management.metrics.export.lescopr.step=10s
    
  • Speicherverbrauch durch Metriken: Micrometer speichert Metriken im Arbeitsspeicher, bis sie exportiert werden. Bei sehr hohen Metrik-Volumina kann dies zu OutOfMemoryErrors führen. Nutzen Sie Sampling oder passen Sie die Export-Intervalle an.

Wie integriere ich Traces in meine Spring Boot-Anwendung?

Traces sind essenziell, um Latenzquellen in verteilten Systemen zu identifizieren. Micrometer unterstützt OpenTelemetry und Brave für das Tracing. Hier ist, wie Sie es einrichten:

1. Brave für Tracing aktivieren

Fügen Sie die Brave-Abhängigkeit hinzu:

<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-tracing-bridge-brave</artifactId>
</dependency>
<dependency>
    <groupId>io.zipkin.brave</groupId>
    <artifactId>brave</artifactId>
</dependency>

2. Tracing-Konfiguration

Konfigurieren Sie Brave in der application.properties:

management.tracing.enabled=true
management.tracing.sampling.probability=1.0
management.tracing.baggage.enabled=true

3. Traces an Lescopr senden

Lescopr unterstützt Zipkin-kompatible Traces. Konfigurieren Sie den Brave-Exporter für Lescopr:

import brave.Tracing;
import brave.zipkin2.ZipkinSpanHandler;
import zipkin2.reporter.lescopr.LescoprSpanSender;

@Bean
Tracing tracing() {
    LescoprSpanSender sender = LescoprSpanSender.create("https://api.lescopr.com", "IHR_LESCOPR_API_KEY");
    return Tracing.newBuilder()
            .addSpanHandler(ZipkinSpanHandler.create(sender))
            .build();
}

4. Traces in Lescopr analysieren

Sobald die Traces exportiert werden, können Sie sie in Lescopr analysieren:

  • Service-Maps zeigen die Abhängigkeiten zwischen Ihren Microservices
  • Trace-Wasserfälle visualisieren den Request-Flow und identifizieren Flaschenhälse
  • Error-Traces helfen, die Ursache von Fehlern zu finden

Tipp: Nutzen Sie Baggage in Brave, um benutzerdefinierte Kontextinformationen (z. B. User-ID, Request-ID) über Service-Grenzen hinweg zu propagieren.

Wie nutze ich Lescopr für SLA-Überwachung und Alerts?

Ein zentraler Vorteil von Lescopr ist die Möglichkeit, SLA-Dashboards und Alerts basierend auf Ihren Metriken und Traces zu erstellen. So gehen Sie vor:

1. SLA-Dashboards erstellen

In Lescopr können Sie benutzerdefinierte Dashboards erstellen, die:

  • Latenzpercentile (P50, P95, P99) für kritische Endpunkte anzeigen
  • Fehlerraten (z. B. 5xx-Errors) überwachen
  • Throughput (Requests pro Sekunde) messen
  • Datenbank- und Cache-Performance analysieren

Beispiel für ein SLA-Dashboard:

  • Ziel: 99,9% der Requests sollen in unter 500 ms beantwortet werden
  • Metrik: http_server_requests_seconds_sum (aggregiert nach URI und Statuscode)
  • Visualisierung: Heatmap oder Zeitreihen-Diagramm

2. Alerts konfigurieren

Richten Sie Alerts ein, um automatisch benachrichtigt zu werden, wenn:

  • Die Latenz einen Schwellenwert überschreitet (z. B. P99 > 1s)
  • Die Fehlerrate steigt (z. B. > 1% 5xx-Errors)
  • Der Throughput abrupt sinkt (z. B. < 10% des Durchschnitts)

Beispielkonfiguration für einen Alert:

# Lescopr Alert-Konfiguration (Beispiel)
- name: "Hohe Latenz für /checkout"
  condition: "http_server_requests_seconds_sum{uri=\"/checkout\"} > 1.0"
  duration: "5m"
  notifications:
    - email: "team@example.com"
    - slack: "#alerts"

3. MTTR (Mean Time To Repair) verbessern

Mit Lescopr können Sie den MTTR (Mean Time To Repair) deutlich verkürzen, indem Sie:

  • Root-Cause-Analysen durchführen (z. B. durch Trace-Wasserfälle)
  • Historische Daten nutzen, um Muster zu erkennen
  • Automatisierte Diagnosen erhalten (z. B. durch KI-gestützte Anomalie-Erkennung)

Best Practice: Kombinieren Sie Metriken, Traces und Logs in Lescopr, um ein vollständiges Bild Ihrer Anwendung zu erhalten.

FAQ: Häufige Einwände und ihre Lösungen

"Die Einrichtung dauert länger als 10 Minuten – was mache ich falsch?"

Die 10-Minuten-Zusage bezieht sich auf die Grundkonfiguration von Micrometer und Lescopr. Wenn Sie länger brauchen, liegt das oft an:

  • Fehlenden Abhängigkeiten: Überprüfen Sie, ob alle notwendigen Bibliotheken (Micrometer, Brave, Lescopr-Exporter) in Ihrer pom.xml oder build.gradle enthalten sind.
  • Falscher Konfiguration: Stellen Sie sicher, dass der API-Key und die URI in der application.properties korrekt sind.
  • Netzwerkproblemen: Wenn Ihre Anwendung in einer privaten Cloud oder hinter einem Proxy läuft, müssen Sie möglicherweise die Netzwerkkonfiguration anpassen.

Lösung: Nutzen Sie die Lescopr-Dokumentation oder den Debug-Modus von Micrometer, um den Export zu überprüfen.

"Ich sehe keine Traces in Lescopr – warum?"

Traces werden nur exportiert, wenn:

  1. Tracing aktiviert ist (management.tracing.enabled=true)
  2. Brave oder OpenTelemetry korrekt konfiguriert ist
  3. Der Exporter (z. B. Zipkin) auf die Lescopr-API zeigt

Häufige Ursachen:

  • Sampling-Probability ist zu niedrig (Standard: 0.01). Setzen Sie sie auf 1.0 für 100% Sampling.
  • Fehlende Instrumentierung für bestimmte Bibliotheken (z. B. JDBC, Kafka). Fügen Sie die entsprechenden Abhängigkeiten hinzu.
  • Firewall oder Proxy blockiert den Export. Testen Sie die Verbindung mit curl:
    curl -X POST -H "Content-Type: application/json" -H "Authorization: Bearer IHR_LESCOPR_API_KEY" -d '{"test": "data"}' https://api.lescopr.com/v2/spans
    

"Die Metriken sind unübersichtlich – wie filtere ich sie?"

Lescopr bietet mehrere Möglichkeiten, um Metriken zu filtern und zu aggregieren:

  • Tag-Filter: Zeigen Sie nur Metriken mit bestimmten Tags an (z. B. uri=/api/*)
  • Aggregationen: Nutzen Sie Sum, Avg, Max oder Percentile für Metriken
  • Benutzerdefinierte Dashboards: Erstellen Sie Dashboards, die nur die relevanten Metriken anzeigen

Tipp: Nutzen Sie Micrometer-Filter, um unnötige Metriken bereits beim Export zu entfernen:

@Bean
MeterFilter meterFilter() {
    return MeterFilter.ofDefault().denyNameStartsWith("jvm."); // JVM-Metriken ausschließen
}

"Kostet Lescopr etwas – und lohnt es sich?"

Lescopr bietet eine kostenlose Testphase, in der Sie die vollständige Funktionalität nutzen können. Die Kosten hängen von:

  • Anzahl der Hosts (Anwendungen, die Metriken exportieren)
  • Datenvolumen (Anzahl der Metriken und Traces pro Monat)
  • Speicherdauer (Wie lange die Daten in Lescopr verfügbar sind)

Lohnt es sich?

  • Ja, wenn Sie verteilte Systeme überwachen müssen und SLA-Einhaltung kritisch ist.
  • Ja, wenn Sie Zeit sparen wollen, die Sie sonst mit manueller Analyse verbringen würden.
  • Nein, wenn Sie nur einfache Metriken benötigen und keine Traces oder Alerts brauchen.

Lescopr ist besonders für SRE- und Produktteams geeignet, die Zuverlässigkeit und Compliance (z. B. DSGVO) sicherstellen müssen.

Fazit: Spring Boot APM mit Micrometer und Lescopr in der Praxis

Die Kombination aus Micrometer und Lescopr bietet eine leistungsstarke Lösung für die Observability von Spring Boot-Anwendungen. Mit nur wenigen Schritten können Sie:

  • Performance-Metriken in Echtzeit überwachen
  • Traces für verteilte Systeme generieren
  • SLA-Dashboards und Alerts einrichten
  • Root-Causes von Problemen schneller identifizieren

Die Einrichtung ist einfach, erfordert aber etwas Feintuning, um das volle Potenzial auszuschöpfen. Nutzen Sie die automatische Instrumentierung von Micrometer, um schnell loszulegen, und passen Sie die Konfiguration an Ihre spezifischen Anforderungen an.

Für mehr Details: Die Lescopr-Dokumentation beschreibt die Einrichtung Schritt für Schritt.