Canigó. Com exposar i capturar mètriques amb Prometheus i Grafana

Darrera actualització: 02-01-2021

Introducció

L’objectiu d’aquest article és mostrar com es poden exposar mètriques de les aplicacions per a projectes generats amb el Framework Canigó i capturades per serveis de monitorització, alerta i visualizació de codi obert com: Prometheus i Grafana.

Justificació

Un dels principals reptes d’una aplicació és tenir visibilitat de què succeeix durant la seva execució, sobretot en escenaris de desplegament sobre contenidors. Els contenidors afegeixen velocitat i augmenten el rendiment dins del procés de desenvolupament, però aporten complexitat addicional sobre la visibilitat del comportament i la gestió d’alertes relacionades. És en aquest punt en el qual les solucions de monitoratge com Prometheus, per a l’explotació de dades, i Grafana, per a la seva visualització i anàlisi, poden ajudar molt.

Quan s’utilitza un projecte creat amb Canigó basat en Spring, és possible exposar diferents mètriques utilitzant la llibreria spring-boot-starter-actuator, i és possible exposar les mètriques en un format compatible amb Prometheus amb la llibreria micrometer-registry-prometheus.

Configuració

Per a activar les mètriques amb actuator i exposar-les amb un exporter de Prometheus en un projecte creat amb Canigó, és necessari afegir algunes dependències i configuracions que es detallen a continuació.

Dependències a afegir al fitxer pom.xml

  ...

  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
    <exclusions>
      <exclusion>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-logging</artifactId>
      </exclusion>
    </exclusions>
  </dependency>

  <dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-prometheus</artifactId>
  </dependency>

  ...

Configuració dels endpoints de actuator al fitxer application.yml

server:
  port: 8099

# Actuator
  management:
    endpoint:
      shutdown:
        enabled: true
      beans:
        cache:
          time-to-live: 10s
      health:
        #### Show all details of health
        show-details: always
    endpoints:
      web:
        exposure:
          #### Activate all web endpoints
          include: "*"

Fitxer de configuració prometheus.yml

Per a recollir les mètriques iniciarem un Prometheus, en aquest cas, en un contenidor:

global:
  scrape_interval: 10s

scrape_configs:
  - job_name: 'canigo_spring_prometheus'
    metrics_path: '/actuator/prometheus'
    scrape_interval: 5s
    static_configs:
      - targets: ['xxx.xxx.xxx.xxx:8099']  ## On xxx.xxx.xxx.xxx és la ip del servidor de la aplicación

Iniciarem el contenidor amb el fitxer de configuració:

docker run --rm -d -p 9090:9090 -v $PWD/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus

Per a visualitzar les mètriques, iniciarem un Grafana, en aquest cas, en un contenidor:

docker run --rm -d -p 3000:3000 grafana/grafana

Funcionament

Per a provar el funcionament iniciarem l’aplicació:

  mvn spring-boot:run

I provarem alguns serveis que mostren les mètriques disponibles:

  • /actuator

  • /actuator/health

  • /actuator/metrics/jvm.memory.used

  • /actuator/prometheus

Spring Exposes Metrics Ejemplo 1

Es comprova a Prometheus que estigui configurada la tasca d’importació de mètriques:

Spring Exposes Metrics Ejemplo 2

Es consulten a Prometheus les mètriques:

Spring Exposes Metrics Ejemplo 3

Es configura Grafana per a obtenir les dades del Prometheus i s’importen els Dashboards per a visualitzar les mètriques en format gràfic:

Spring Exposes Metrics Ejemplo 4

Conclusió

És possible configurar un projecte Canigó per a que exposi mètriques i poder-les explotar i visualitzar utilitzant eines com Prometheus i Grafana.

Referències

Per a més informació podeu consultar: