Métricas Prometheus em Java: guia completo da biblioteca simpleclient
Prometheus é um poderoso sistema de monitoramento e alerta de código aberto, que se tornou o padrão de facto no mundo Cloud Native. Para desenvolvedores Java, existem várias bibliotecas para integração, mas a biblioteca oficial simpleclient (também conhecida como prometheus/client_java) é a mais popular e suportada. Neste artigo, vamos detalhar como adicionar métricas Prometheus em uma aplicação Java usando esta biblioteca.
O que é simpleclient?
simpleclient é o cliente Java oficial para Prometheus, fornecendo uma maneira simples e eficiente de criar e exportar métricas. A biblioteca suporta quatro tipos principais de métricas do Prometheus:
- Counter (Contador) — valor monotonicamente crescente (ex.: número de requisições).
- Gauge (Medidor) — valor que pode variar arbitrariamente (ex.: carga atual da CPU).
- Histogram (Histograma) — distribuição de valores em "baldes" predefinidos (ex.: tempo de resposta).
- Summary (Resumo) — quantis dos valores observados (ex.: p50, p99 do tempo de resposta).
Instalação e configuração
Para começar, adicione as seguintes dependências ao seu pom.xml (Maven) ou build.gradle (Gradle).
Maven
<dependency> <groupId>io.prometheus</groupId> <artifactId>simpleclient</artifactId> <version>0.16.0</version></dependency>
<!-- Para exportar métricas via HTTP --><dependency> <groupId>io.prometheus</groupId> <artifactId>simpleclient_httpserver</artifactId> <version>0.16.0</version></dependency>Gradle
implementation 'io.prometheus:simpleclient:0.16.0'implementation 'io.prometheus:simpleclient_httpserver:0.16.0'Criação e uso de métricas
Vamos ver um exemplo de criação de todos os tipos principais de métricas em uma única classe.
import io.prometheus.client.Counter;import io.prometheus.client.Gauge;import io.prometheus.client.Histogram;import io.prometheus.client.Summary;
public class MetricsExample {
// 1. Counter: número de requisições processadas static final Counter requestsCounter = Counter.build() .name("app_requests_total") .help("Total number of processed requests.") .labelNames("endpoint", "method") .register();
// 2. Gauge: número atual de usuários ativos static final Gauge activeUsersGauge = Gauge.build() .name("app_active_users") .help("Current number of active users.") .register();
// 3. Histogram: tempo de execução da requisição em milissegundos static final Histogram requestDurationHistogram = Histogram.build() .name("app_request_duration_ms") .help("Request duration in milliseconds.") .buckets(10, 50, 100, 200, 500, 1000, 5000) .register();
// 4. Summary: quantis do tempo de execução static final Summary requestDurationSummary = Summary.build() .name("app_request_duration_summary_ms") .help("Request duration summary in milliseconds.") .quantile(0.5, 0.05) // p50 com margem de erro de 5% .quantile(0.99, 0.01) // p99 com margem de erro de 1% .register();
public static void main(String[] args) throws Exception { // Simulação de processamento de requisições for (int i = 0; i < 100; i++) { processRequest("/api/users", "GET"); }
// Iniciar servidor HTTP para exportar métricas new HTTPServer(9090); System.out.println("Metrics server started Também na biblioteca
Processamento JSON em Kotlin: bibliotecas e exemplos de uso
Trabalho com XML em Java: bibliotecas e ferramentas para parsing
GameplayKit para Swift: guia completo com exemplos práticos
Testes em Go (Golang): frameworks e ferramentas
Processamento de imagens em C#: redimensionar e cortar com a biblioteca ImageSharp