Spring Boot Actuator / Micrometer

Diese Seite bleibt auch ohne JavaScript lesbar. Suche und Buttons sind Zusatzkomfort.

Actuator, Micrometer und Observability

Produktionsverständnis: Health, Metrics, Logs, Traces, Readiness, Liveness und Alarmierung.

Observability: Logs + Metrics + Traces ergeben Betriebsverständnis LogsWas ist passiert? MetricsWie oft/wie schnell? TracesWo hängt es? Actuator + Micrometer + OpenTelemetry/Prometheus/Grafana
1. Actuator als Betriebsoberfläche

Actuator ergänzt Anwendungen um produktionsnahe Endpunkte. Health, Info, Metrics, Prometheus, Loggers und weitere Endpunkte helfen, eine Anwendung im Betrieb zu beobachten und zu steuern. Nicht jeder Endpunkt gehört öffentlich ins Netz.

In Kubernetes/OpenShift sind Liveness und Readiness besonders wichtig: Liveness beantwortet, ob der Prozess neu gestartet werden sollte. Readiness beantwortet, ob der Pod Traffic bekommen darf.

Actuator Konfiguration
management:
  endpoints:
    web:
      exposure:
        include: health,info,metrics,prometheus,loggers
  endpoint:
    health:
      probes:
        enabled: true
      show-details: when_authorized
  metrics:
    tags:
      application: order-service
      environment: prod
2. Micrometer und eigene Metriken

Micrometer abstrahiert Metriken für verschiedene Monitoring-Systeme. Gute Metriken sind fachlich lesbar: orders.submitted, payments.failed, invoice.export.duration. Schlechte Metriken sind technische Zufallsnamen ohne Verantwortlichkeit.

Counter und Timer
@Service
class OrderMetrics {
    private final Counter submitted;
    private final Timer placementTimer;

    OrderMetrics(MeterRegistry registry) {
        this.submitted = Counter.builder("orders.submitted").register(registry);
        this.placementTimer = Timer.builder("orders.placement.duration").register(registry);
    }

    <T> T recordPlacement(Supplier<T> action) {
        return placementTimer.record(action);
    }

    void incrementSubmitted() {
        submitted.increment();
    }
}
3. Tracing und Korrelation

Logs ohne Korrelations-ID sind in verteilten Systemen oft schwer nutzbar. Traces zeigen, wie ein Request durch Gateway, Services, Datenbank und Messaging läuft. Wichtig ist, fachliche IDs nicht mit sensiblen Daten zu verwechseln.

Strukturiertes Logging mit Kontext
try (MDC.MDCCloseable ignored = MDC.putCloseable("orderId", orderId.toString())) {
    log.info("Order submitted");
}

Enterprise-Prüffragen

  • Readiness/Liveness getrennt?
  • Actuator-Endpunkte abgesichert?
  • Fachliche Metriken definiert?
  • Logs, Metrics und Traces korrelierbar?