Integração de métricas Prometheus em aplicações Kotlin: guia completo

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: guia completo de integração



No desenvolvimento moderno, o monitoramento e a coleta de métricas são criticamente importantes para manter a estabilidade das aplicações. Prometheus é um sistema de monitoramento líder de código aberto que permite coletar, armazenar e analisar dados de desempenho. Neste artigo, veremos como adicionar métricas Prometheus em aplicações Kotlin, usando a biblioteca Micrometer e um servidor HTTP configurável.



Por que usar Prometheus com Kotlin?

  • Flexibilidade: Prometheus suporta vários tipos de métricas: contadores, histogramas, sumarizações e medidores.
  • Integração nativa: Kotlin é totalmente compatível com o ecossistema Java, permitindo o uso do Micrometer — uma ferramenta popular para coleta de métricas.
  • Escalabilidade: Prometheus escala facilmente para monitorar microsserviços e sistemas distribuídos.


Configuração do projeto com Gradle

Para começar, adicione as dependências no arquivo build.gradle.kts:

dependencies {    implementation("io.micrometer:micrometer-core:1.12.0")    implementation("io.micrometer:micrometer-registry-prometheus:1.12.0")    // Para o servidor HTTP (usando Ktor)    implementation("io.ktor:ktor-server-netty:2.3.7")    implementation("io.ktor:ktor-server-content-negotiation:2.3.7")}


Criação do registrador Prometheus

A base da coleta de métricas é o PrometheusMeterRegistry. Crie-o na sua aplicação:

import io.micrometer.prometheus.PrometheusConfigimport io.micrometer.prometheus.PrometheusMeterRegistry

val registry = PrometheusMeterRegistry(PrometheusConfig.DEFAULT)


Definição de métricas

Vamos considerar três tipos principais de métricas:

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

Exemplo de criação de métricas:

import io.micrometer.core.instrument.Counterimport io.micrometer.core.instrument.Gaugeimport io.micrometer.core.instrument.Timer

val requestCounter: Counter = Counter .builder("api.requests.total") .description("Número total de requisições à API") .register(registry)

val activeUsersGauge: Gauge = Gauge .builder("app.users.active") .description("Número de usuários ativos") .register(registry) { activeUsersCount }

val requestTimer: Timer = Timer .builder("api.requests.duration") .description("Tempo de execução das requisições") .register(registry)

var activeUsersCount = 0


Exportação de métricas via HTTP

Para que o Prometheus possa coletar métricas, elas precisam ser exportadas no formato /metrics. Usamos Ktor para criar o endpoint:

import io.ktor.server.engine.embeddedServerimport io.ktor.server.netty.Nettyimport io.ktor.server.routing.getimport io.ktor.server.routing.routingimport io.ktor.server.response.respondText

fun startMetricsServer(port: Int = 9090) { embeddedServer(Netty, port = port) { routing { get("/metrics") { val scrape = registry.scrape() call.respondText(scrape, contentType = io.ktor.http.ContentType.Text.Plain) } } }.start(wait = false)}


Integração com a lógica de negócio

Atualize as métricas no código da sua aplicação:

fun handleRequest() {    requestTimer.record {        // Simulação de processamento de requisição        Thread.sleep(100)        requestCounter.increment()    }}

fun userLoggedIn() { activeUsersCount++}

fun userLoggedOut() { act

Recommendations