Surveillance des applications Kotlin : métriques et alertes
Dans le développement logiciel moderne, la surveillance est devenue une partie intégrante de l'écosystème de production. Pour les applications Kotlin fonctionnant sur JVM, une surveillance correctement configurée permet non seulement de suivre l'état du système en temps réel, mais aussi de prévenir les incidents avant qu'ils n'affectent les utilisateurs. Dans cet article, nous verrons comment organiser la collecte de métriques et configurer des alertes pour les applications Kotlin en utilisant des outils modernes tels que Micrometer et Prometheus.
Pourquoi surveiller les applications Kotlin ?
Kotlin, étant un langage fonctionnant sur JVM, hérite de toutes les capacités de surveillance de l'écosystème Java, mais ajoute ses propres particularités — les coroutines, les fonctions d'extension et la null-safety. La surveillance aide à répondre à trois questions clés :
- Que se passe-t-il en ce moment ? — la charge actuelle, le nombre de requêtes, l'utilisation de la mémoire.
- Que s'est-il passé avant ? — les données historiques pour analyser les tendances et trouver les goulots d'étranglement.
- Qu'est-ce qui pourrait mal tourner ? — la prédiction des problèmes basée sur les métriques.
Sans surveillance, toute application fonctionne « à l'aveugle », et même une fuite mémoire mineure peut entraîner un temps d'arrêt.
Métriques principales pour les applications Kotlin
Avant de configurer les outils, il est important de comprendre quelles métriques sont critiques pour les applications JVM en Kotlin.
Métriques JVM
Il s'agit d'un ensemble de base qui montre la santé de la machine virtuelle :
- Utilisation de la mémoire heap et non-heap
- Nombre de threads (actifs, démons, bloqués)
- Temps GC (Garbage Collection) et fréquence des collectes
- Charge CPU
Métriques métier
Elles reflètent le fonctionnement de l'application elle-même :
- Nombre de requêtes HTTP (RPS — requests per second)
- Temps de réponse (latence p50, p95, p99)
- Nombre d'erreurs (4xx, 5xx)
- Profondeur des files d'attente (si des coroutines ou des files de messages sont utilisées)
Métriques des coroutines
Puisque Kotlin utilise activement les coroutines, il est utile de surveiller :
- Nombre de coroutines actives
- Temps d'exécution des coroutines
- Nombre de coroutines annulées
Outils de surveillance : Micrometer + Prometheus
La pile standard pour la surveillance des applications Kotlin comprend Micrometer (bibliothèque de collecte de métriques) et Prometheus (système de stockage et d'alerte). Micrometer agit comme une façade qui prend en charge de nombreux backends (Prometheus, Datadog, Graphite, etc.), mais Prometheus est le choix le plus populaire.
Ajout des dépendances
Pour 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")}Configuration de la collecte de métriques dans Ktor
Regardons un exemple de configuration pour une application web avec Ktor — un framework populaire pour 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 // Ajout des tags standards meterRegistry.config().commonTags("application", "my-kotlin-app") }
routing { get("/metrics") { call.respond(meterRegistry.