Überwachung von Kotlin-Anwendungen: Metriken und Alerts von A bis Z

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Einleitung: Warum Überwachung für Kotlin-Anwendungen lebenswichtig ist

\n

Moderne Kotlin-Anwendungen, die auf der JVM (Java Virtual Machine) laufen, werden oft zu kritischen Knotenpunkten der Infrastruktur. Ohne angemessene Überwachung riskieren Sie plötzliche Ausfälle, Speicherlecks oder Leistungseinbußen, die bis zum Vorfall unbemerkt bleiben. In diesem Artikel werden wir erläutern, wie Sie ein vollständiges Überwachungssystem für Kotlin-Anwendungen „von A bis Z“ aufbauen: von der Erfassung grundlegender Metriken (CPU, Speicher, GC) bis zur Einrichtung von Alerts in Grafana und Prometheus.

\n

Wir werden drei Schlüsselwerkzeuge betrachten: Micrometer (Fassade für Metriken), Prometheus (Speicher und Sammler) und Grafana (Visualisierung und Alerts). Alle Codebeispiele sind in Kotlin geschrieben.

\n\n

1. Grundlagen der Metrikenerfassung: Micrometer und Prometheus

\n

Micrometer ist der De-facto-Standard-Fassade für die Überwachung im Spring- und Kotlin-Ökosystem. Es bietet eine einheitliche API zum Senden von Metriken an verschiedene Systeme (Prometheus, Datadog, New Relic usw.).

\n\n

1.1. Einbinden von Abhängigkeiten (Gradle)

\n
dependencies {\n    implementation("io.micrometer:micrometer-registry-prometheus:1.12.0")\n    implementation("org.springframework.boot:spring-boot-starter-actuator")\n}
\n

Für Ktor oder reines Kotlin ohne Spring können Sie nur micrometer-core und micrometer-registry-prometheus hinzufügen.

\n\n

1.2. Grundlegende Micrometer-Konfiguration in Spring Boot

\n

In application.yml reicht es aus, Actuator und den Prometheus-Endpunkt zu aktivieren:

\n
management:\n  endpoints:\n    web:\n      exposure:\n        include: health,info,prometheus\n  metrics:\n    export:\n      prometheus:\n        enabled: true
\n

Nach dem Start der Anwendung sind die Metriken unter /actuator/prometheus verfügbar.

\n\n

1.3. Erstellen eigener Metriken (Beispiel in Kotlin)

\n

Angenommen, Sie möchten die Anzahl der verarbeiteten Bestellungen und deren Bearbeitungszeit zählen:

\n
import io.micrometer.core.instrument.MeterRegistry\nimport io.micrometer.core.instrument.Timer\nimport org.springframework.stereotype.Service\nimport java.util.concurrent.atomic.AtomicLong\n\n@Service\nclass OrderService(private val registry: MeterRegistry) {\n\n    private val processedOrders: AtomicLong = registry.gauge(\n        "orders.processed.count",\n        AtomicLong(0)\n    )\n    private val orderProcessingTime: Timer = registry.timer("orders.processing.time")\n\n    fun processOrder(orderId: String) {\n        val sample = Timer.start()\n        try {\n            // Logik der Bestellverarbeitung\n            Thread.sleep((50..200).random().toLong())\n            processedOrders.incrementAndGet()\n        } finally {\n            sample.stop(orderProcessingTime)\n        }\n    }\n}
\n

Jetzt erscheinen die Metriken orders_processed_count und orders_processing_time_seconds in Prometheus.

\n\n

2. Einrichten von Prometheus zur Metrikenerfassung

\n

Prometheus ist ein Server, der Metriken von Ihren Anwendungen nach einem Zeitplan „scraped“ (abfragt).

\n\n

2.1. Konfiguration von prometheus.yml

\n

Fügen Sie Ihren Kotlin-Dienst als Ziel (target) hinzu:

\n
scrape_configs:\n  - job_name: 'kotlin-app'\n    metrics_path: '/actuator/prometheus'\n    static_configs:\n      - targets: ['localhost:8080']
\n

Wenn die Anwendung in Docker/Kubernetes läuft, verwenden Sie Service Discovery.

\n\n

2.2. Wichtige JVM-Standardmetriken

\n

Micrometer exportiert automatisch viele JVM-Metriken:

\n
    \n
  • jvm_memory_used_bytes — verwendeter Speicher (Heap/Non-Heap)
  • \n
  • jvm_gc_pause_seconds — Dauer der GC-Pausen
  • \n
  • jvm_threads_live_threads — Anzahl aktiver Threads
  • \n
  • process_cpu_usage — CPU-Auslastung durch den Prozess
  • \n
\n

Diese Daten sind bereits in Prome

Blogs

Buchempfehlungen