Prometheus-Metriken in Kotlin: Integration mit Micrometer und Ktor

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

Prometheus-Metriken in Kotlin: Von den Grundlagen bis zu Produktionslösungen



Moderne Backend-Anwendungen erfordern eine ständige Überwachung. Prometheus ist der De-facto-Standard für die Metrikenerfassung in der Welt der Mikroservices. In diesem Artikel werden wir uns ansehen, wie man Prometheus mit der Bibliothek Micrometer und dem Framework Ktor in Kotlin-Anwendungen integriert. Sie erfahren, wie Sie benutzerdefinierte Zähler, Histogramme und Timer erstellen und einen Endpunkt für die Metrikenerfassung konfigurieren.



1. Warum Micrometer?

Micrometer ist eine Fassade für das Monitoring, vergleichbar mit SLF4J für das Logging. Es unterstützt viele Backends: Prometheus, Graphite, Datadog, InfluxDB und andere. Durch die Verwendung von Micrometer binden Sie sich nicht an ein bestimmtes Monitoring-System – ein Abhängigkeitswechsel genügt.



Für Prometheus bietet Micrometer ein spezielles Register PrometheusMeterRegistry, das Metriken in einem für Prometheus verständlichen Textformat exportiert.



2. Einbinden der Abhängigkeiten

Fügen Sie die folgenden Abhängigkeiten zu Ihrer build.gradle.kts hinzu:



dependencies {    // Micrometer + Prometheus    implementation("io.micrometer:micrometer-core:1.12.5")    implementation("io.micrometer:micrometer-registry-prometheus:1.12.5")

// Für Ktor implementation("io.ktor:ktor-server-core:2.3.9") implementation("io.ktor:ktor-server-netty:2.3.9") implementation("io.ktor:ktor-server-metrics-micrometer:2.3.9")}


Wenn Sie Spring Boot verwenden, reicht es aus, spring-boot-starter-actuator und micrometer-registry-prometheus hinzuzufügen – Spring Boot konfiguriert automatisch den Endpunkt /actuator/prometheus.



3. Grundlegende Konfiguration in Ktor

Erstellen wir eine einfache Ktor-Anwendung mit Prometheus-Metriken. Dazu benötigen wir:

  • PrometheusMeterRegistry – das Metrikregister
  • KtorMetricsPlugin – ein Plugin zur automatischen Erfassung von HTTP-Metriken
  • Den Endpunkt /metrics zur Erfassung der Prometheus-Daten


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

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

embeddedServer(Netty, port = 8080) { install(MicrometerMetrics) { registry = prometheusRegistry // Standard-Metriken aktivieren (JVM, CPU, Speicher) meterBinders = listOf( JvmGcMetrics(), JvmMemoryMetrics(), ProcessorMetrics() ) }

routing { // Endpunkt für Prometheus get("/metrics") { call.respondText( contentType = ContentType.parse("text/plain; version=0.0.4"), text = prometheusRegistry.scrape() ) }

// Beispiel für einen Geschäfts-Endpunkt get("/hello") { call.respondText("Hello, Kotlin!") } } }.start(wait = true)}


4. Benutzerdefinierte Metriken

Zusätzlich zu den automatischen Metriken können Sie Ihre eigenen erstellen. Betrachten wir drei Haupttypen:

  • Counter – ein Zähler (z. B. Anzahl der Anfragen)
  • Timer – die Ausführungszeit einer Operation
  • Gauge – ein aktueller Wert (z. B. Anzahl aktiver Benutzer)


import io.micrometer.core.instrument.Counterimport io.micrometer.core.instrument.Timerimport io.micrometer.core.instrument.Gauge

// Metriken erstellenval requestCounter: Counter = Counter .builder(

Empfehlungen