Logs
Ce guide explique comment consulter et gérer les logs de PCH-SIG.
Types de logs
| Log | Source | Contenu |
|---|---|---|
| Backend Symfony | PHP-FPM | Erreurs PHP, requêtes API, authentification |
| Nginx Frontend | Nginx | Accès HTTP, erreurs serveur |
| Nginx Backend | Nginx | Requêtes API, proxying |
| PostgreSQL | PostgreSQL | Requêtes SQL, erreurs DB |
| Redis | Redis | Opérations cache |
| Docker | Conteneurs | Dé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
| Niveau | Description |
|---|---|
| DEBUG | Informations détaillées de débogage |
| INFO | Événements informatifs |
| NOTICE | Événements normaux mais significatifs |
| WARNING | Avertissements |
| ERROR | Erreurs d'exécution |
| CRITICAL | Erreurs critiques |
| ALERT | Action immédiate requise |
| EMERGENCY | Systè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..."
| Champ | Description |
|---|---|
| IP | Adresse client |
| Date | Date et heure |
| Méthode | GET, POST, etc. |
| URI | URL demandée |
| Status | Code HTTP (200, 404, 500...) |
| Taille | Taille de la réponse |
| User-Agent | Navigateur 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
- Ouvrez Grafana : http://localhost:3001
- Allez dans Explore
- Sélectionnez la datasource Loki
- 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
- Créez un dashboard avec les logs
- Ajoutez une alerte sur le nombre d'erreurs
- 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