Métricas Prometheus em Java: biblioteca simpleclient
Prometheus é um poderoso sistema de monitoramento e alerta de código aberto que coleta métricas de várias fontes. Para aplicações Java, existem várias bibliotecas para integração com Prometheus. A principal e mais popular é a simpleclient do próprio projeto Prometheus. Ela fornece uma maneira minimalista, thread-safe e de alto desempenho para criar, registrar e exportar métricas.
O que é simpleclient?
simpleclient é a biblioteca Java oficial do Prometheus que permite aos desenvolvedores adicionar métricas às aplicações com sobrecarga mínima. Ela suporta quatro tipos principais de métricas:
- Counter — contador que apenas aumenta (ex.: número de requisições).
- Gauge — valor que pode aumentar ou diminuir (ex.: número de conexões ativas, temperatura).
- Histogram — histograma que mede a distribuição de valores (ex.: tempo de execução de requisições).
- Summary — resumo, semelhante ao histograma, mas calcula quantis no lado do cliente.
Instalação e configuração
Para trabalhar com simpleclient, adicione as seguintes dependências ao pom.xml (Maven):
<dependency> <groupId>io.prometheus</groupId> <artifactId>simpleclient</artifactId> <version>0.16.0</version></dependency><dependency> <groupId>io.prometheus</groupId> <artifactId>simpleclient_hotspot</artifactId> <version>0.16.0</version></dependency><dependency> <groupId>io.prometheus</groupId> <artifactId>simpleclient_servlet</artifactId> <version>0.16.0</version></dependency>Para Gradle:
implementation 'io.prometheus:simpleclient:0.16.0'implementation 'io.prometheus:simpleclient_hotspot:0.16.0'implementation 'io.prometheus:simpleclient_servlet:0.16.0'Criação e registro de métricas
Vamos criar um contador simples de requisições. As métricas são registradas no registro global CollectorRegistry.defaultRegistry.
import io.prometheus.client.Counter;import io.prometheus.client.Gauge;
public class MetricsExample { // Criando um contador com nome "http_requests_total" e rótulos "method" e "endpoint" static final Counter requests = Counter.build() .name("http_requests_total") .help("Total number of HTTP requests.") .labelNames("method", "endpoint") .register();
// Criando um gauge para o número de sessões ativas static final Gauge activeSessions = Gauge.build() .name("active_sessions") .help("Current number of active sessions.") .register();
public static void processRequest(String method, String endpoint) { // Incrementando o contador requests.labels(method, endpoint).inc(); // Definindo o valor do gauge (ex.: tamanho da fila) activeSessions.set(42); }}Exportação de métricas via HTTP
Para que o Prometheus possa coletar as métricas, é necessário fornecer um endpoint /metrics. A maneira mais simples é usar o servlet embutido. Se você estiver usando Spring Boot, adicione a dependência simpleclient_spring_boot.
import io.prometheus.client.exporter.MetricsServlet;import io.prometheus.client.hotspot.DefaultExports;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;
@WebServlet("/metrics" Também na biblioteca
Biblioteca image para Rust: guia completo com exemplos
Serialização de objetos em Swift (iOS/macOS): Codable, JSON e PropertyList
ORM para Java: comparação entre Hibernate, MyBatis, JPA e Spring Data
GraphQL em Go: Guia Completo da Biblioteca gqlgen
Trabalhando com CSV em Rust: bibliotecas csv, serde e processamento eficiente de dados