Métricas de Prometheus en Kotlin: integración con Micrometer y Ktor

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Métricas de Prometheus en Kotlin: desde lo básico hasta soluciones de producción



Las aplicaciones backend modernas requieren monitoreo constante. Prometheus es el estándar de facto para la recolección de métricas en el mundo de los microservicios. En este artículo, analizaremos cómo integrar Prometheus en aplicaciones Kotlin utilizando la biblioteca Micrometer y el framework Ktor. Aprenderá a crear contadores personalizados, histogramas y temporizadores, así como a configurar un endpoint para la recolección de métricas.



1. ¿Por qué es necesario Micrometer?

Micrometer es una fachada para monitoreo, similar a SLF4J para registro. Soporta múltiples backends: Prometheus, Graphite, Datadog, InfluxDB y otros. Al usar Micrometer, no se ata a un sistema de monitoreo específico; basta con cambiar la dependencia.



Para Prometheus, Micrometer proporciona un registro especial PrometheusMeterRegistry que exporta métricas en formato de texto comprensible para Prometheus.



2. Agregar dependencias

Agregue las siguientes dependencias en build.gradle.kts:



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

// Para 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")}


Si usa Spring Boot, basta con agregar spring-boot-starter-actuator y micrometer-registry-prometheus; Spring Boot configurará automáticamente el endpoint /actuator/prometheus.



3. Configuración básica en Ktor

Creemos una aplicación Ktor simple con métricas de Prometheus. Necesitaremos:

  • PrometheusMeterRegistry — registro de métricas
  • KtorMetricsPlugin — plugin para recolección automática de métricas HTTP
  • Endpoint /metrics para la recolección de datos de Prometheus


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 // Habilitar recolección de métricas predeterminadas (JVM, CPU, memoria) meterBinders = listOf( JvmGcMetrics(), JvmMemoryMetrics(), ProcessorMetrics() ) }

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

// Ejemplo de endpoint de negocio get("/hello") { call.respondText("Hello, Kotlin!") } } }.start(wait = true)}


4. Métricas personalizadas

Además de las métricas automáticas, puede crear las suyas propias. Veamos tres tipos principales:

  • Counter — contador (por ejemplo, número de solicitudes)
  • Timer — tiempo de ejecución de una operación
  • Gauge — valor actual (por ejemplo, número de usuarios activos)


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

// Crear métricasval requestCounter: Counter = Counter .builder(

Recommendations