Surveillance des applications Kotlin : bibliothèque Ktor Metrics et Micrometer

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Surveillance des applications Kotlin : Ktor Metrics et Micrometer



Les applications serveur modernes en Kotlin, construites sur le framework Ktor, nécessitent une surveillance constante des performances et de l'état. Pour cela, on utilise la combinaison de deux outils puissants : Ktor Metrics Plugin (module intégré à Ktor) et Micrometer (façade pour la collecte de métriques). Dans cet article, nous allons voir comment configurer la surveillance avec export des données vers Prometheus et affichage dans Grafana.



Pourquoi la surveillance est-elle nécessaire ?

La surveillance permet de :

  • Suivre le temps de réponse des endpoints (latence).
  • Compter le nombre de requêtes (RPS).
  • Identifier les requêtes lentes et les erreurs.
  • Observer l'utilisation de la mémoire et du CPU (via les métriques JVM).
  • Configurer des alertes en cas de dépassement de seuils.


Bibliothèques et dépendances

Pour travailler, vous aurez besoin des dépendances suivantes dans build.gradle.kts :



dependencies {    // Ktor Server    implementation("io.ktor:ktor-server-core:2.3.7")    implementation("io.ktor:ktor-server-netty:2.3.7")

// Plugin de métriques implementation("io.ktor:ktor-server-metrics-micrometer:2.3.7")

// Export vers Prometheus implementation("io.micrometer:micrometer-registry-prometheus:1.12.0")

// Métriques JVM (optionnel) implementation("io.micrometer:micrometer-core:1.12.0")}


Configuration de base de Ktor Metrics

Considérons un exemple simple de serveur avec métriques. Créons le fichier Application.kt :



import io.ktor.server.application.*import 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.*import io.micrometer.prometheus.PrometheusMeterRegistryimport io.micrometer.prometheus.PrometheusConfig

fun main() { embeddedServer(Netty, port = 8080) { // Création du registre de métriques Prometheus val prometheusRegistry = PrometheusMeterRegistry(PrometheusConfig.DEFAULT)

// Installation du plugin de métriques install(MicrometerMetrics) { registry = prometheusRegistry // Noms des métriques par défaut meterBinders = listOf( // Ajout des métriques JVM io.micrometer.core.instrument.binder.jvm.JvmMemoryMetrics(), io.micrometer.core.instrument.binder.system.ProcessorMetrics() ) }

// Routage routing { // Endpoint pour fournir les métriques Prometheus get("/metrics") { call.respond(prometheusRegistry.scrape()) }

// Endpoint de test get("/hello") { call.respondText("Hello, World!") }

// Endpoint avec délai artificiel get("/slow") { Thread.sleep(500) call.respondText("Slow response") } } }.start(wait = true)}


Après le démarrage du serveur, ouvrez http://localhost:8080/metrics — vous verrez les métriques au format Prometheus :



# HELP ktor_http_server_requests_seconds  # TYPE ktor_http_server_requests_seconds summaryktor_http_server_requests_seconds_count{method="GET",route="/hello",status="2xx"} 3.0ktor_http_server_requests_seconds_sum{method="GET",route="/hello",status="2xx"} 0.012# HELP jvm_memory_used_bytes  # TYPE jvm_memory_used_bytes gaugejvm_memory_used_bytes{area="heap",id="G1 Survivor Space"} 1048576.0


Configuration avancée : métriques personnalisées

Vous pouvez ajouter vos propres compteurs et minuteries. Par exemple, un compteur de commandes traitées :



import io.micrometer.core.instrument.Counterimport io.micrometer.core.instrument.MeterRegistry

Recommendations