Aller au contenu principal

Logs

Ce guide explique comment consulter et gérer les logs de PCH-SIG.

Types de logs

LogSourceContenu
Backend SymfonyPHP-FPMErreurs PHP, requêtes API, authentification
Nginx FrontendNginxAccès HTTP, erreurs serveur
Nginx BackendNginxRequêtes API, proxying
PostgreSQLPostgreSQLRequêtes SQL, erreurs DB
RedisRedisOpérations cache
DockerConteneursDémarrage, arrêt, erreurs

Consulter les logs Docker

Logs d'un conteneur

# Logs du backend
docker logs pch_backend

# Dernières 100 lignes
docker logs pch_backend --tail 100

# Suivre les logs en temps réel
docker logs pch_backend -f

# Logs avec timestamps
docker logs pch_backend --timestamps

Logs de tous les conteneurs

# Via docker compose
cd deploy
docker compose logs

# Suivre en temps réel
docker compose logs -f

# Conteneur spécifique
docker compose logs -f backend

Logs Backend Symfony

Emplacement

Les logs Symfony sont dans /app/var/log/ du conteneur :

# Lister les fichiers de log
docker exec pch_backend ls -la /app/var/log/

# Contenu typique
# dev.log - Environnement développement
# prod.log - Environnement production

Consulter les logs

# Dernières lignes du log prod
docker exec pch_backend tail -100 /app/var/log/prod.log

# Suivre en temps réel
docker exec pch_backend tail -f /app/var/log/prod.log

# Rechercher des erreurs
docker exec pch_backend grep -i "error" /app/var/log/prod.log

Niveaux de log

NiveauDescription
DEBUGInformations détaillées de débogage
INFOÉvénements informatifs
NOTICEÉvénements normaux mais significatifs
WARNINGAvertissements
ERRORErreurs d'exécution
CRITICALErreurs critiques
ALERTAction immédiate requise
EMERGENCYSystème inutilisable

Configuration Monolog

Fichier : backend/config/packages/monolog.yaml

monolog:
handlers:
main:
type: rotating_file
path: '%kernel.logs_dir%/%kernel.environment%.log'
level: info
max_files: 10

console:
type: console
process_psr_3_messages: false
channels: ["!event", "!doctrine"]

Logs Nginx

Frontend

# Logs d'accès
docker exec pch_frontend cat /var/log/nginx/access.log

# Logs d'erreur
docker exec pch_frontend cat /var/log/nginx/error.log

# Suivre en temps réel
docker exec pch_frontend tail -f /var/log/nginx/access.log

Backend API

# Logs d'accès API
docker exec pch_nginx_backend cat /var/log/nginx/access.log

# Logs d'erreur
docker exec pch_nginx_backend tail -f /var/log/nginx/error.log

Format des logs Nginx

192.168.1.100 - - [15/Jan/2024:10:30:45 +0000] "GET /api/menages HTTP/1.1" 200 1234 "-" "Mozilla/5.0..."
ChampDescription
IPAdresse client
DateDate et heure
MéthodeGET, POST, etc.
URIURL demandée
StatusCode HTTP (200, 404, 500...)
TailleTaille de la réponse
User-AgentNavigateur client

Logs PostgreSQL

Consulter les logs

# Logs PostgreSQL
docker logs pch_postgres

# Dernières lignes
docker logs pch_postgres --tail 50

Activer le logging des requêtes

Dans postgresql.conf :

log_statement = 'all'           # none, ddl, mod, all
log_min_duration_statement = 0 # Log toutes les requêtes
log_line_prefix = '%t [%p]: [%l-1] user=%u,db=%d '

Analyser les requêtes lentes

# Requêtes de plus de 1 seconde
docker logs pch_postgres 2>&1 | grep "duration:"

Logs Redis

# Logs Redis
docker logs pch_redis

# Informations serveur
docker exec pch_redis redis-cli -a redis_secure_2025 INFO

Centralisation avec Loki

PCH-SIG utilise Loki pour centraliser les logs.

Architecture

┌─────────────────┐     ┌─────────────────┐     ┌─────────────────┐
│ Conteneurs │────▶│ Promtail │────▶│ Loki │
│ Docker │ │ (collecteur) │ │ (stockage) │
└─────────────────┘ └─────────────────┘ └────────┬────────┘


┌─────────────────┐
│ Grafana │
│ (visualisation)│
└─────────────────┘

Accéder aux logs dans Grafana

  1. Ouvrez Grafana : http://localhost:3001
  2. Allez dans Explore
  3. Sélectionnez la datasource Loki
  4. Utilisez LogQL pour rechercher

Requêtes LogQL

# Logs du backend
{container="pch_backend"}

# Erreurs uniquement
{container="pch_backend"} |= "error"

# Logs d'un utilisateur spécifique
{container="pch_backend"} |= "admin@pch-sig.sn"

# Logs de la dernière heure avec erreurs
{container="pch_backend"} |= "error" | json | level="ERROR"

Rotation des logs

Docker

Par défaut, Docker limite la taille des logs. Configuration dans docker-compose.yml :

services:
backend:
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "5"

Symfony

La rotation est gérée par Monolog (rotating_file handler) :

main:
type: rotating_file
max_files: 10 # Garde les 10 derniers fichiers

Nettoyage manuel

# Vider les logs d'un conteneur
docker exec pch_backend truncate -s 0 /app/var/log/prod.log

# Supprimer les vieux logs
docker exec pch_backend find /app/var/log -name "*.log.*" -mtime +7 -delete

Recherche dans les logs

Grep basique

# Chercher une erreur
docker logs pch_backend 2>&1 | grep -i "error"

# Chercher un utilisateur
docker logs pch_backend 2>&1 | grep "admin@pch-sig.sn"

# Chercher une période
docker logs pch_backend 2>&1 | grep "2024-01-15"

Avec contexte

# 3 lignes avant et après
docker logs pch_backend 2>&1 | grep -B 3 -A 3 "Exception"

Compter les occurrences

# Nombre d'erreurs par type
docker logs pch_backend 2>&1 | grep -o "Exception.*$" | sort | uniq -c | sort -rn

Alertes sur les logs

Script de surveillance

# check-logs.ps1
$ErrorPatterns = @("ERROR", "CRITICAL", "Exception", "Fatal")
$Logs = docker logs pch_backend --since 1h 2>&1

foreach ($Pattern in $ErrorPatterns) {
$Matches = $Logs | Select-String -Pattern $Pattern
if ($Matches) {
Write-Host "ALERTE: $($Matches.Count) occurrences de '$Pattern'" -ForegroundColor Red
$Matches | Select-Object -First 5
}
}

Avec Grafana

  1. Créez un dashboard avec les logs
  2. Ajoutez une alerte sur le nombre d'erreurs
  3. Configurez les notifications (email, Slack, etc.)

Bonnes pratiques

Logging structuré

Utilisez JSON pour les logs :

$this->logger->info('Ménage créé', [
'menage_id' => $menage->getId(),
'user' => $user->getEmail(),
'ip' => $request->getClientIp()
]);

Ne pas logger

  • Mots de passe
  • Tokens d'authentification
  • Données personnelles sensibles
  • Numéros de carte bancaire

Rétention

  • Logs d'erreur : 90 jours minimum
  • Logs d'accès : 30 jours
  • Logs de debug : 7 jours

Prochaines étapes