[Issue #11] Monitoring: Prometheus + Grafana + Loki on Doodle project#41
Open
yassminechiha-bot wants to merge 1 commit into
Open
[Issue #11] Monitoring: Prometheus + Grafana + Loki on Doodle project#41yassminechiha-bot wants to merge 1 commit into
yassminechiha-bot wants to merge 1 commit into
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Issue #11 — Cloud-native applications and microservice architecture
Présentation du groupe
Cours : DevOps — ESIR2 S8
Sujet : Issue #11 — Cloud-native applications and microservice architecture
Référence : mfornos/awesome-microservices
Repo du projet : yassminechiha-bot/DoodleProjetDevops
Groupe : Yassmine CHIHA, Mariem Zeineb DHOUIB, Aymen SAHOURI et Ouiam ZEROUAL
Ce que nous avons mis en place
1. GitHub Actions — Pipeline CI/CD
Fichier :
.github/workflows/ci.ymlNous avons créé un pipeline CI/CD qui s'exécute automatiquement à chaque push ou pull request sur
main/master. Il enchaîne les étapes suivantes :./mvnw clean package -DskipTestsPipeline opérationnel et passant au vert sur GitHub Actions.
On observe ici l'exécution du pipeline CI/CD sur GitHub Actions.
Un premier run échoue à cause d'une erreur de configuration (docker-compose mal nommé), puis une correction est appliquée.
Le second run passe avec succès, ce qui valide le bon fonctionnement du pipeline : build Maven, lancement des services Docker et vérification.
2. Docker Compose — Ajout des services manquants
Fichier :
api/docker-compose.yamlLe docker-compose existant contenait uniquement
db,etherpadetmail. Nous avons ajouté :Nous avons également mis à jour
application.ymlpour pointer les URLs vers les bons services locaux :Le backend Quarkus est lancé sur la machine hôte avec
./mvnw quarkus:devet expose ses métriques surhttp://localhost:8080/q/metrics.Cette capture montre les conteneurs Docker en cours d'exécution.
Tous les services sont démarrés correctement : MySQL, Etherpad, SMTP, frontend Angular, ainsi que les outils d'observabilité (Prometheus, Grafana, Loki, Promtail).
L'environnement applicatif est donc entièrement opérationnel.
3. Prometheus — Collecte de métriques
Fichier :
api/prometheus.ymlRéférencé dans
mfornos/awesome-microservices→ section Monitoring & Debugging.Prometheus scrape toutes les 10 secondes l'endpoint
/q/metricsde Quarkus viahost.docker.internal.Les métriques exposées par Quarkus sont au format MicroProfile :
base_memory_committedHeap_bytesbase_cpu_processCpuLoad_percentbase_jvm_uptime_secondsbase_gc_totalOn observe ici les targets configurés dans Prometheus.
Les deux services (Prometheus lui-même et l'application Quarkus) sont en état UP.
Cela confirme que Prometheus collecte correctement les métriques via l'endpoint
/q/metrics.4. Grafana — Visualisation des métriques
Fichier :
api/grafana/provisioning/datasources/datasources.yamlRéférencé dans
mfornos/awesome-microservices→ section Monitoring & Debugging.Grafana est configuré avec provisioning automatique : les datasources Prometheus et Loki sont déclarées via des fichiers YAML versionnés dans Git, sans configuration manuelle.
Cette capture montre que Grafana est correctement configuré avec deux sources de données : Prometheus pour les métriques et Loki pour les logs.
Ces sources sont automatiquement provisionnées via des fichiers YAML versionnés dans le projet.
Cela permet d'éviter toute configuration manuelle et garantit la reproductibilité.
On observe ici la métrique
base_memory_committedHeap_bytes, qui représente la mémoire heap utilisée par la JVM.Le graphique permet de suivre l'évolution de la consommation mémoire dans le temps.
Cela est utile pour détecter d'éventuelles fuites mémoire ou une surcharge.
Cette capture montre la métrique
base_cpu_processCpuLoad_percent, qui représente la charge CPU du processus Quarkus.On peut observer les variations de charge et identifier d'éventuels pics liés à certaines requêtes.
5. Loki + Promtail — Centralisation des logs
Fichiers :
api/loki-config.yaml,api/promtail-config.yamlRéférencé dans
mfornos/awesome-microservices→ section Logging : "Like Prometheus, but for logs."Loki stocke les logs de tous les conteneurs Docker. Promtail est l'agent qui les collecte et les envoie à Loki. Les logs sont consultables directement dans Grafana via
{job="docker-logs"}.Analyse des métriques après utilisation de l'application
Afin de générer des métriques exploitables, nous avons simulé une activité utilisateur via le frontend (création de plusieurs sondages, ajout de participants, interactions et commentaires).
Cette activité permet d’observer le comportement réel de l’application à travers les métriques et les logs.
Charge CPU
On observe ici la métrique
base_cpu_processCpuLoad_percent.Après une phase initiale sans activité, des pics apparaissent suite aux interactions réalisées sur l’application (création de sondages, ajout de participants, commentaires).
Ces variations confirment que le système de monitoring capte correctement l’activité réelle de l’application.
Mémoire JVM
On observe ici la métrique
base_memory_committedHeap_bytes, représentant la mémoire heap utilisée par la JVM.La mémoire reste globalement stable, avec de légères variations liées à l’activité de l’application. Ce comportement est normal, la JVM allouant une quantité de mémoire relativement constante tout en ajustant dynamiquement son utilisation.
Uptime de l'application
Cette capture montre la métrique
base_jvm_uptime_seconds, qui représente le temps de fonctionnement de l’application depuis son démarrage.Son évolution linéaire confirme que l’application reste stable et qu’aucun redémarrage n’a eu lieu pendant la période observée.
Analyse des logs
On observe ici une augmentation du volume de logs lors de l’utilisation de l’application.
Les pics correspondent aux interactions effectuées via le frontend, ce qui montre que les événements applicatifs sont bien enregistrés.
Les logs détaillés contiennent des informations telles que les timestamps, les niveaux de log (INFO) et les messages internes des services.
Ils permettent de suivre précisément l’activité du système et facilitent le debugging.
Corrélation métriques / logs
On observe une corrélation entre les pics de logs et les variations de la charge CPU.
Cela confirme la cohérence du système d’observabilité mis en place : les actions utilisateur génèrent à la fois des logs et une augmentation de la charge système.
Conclusion sur l'observabilité
Ces différentes métriques (CPU, mémoire, uptime) combinées aux logs permettent d’avoir une vision complète du comportement de l’application.
L’utilisation conjointe de Prometheus, Grafana et Loki permet :
Le système d’observabilité mis en place est donc pleinement fonctionnel et adapté à une architecture cloud-native.
Architecture finale
Étapes de lancement
Difficultés rencontrées
host.docker.internalsous WSL2Sous Linux/WSL2, Docker ne résout pas automatiquement
host.docker.internal. Sans ça, Prometheus ne peut pas joindre Quarkus sur l'hôte.Solution :
Format MicroProfile des métriques
Quarkus expose les métriques au format MicroProfile et non Prometheus standard. Les métriques sont préfixées par
base_:process_cpu_usage→ n'existe pasbase_cpu_processCpuLoad_percent→ format réelFichiers de config créés comme dossiers (WSL2)
Docker Compose sous WSL2 crée parfois les fichiers montés en volume comme des dossiers s'ils n'existent pas. Cela a bloqué le démarrage de Loki et Promtail.
Solution : supprimer le dossier et recréer le fichier manuellement avant de relancer le conteneur.
Fichiers ajoutés/modifiés
L'ensemble des captures démontre que l'architecture mise en place offre une observabilité complète du système, en combinant métriques et logs dans un environnement cloud-native, tout en intégrant une chaîne d’intégration continue automatisée via GitHub Actions.
Cette architecture met en œuvre les principes fondamentaux du cloud-native :
Elle permet ainsi de faciliter le déploiement, la supervision et le debugging d'une application distribuée.
Conclusion
Nous avons mis en place une architecture cloud-native complète intégrant les pratiques DevOps essentielles : intégration continue, conteneurisation et observabilité.
Grâce à l’utilisation conjointe de Prometheus, Grafana et Loki, nous sommes en mesure de superviser l’application en temps réel, tant au niveau des performances que des logs applicatifs.
L’analyse des métriques et des logs après utilisation réelle de l’application confirme la pertinence de cette architecture et démontre l’efficacité des outils mis en place.
Ce projet illustre concrètement les bonnes pratiques DevOps modernes pour le déploiement, le monitoring et la gestion d’une architecture distribuée basée sur des microservices.