Überwachung von Kotlin-Anwendungen: Metriken und Alarme

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

Überwachung von Kotlin-Anwendungen: Metriken und Alarme



In der modernen Softwareentwicklung ist die Überwachung zu einem untrennbaren Bestandteil der Production-Ökosysteme geworden. Für Kotlin-Anwendungen, die auf der JVM laufen, ermöglicht eine gut konfigurierte Überwachung nicht nur die Echtzeit-Verfolgung des Systemzustands, sondern auch die Vermeidung von Vorfällen, bevor sie sich auf die Benutzer auswirken. In diesem Artikel betrachten wir, wie die Erfassung von Metriken und die Konfiguration von Alarmen für Kotlin-Anwendungen mit modernen Tools wie Micrometer und Prometheus organisiert werden können.



Warum ist die Überwachung von Kotlin-Anwendungen notwendig?



Kotlin, als eine Sprache, die auf der JVM läuft, erbt alle Überwachungsmöglichkeiten des Java-Ökosystems, fügt aber eigene Besonderheiten hinzu – Coroutinen, Erweiterungsfunktionen und Null-Safety. Die Überwachung hilft, drei Schlüsselfragen zu beantworten:



  • Was passiert gerade? — aktuelle Last, Anzahl der Anfragen, Speichernutzung.
  • Was ist früher passiert? — historische Daten zur Trendanalyse und Identifizierung von Engpässen.
  • Was könnte schiefgehen? — Vorhersage von Problemen auf Basis von Metriken.


Ohne Überwachung arbeitet jede Anwendung „blind", und selbst ein geringfügiges Speicherleck kann zu Ausfallzeiten führen.



Wichtige Metriken für Kotlin-Anwendungen



Bevor Sie die Tools konfigurieren, ist es wichtig zu verstehen, welche Metriken für JVM-Anwendungen in Kotlin kritisch sind.



JVM-Metriken

Dies ist ein grundlegender Satz, der die Gesundheit der virtuellen Maschine anzeigt:

  • Nutzung des Heap- und Non-Heap-Speichers
  • Anzahl der Threads (aktiv, Daemon, blockiert)
  • GC-Zeit (Garbage Collection) und Häufigkeit der Sammlungen
  • CPU-Auslastung


Geschäftsmetriken

Spiegeln die Arbeit der Anwendung selbst wider:

  • Anzahl der HTTP-Anfragen (RPS — requests per second)
  • Antwortzeit (Latenz p50, p95, p99)
  • Anzahl der Fehler (4xx, 5xx)
  • Warteschlangentiefe (falls Coroutinen oder Nachrichtenwarteschlangen verwendet werden)


Coroutinen-Metriken

Da Kotlin aktiv Coroutinen verwendet, ist es nützlich, Folgendes zu überwachen:

  • Anzahl der aktiven Coroutinen
  • Ausführungszeit der Coroutinen
  • Anzahl der abgebrochenen Coroutinen


Tools für die Überwachung: Micrometer + Prometheus



Der Standard-Stack für die Überwachung von Kotlin-Anwendungen umfasst Micrometer (Bibliothek zur Metrikenerfassung) und Prometheus (System für Speicherung und Benachrichtigung). Micrometer fungiert als Fassade, die viele Backends unterstützt (Prometheus, Datadog, Graphite usw.), aber Prometheus ist die beliebteste Wahl.



Einbinden der Abhängigkeiten

Für Gradle (build.gradle.kts):

dependencies {    implementation("io.micrometer:micrometer-core:1.12.0")    implementation("io.micrometer:micrometer-registry-prometheus:1.12.0")    implementation("io.ktor:ktor-server-metrics-micrometer:2.3.7")}


Konfiguration der Metrikenerfassung in Ktor

Betrachten wir ein Konfigurationsbeispiel für eine Webanwendung auf Ktor – einem beliebten Framework für Kotlin:

import io.micrometer.prometheus.PrometheusMeterRegistryimport io.micrometer.prometheus.PrometheusConfigimport io.ktor.server.engine.*import io.ktor.server.netty.*import io.ktor.server.routing.*import io.ktor.server.response.*import io.ktor.server.metrics.micrometer.*

fun main() { val meterRegistry = PrometheusMeterRegistry(PrometheusConfig.DEFAULT)

embeddedServer(Netty, port = 8080) { install(MicrometerMetrics) { registry = meterRegistry // Standard-Tags hinzufügen meterRegistry.config().commonTags("application", "my-kotlin-app") }

routing { get("/metrics") { call.respond(meterRegistry.

Blogs

Buchempfehlungen