Monitoring Breakout
Surveiller et diagnostiquer les jobs de breakout en temps réel.
Monitoring via l'Interface Web
Onglet Breakout Logs
La page Settings > Data, onglet Breakout Logs offre un monitoring complet :
- Sidebar dictionnaires : voir les logs par dictionnaire avec badge compteur, recherche instantanée
- Table paginée : tri par dictionnaire, date, taille, type (manual/scheduled)
- Modal viewer : visualisation du contenu (thème sombre VS Code, numéros de ligne, word wrap toggle, scroll to top/bottom)
- Actions : télécharger ou supprimer chaque fichier log avec confirmation
Onglet Application Log
L'onglet Application Log permet de consulter le fichier ui.log de Symfony :
- Nombre de lignes, taille, date de modification
- Visualisation complète avec word wrap et copie vers le presse-papiers
- Suppression avec modal de confirmation
Logs en Temps Réel (CLI)
Tail Logs
# Logs Docker
docker compose logs -f csweb
# Logs breakout individuels
tail -f /var/www/html/var/logs/breakout/*.logFiltrer par Dictionnaire
# Grep pour dictionnaire spécifique
docker compose logs csweb | grep "EVAL_DICT"
# Grep erreurs
docker compose logs csweb | grep ERRORProgress Tracking
Commande avec Verbose
php bin/console csweb:process-cases-by-dict EVAL_DICT -vvvOutput exemple :
[INFO] Processing dictionary: EVAL_DICT
[INFO] Running blob breakout process.
[INFO] Processing dictionary: EVAL_DICT- Running threads 0
[INFO] creating a new blob breakout thread
...Watch Progress
# Compter rows pendant breakout
watch -n 5 'docker compose exec postgres psql -U csweb_analytics -d csweb_analytics -c "SELECT COUNT(*) FROM eval_cases;"'Métriques Performance
Temps d'Exécution
Mesurer durée :
time php bin/console csweb:process-cases-by-dict EVAL_DICTOutput :
real 45m12s
user 30m5s
sys 2m15sCases par Seconde
Calculer débit :
Le débit dépend du volume de données, du matériel et du driver SGBD utilisé.
Ressources Système
# CPU/Memory usage
docker stats csweb
# Top processes
docker compose exec csweb topDétection Erreurs
Codes d'Erreur Courants
| Erreur | Cause | Solution |
|---|---|---|
Connection refused | DB non accessible | Vérifier docker compose ps |
Driver not found | pdo_pgsql manquant | Installer driver |
Table already exists | Breakout déjà fait | Utiliser --overwrite |
Out of memory | Trop de cases | Augmenter memory_limit |
Check Database Connection
php bin/console csweb:check-database-driversTest Connection Avant Breakout
# PostgreSQL
docker compose exec postgres pg_isready
# MySQL
docker compose exec mysql-breakout mysqladmin ping
# SQL Server
docker compose exec sqlserver /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -Q "SELECT 1"Alertes
Email sur Erreur
Script wrapper :
#!/bin/bash
DICT=$1
LOG=$(mktemp)
php bin/console csweb:process-cases-by-dict $DICT > $LOG 2>&1
if [ $? -ne 0 ]; then
mail -s "Breakout Failed: $DICT" admin@example.com < $LOG
fi
rm -f $LOGSlack Webhook
#!/bin/bash
SLACK_WEBHOOK="https://hooks.slack.com/services/YOUR/WEBHOOK"
curl -X POST -H 'Content-type: application/json' \
--data '{"text":"❌ Breakout failed: Connection refused"}' \
$SLACK_WEBHOOKHealth Check Endpoint
Créer health-check.php :
<?php
// Vérifier dernière exécution breakout
$lastRun = filemtime('/tmp/last-breakout.lock');
$now = time();
$diffHours = ($now - $lastRun) / 3600;
if ($diffHours > 24) {
http_response_code(500);
echo json_encode(['status' => 'error', 'message' => 'No breakout in 24h']);
} else {
echo json_encode(['status' => 'ok', 'last_run_hours_ago' => $diffHours]);
}Monitorer avec UptimeRobot ou similaire.
Tableaux de Bord
Requêtes SQL Monitoring
-- Nombre total de cases
SELECT COUNT(*) as total_cases FROM eval_cases;
-- Cases par jour
SELECT DATE(modified_date) as date, COUNT(*) as count
FROM eval_cases
GROUP BY DATE(modified_date)
ORDER BY date DESC
LIMIT 7;
-- Taille tables
SELECT
table_name,
pg_size_pretty(pg_total_relation_size(table_name::regclass)) as size
FROM information_schema.tables
WHERE table_schema = 'public'
ORDER BY pg_total_relation_size(table_name::regclass) DESC;Grafana Dashboard
Connecter PostgreSQL à Grafana :
Datasource :
- Type: PostgreSQL
- Host:
postgres:5432 - Database:
csweb_analytics
Panels :
- Total cases (gauge)
- Cases par jour (graph)
- Taille DB (stat)
Cleanup & Maintenance
Supprimer Vieux Logs
# Logs > 30 jours
find /var/log/csweb -name "*.log" -mtime +30 -deleteVacuum PostgreSQL
docker compose exec postgres vacuumdb -U csweb_analytics -d csweb_analytics --analyzeOptimize MySQL
docker compose exec mysql-breakout mysqlcheck -u breakout_user -p --optimize --all-databasesTroubleshooting
Breakout Bloqué
Si processus bloqué :
# Trouver PID
ps aux | grep process-cases
# Kill process
kill -9 <PID>
# Supprimer lock file
rm -f /tmp/breakout-*.lockTables Corrompues
PostgreSQL :
docker compose exec postgres psql -U csweb_analytics -c "REINDEX DATABASE csweb_analytics;"MySQL :
docker compose exec mysql-breakout mysqlcheck -u breakout_user -p --repair csweb_breakout