Monitoramento de aplicações Kotlin: métricas e alertas do A ao Z

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

Introdução: Por que o monitoramento é vital para aplicações Kotlin

\n

Aplicações Kotlin modernas, executadas na JVM (Java Virtual Machine), frequentemente se tornam nós críticos da infraestrutura. Sem o monitoramento adequado, você corre o risco de enfrentar falhas repentinas, vazamentos de memória ou degradação de desempenho que passarão despercebidos até o momento do incidente. Neste artigo, vamos detalhar como construir um sistema completo de monitoramento de aplicações Kotlin "do A ao Z": desde a coleta de métricas básicas (CPU, memória, GC) até a configuração de alertas no Grafana e Prometheus.

\n

Abordaremos três ferramentas principais: Micrometer (fachada para métricas), Prometheus (armazenamento e coletor) e Grafana (visualização e alertas). Todos os exemplos de código são escritos em Kotlin.

\n\n

1. Fundamentos da coleta de métricas: Micrometer e Prometheus

\n

Micrometer é a fachada padrão de fato para monitoramento no ecossistema Spring e Kotlin. Ele fornece uma API unificada para enviar métricas para vários sistemas (Prometheus, Datadog, New Relic, etc.).

\n\n

1.1. Adicionando dependências (Gradle)

\n
dependencies {\n    implementation("io.micrometer:micrometer-registry-prometheus:1.12.0")\n    implementation("org.springframework.boot:spring-boot-starter-actuator")\n}
\n

Para Ktor ou Kotlin puro sem Spring, você pode adicionar apenas micrometer-core e micrometer-registry-prometheus.

\n\n

1.2. Configuração básica do Micrometer no Spring Boot

\n

No application.yml, basta ativar o Actuator e o endpoint Prometheus:

\n
management:\n  endpoints:\n    web:\n      exposure:\n        include: health,info,prometheus\n  metrics:\n    export:\n      prometheus:\n        enabled: true
\n

Após iniciar a aplicação, as métricas estarão disponíveis em /actuator/prometheus.

\n\n

1.3. Criando métricas personalizadas (exemplo em Kotlin)

\n

Suponha que você queira contar o número de pedidos processados e o tempo de processamento:

\n
import io.micrometer.core.instrument.MeterRegistry\nimport io.micrometer.core.instrument.Timer\nimport org.springframework.stereotype.Service\nimport java.util.concurrent.atomic.AtomicLong\n\n@Service\nclass OrderService(private val registry: MeterRegistry) {\n\n    private val processedOrders: AtomicLong = registry.gauge(\n        "orders.processed.count",\n        AtomicLong(0)\n    )\n    private val orderProcessingTime: Timer = registry.timer("orders.processing.time")\n\n    fun processOrder(orderId: String) {\n        val sample = Timer.start()\n        try {\n            // Lógica de processamento do pedido\n            Thread.sleep((50..200).random().toLong())\n            processedOrders.incrementAndGet()\n        } finally {\n            sample.stop(orderProcessingTime)\n        }\n    }\n}
\n

Agora, as métricas orders_processed_count e orders_processing_time_seconds aparecerão no Prometheus.

\n\n

2. Configurando o Prometheus para coleta de métricas

\n

Prometheus é um servidor que "raspa" (solicita) métricas de suas aplicações em intervalos agendados.

\n\n

2.1. Configuração do prometheus.yml

\n

Adicione seu serviço Kotlin como alvo (target):

\n
scrape_configs:\n  - job_name: 'kotlin-app'\n    metrics_path: '/actuator/prometheus'\n    static_configs:\n      - targets: ['localhost:8080']
\n

Se a aplicação estiver rodando em Docker/Kubernetes, use service discovery.

\n\n

2.2. Métricas JVM importantes por padrão

\n

O Micrometer exporta automaticamente várias métricas da JVM:

\n
    \n
  • jvm_memory_used_bytes — memória usada (heap/non-heap)
  • \n
  • jvm_gc_pause_seconds — tempo de pausas do GC
  • \n
  • jvm_threads_live_threads — número de threads ativas
  • \n
  • process_cpu_usage — uso de CPU pelo processo
  • \n
\n

Esses dados já estão disponíveis no Prome

Blogs

Book Recommendations