Integrando Dropwizard Metrics con Prometheus metrics

Advertisements

Dropwizard es un framework en Java para crear aplicaciones web y centrarse en microservicios que proporciona muchas funciones interesantes. Una de ellas son las métricas, las métricas de Dropwizard (Dropwizard Metrics) ayudan a instrumentar la exposición de métricas con datos de JVM (memoria, CPU, subprocesos), métricas de API (solicitudes, tiempo de ejecución, errores, etc.) e incluso métricas personalizadas.

Sin embargo, las métricas de Dropwizard carecen de características como etiquetas y las métricas realizan cálculos en el lado del cliente, por ejemplo: una métrica suele tener un ciclo de vida de 15 minutos, por lo que métricas como Indicadores o Temporizador proporcionan un valor promedio en el último minuto, cinco minutos y 15 minutos. Lo cual es útil en algunos casos, pero tampoco exacto en otros escenarios.

Prometheus Metrics es un formato extendido para manejar métricas, varias herramientas son capaces de procesarlas (Prometheus Server, Graphana, Kibana, etc.). La biblioteca cliente de Prometheus permite que el código cree 4 tipos de métricas: Counter, Gauges, Histogram and Summary. Así, podemos crear nuestras métricas personalizadas, según las necesidades.

Advertisements

Podría ser el caso, que sea necesario utilizar métricas de Prometheus, debido al formato y las métricas personalizadas y sus características (por ejemplo: etiquetas), pero al mismo tiempo es necesario exponer todas aquellas métricas ya proporcionadas por Dropwizard. La buena noticia es que integrar las dos bibliotecas de métricas de instrumentación requiere solo unas pocas líneas de código.

Agregando Dependencias

<dependency>
  <groupId>io.prometheus</groupId>
  <artifactId>simpleclient_dropwizard</artifactId>
  <version>0.16.0</version>
</dependency>
implementation 'io.prometheus:simpleclient_dropwizard:0.16.0'

Integrating dropwizard metrics with prometheus metrics

import io.prometheus.client.CollectorRegistry;
import io.prometheus.client.dropwizard.DropwizardExports;

@Override
public void run(Configuration configuration, Environment environment){
    ... 
	CollectorRegistry.defaultRegistry.register(new DropwizardExports(environment.metrics()));
    ...
}

Conclusión

Con esos pocos cambios, Prometheus también recopila todas las métricas expuestas por Dropwizard Metrics (usando anotaciones en puntos finales, o métricas de JVM, o métricas personalizadas), y se expondrán en formato de Prometheus junto con sus métricas de Prometheus.

Referencias

Advertisements

Leave a Reply

Your email address will not be published. Required fields are marked *