Aller au contenu principal

Journalisation

Vue d'ensemble

Cette page décrit l'infrastructure de journalisation d'OpenVLE. Tous les conteneurs écrivent leurs journaux sur stdout, de sorte qu'ils sont accessibles via les mécanismes standard de Docker (docker logs, docker compose logs).

Services et leurs journaux

ServiceFonctionParticularités
backendServeur API FastAPIJournaux basés sur Uvicorn, incl. accès HTTP, erreurs, démarrage/arrêt
worker (4 Replicas)Tâches d'arrière-plan généralesExécution de tâches, erreurs, tentatives de réessai
worker-vm-cloneOpérations de clonage et suppression de VMOpérations Proxmox de longue durée
worker-periodicPolling ProxmoxSynchronisation périodique de l'état
schedulerTâches planifiées (rq cron)Tâches périodiques planifiées et exécutées
frontendServeur web Vue.js/NginxJournaux d'accès et d'erreurs HTTP
mariadbBase de données SQLMessages de démarrage/arrêt, avertissements
mongodbBase de données NoSQLInformations de connexion, authentification
redisFile de tâches et cacheloglevel warning, sortie minimale

Consulter les journaux

Docker propose deux commandes pour consulter les journaux : docker logs pour un conteneur individuel (adressé par le nom du conteneur) et docker compose logs pour un ou plusieurs services à la fois (adressés par le nom du service dans le docker-compose.yml). Les deux supportent les mêmes options de base.

Conteneur individuel

docker logs [OPTIONS] <container_name>
OptionDescription
-fFollow — affiche les journaux en temps réel, similaire à tail -f
-n / --tailAffiche uniquement les n dernières lignes
--sinceAffiche les journaux depuis un moment donné (10m, 2026-04-28T12:00:00)
--timestampsAffiche les horodatages dans les lignes de journal

Exemple :

docker logs -f -n 100 openvle-backend

Affiche les 100 dernières lignes du conteneur openvle-backend puis continue le suivi en temps réel. L'affichage peut être interrompu avec Ctrl+C.

Plusieurs services

docker compose logs [OPTIONS] [service_name ...]
OptionDescription
-fFollow — affiche continuellement les nouveaux journaux
-n / --tailAffiche uniquement les n dernières lignes par conteneur
--timestampsAffiche les horodatages
--no-colorDésactive la coloration syntaxique (par ex. pour les scripts)

Exemple :

docker compose logs -f -n 50 backend worker scheduler

Affiche les 50 dernières lignes des trois services et continue le suivi des journaux en temps réel.

# Rechercher les erreurs dans le backend
docker compose logs backend | grep ERROR

# Rechercher les erreurs dans tous les workers
docker compose logs worker worker-vm-clone worker-periodic | grep ERROR

Format des journaux

FastAPI utilise Uvicorn, qui produit par défaut des lignes de journal au format suivant :

INFO: 127.0.0.1:54321 - "GET /v1/users HTTP/1.1" 200 OK
ERROR: Exception in ASGI application: ...

Les journaux des workers affichent l'exécution des tâches avec leur statut, leur durée et, le cas échéant, les messages d'erreur.

Agrégation centralisée des journaux

Pour les environnements de production, il est recommandé de configurer tous les services avec un driver de journalisation centralisé (par ex. gelf, fluentd, ou une stack ELK/EFK). Un fichier docker-compose.override.yml est adapté pour cela afin de préserver la capacité de mise à jour.

Exemple pour GELF (Graylog) :

logging:
driver: gelf
options:
gelf-address: udp://graylog.example.org:12201
tag: openvle-backend
Workers répliqués

Étant donné que le service worker fonctionne avec 4 réplicas en production, il est recommandé lors de l'agrégation centralisée des journaux d'ajouter le nom du service et de l'instance en tant que métadonnées, afin de pouvoir attribuer les journaux aux réplicas individuels.

Cas d'utilisation typiques

  • Recherche d'erreurs — Erreurs et tracebacks dans les journaux du backend ou des workers
  • Analyse des tâches — Vérification de la durée et du statut des jobs des workers
  • Surveillance du scheduler — Vérification que les tâches périodiques s'exécutent comme prévu
  • Audit — Détection des accès API non autorisés
  • Débogage du frontend — Journaux d'accès et d'erreurs Nginx en cas de problèmes d'accès