Integração de métricas Prometheus em Java: biblioteca simpleclient

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 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

Recommendations