Logging, tracing, monitoring and observability #34
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Cette pull request intègre une solution complète de supervision pour notre application Quarkus, comprenant :
Collecte de métriques via Prometheus exposées par Micrometer sur l’endpoint /q/metrics.
Visualisation des métriques grâce à Grafana avec des dashboards personnalisés ou importés.
Tracing distribué avec Jaeger pour analyser le parcours des requêtes dans l’application.
Système d’alerting configuré avec PromQL et Alertmanager, incluant des notifications par email.
L’objectif est d’améliorer la visibilité sur les performances, la santé et le comportement de l’application en production comme en développement, afin de faciliter la détection rapide des anomalies et optimiser le diagnostic.
Le déploiement de ces outils est automatisé via Docker Compose pour simplifier l’intégration et la maintenance.
Ajout de prometheus pour collecter les métriques
Prometheus est un outil de monitoring open-source utilisé pour collecter et stocker des métriques sous forme de séries temporelles. Il permet de surveiller les performances de l’application Quarkus grâce aux données exposées via Micrometer sur l’endpoint /q/metrics. Ces métriques sont ensuite consultables via l’interface Prometheus. Nous avons également mis en place un système d’alerting basé sur PromQL et Alertmanager.
Objectifs :
1. Configuration Quarkus
Dans application.yaml au niveau de Quarkus ;
Dans pom.xml
2. Configuration Prometheus
Dans “prometheus.yml”
Concernant la target, il faut que ce soit l’IP locale pour que Quarkus puisse exécuter Prometheus à partir de docker. Étant sous WSL, il a fallu taper la commande :
ip addr show eth0 | grep inet, puis récupérer l’adresse inet avant le masque.3. Configurer AlertManager
Dans un fichier “alertmanager.yml” que l’on crée
4. Déployer prometheus dans docker
Dans “docker-compose.yaml”
5. Tests
Pour observer les métriques, il faut :
Pour vérifier que la configuration est bonne, nous pouvons dans un premier temps vérifier que les métriques sont bien récupéré sur l'adresse : http://localhost:8080/q/metrics
Puis ensuite, obtenir les différentes données sur Prometheus à l’adresse : http://localhost:9090
De plus, en allant dans Target health sur Prometheus, la cible devrait être UP si la configuration est bonne.
Concernant les alertes nous pouvons les vérifier via PromQL avec l’exemple suivant :
Voici un résumé du fonctionnement de l’architecture :
Quarkus (Micrometer Prometheus)
↓
Prometheus (scrape)
↓
PromQL + rules (alerts.yml)
↓
Alertmanager (notifications)
Ajout de Grafana pour la visualisation des métriques
Grafana est une plateforme de visualisation de données qui permet de créer des tableaux de bord interactifs à partir de sources comme Prometheus. Elle permet de visualiser graphiquement les métriques collectées par Prometheus à travers des dashboards personnalisables ou importés.
Objectifs :
1. Configuration Quarkus pour Grafana
Pour cela, nous avons modifié le fichier concerné pour ajouter Grafana
2. Tests
Après avoir fait les deux commandes comme précédemment :
Nous pouvons nous rendre sur l’adresse : http://localhost:3000/
Nous retrouvons ici Grafana qui va nous permettre par la suite de visualiser sur un dashboard différentes métriques que nous avons récupéré à partir de Prometheus en paramétrant comme entrée de Data Source : http://prometheus:9090/.
Nous pouvons créer nous mêmes les dashboards pour suivre des métriques.
Mais nous pouvons aussi importer des dashboard déjà fait, dans notre cas de l’application Quarkus, nous pouvons importer le dashboard suivant : Apicurio Registry(JVM Quarkus - Micrometer Metrics), à partir de son ID (18253).
Ajout de Jaeger pour le tracing
Jaeger est un outil de tracing distribué utilisé pour analyser les requêtes dans les architectures microservices. Il permet de suivre le parcours complet d’une requête à travers les différents composants de l’application Quarkus, facilitant ainsi le diagnostic de latences ou d'erreurs grâce aux traces envoyées via OpenTracing.
Objectifs :
1. Configuration Quarkus pour OpenTracing / Jaeger
Dans application.yaml,
Dans pom.xml
2. Déployer Jaeger dans Docker
Dans docker-compose.yaml
3. Tests
A nouveau nous lançons l’application avec les différentes commandes :
Par la suite après avoir effectué quelques requêtes sur le projet (ajout d’une réunion), nous pouvons aller sur l’adresse : http://localhost:16686/, pour apercevoir les étapes des requêtes.
Nous aurions également pu utiliser Apache SkyWalking à la place de Jaeger, ce dernier offrant une solution tout-en-un (métriques, logs, traces) avec intégration possible à Grafana.
Points bloquants et solutions
Lors de l’intégration de Prometheus, un conflit de dépendances a empêché Quarkus de démarrer. Le problème venait d’une incompatibilité entre quarkus-smallrye-metrics et quarkus-micrometer-registry-prometheus. En supprimant la première, l’application a pu exposer correctement les métriques au format Prometheus.
Prometheus, exécuté dans Docker, ne parvenait pas à joindre l’application Quarkus en local. Ce souci était dû à l’utilisation de localhost dans la configuration. En remplaçant l’adresse par l’IP locale de WSL obtenue via ip addr show eth0, le scraping des métriques a fonctionné.
Grafana ne montrait initialement aucune métrique. Le problème venait d’une mauvaise configuration de la datasource. En la définissant manuellement sur http://prometheus:9090 et en important un dashboard adapté (ID 18253), les visualisations sont devenues disponibles.
Côté Jaeger, les traces n’étaient pas visibles au départ. Après vérification, l’endpoint n’était pas bien configuré. Une fois corrigées dans le fichier application.yaml, les traces ont été correctement envoyées et visualisées.
Enfin, certains tags Docker comme stable ne fonctionnaient pas correctement. Le passage à des versions spécifiques, comme jaegertracing/all-in-one:1.43, a permis de stabiliser les déploiements.