Métricas Prometheus em Kotlin: integração com Micrometer e Ktor

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Métricas Prometheus em Kotlin: do básico às soluções de produção



As aplicações backend modernas exigem monitoramento constante. Prometheus é o padrão de facto para coleta de métricas no mundo dos microsserviços. Neste artigo, vamos abordar como integrar Prometheus em aplicações Kotlin usando a biblioteca Micrometer e o framework Ktor. Você aprenderá a criar contadores personalizados, histogramas e temporizadores, além de configurar um endpoint para coleta de métricas.



1. Por que usar Micrometer?

Micrometer é uma fachada para monitoramento, semelhante ao SLF4J para logging. Ele suporta diversos backends: Prometheus, Graphite, Datadog, InfluxDB e outros. Usando Micrometer, você não fica preso a um sistema de monitoramento específico — basta trocar a dependência.



Para Prometheus, o Micrometer fornece um registro especial PrometheusMeterRegistry, que exporta métricas em formato de texto compreensível pelo Prometheus.



2. Adicionando dependências

Adicione as seguintes dependências no 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")}


Se você estiver usando Spring Boot, basta adicionar spring-boot-starter-actuator e micrometer-registry-prometheus — o Spring Boot configurará automaticamente o endpoint /actuator/prometheus.



3. Configuração básica no Ktor

Vamos criar uma aplicação Ktor simples com métricas Prometheus. Precisaremos de:

  • PrometheusMeterRegistry — registro de métricas
  • KtorMetricsPlugin — plugin para coleta automática de métricas HTTP
  • Endpoint /metrics para coleta de dados do 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 // Habilita a coleta de métricas padrão (JVM, CPU, memória) 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() ) }

// Exemplo de endpoint de negócio get("/hello") { call.respondText("Hello, Kotlin!") } } }.start(wait = true)}


4. Métricas personalizadas

Além das métricas automáticas, você pode criar as suas próprias. Vamos considerar três tipos principais:

  • Counter — contador (ex.: número de requisições)
  • Timer — tempo de execução de uma operação
  • Gauge — valor atual (ex.: número de usuários ativos)


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

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

Recommendations