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
Es comprova a Prometheus que estigui configurada la tasca d’importació de mètriques:
Es consulten a Prometheus les mètriques:
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:
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: