Guides
Breakout Sélectif
Monitoring

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/*.log

Filtrer par Dictionnaire

# Grep pour dictionnaire spécifique
docker compose logs csweb | grep "EVAL_DICT"
 
# Grep erreurs
docker compose logs csweb | grep ERROR

Progress Tracking

Commande avec Verbose

php bin/console csweb:process-cases-by-dict EVAL_DICT -vvv

Output 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_DICT

Output :

real    45m12s
user    30m5s
sys     2m15s

Cases 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 top

Détection Erreurs

Codes d'Erreur Courants

ErreurCauseSolution
Connection refusedDB non accessibleVérifier docker compose ps
Driver not foundpdo_pgsql manquantInstaller driver
Table already existsBreakout déjà faitUtiliser --overwrite
Out of memoryTrop de casesAugmenter memory_limit

Check Database Connection

php bin/console csweb:check-database-drivers

Test 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 $LOG

Slack 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_WEBHOOK

Health 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 -delete

Vacuum PostgreSQL

docker compose exec postgres vacuumdb -U csweb_analytics -d csweb_analytics --analyze

Optimize MySQL

docker compose exec mysql-breakout mysqlcheck -u breakout_user -p --optimize --all-databases

Troubleshooting

Breakout Bloqué

Si processus bloqué :

# Trouver PID
ps aux | grep process-cases
 
# Kill process
kill -9 <PID>
 
# Supprimer lock file
rm -f /tmp/breakout-*.lock

Tables 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

Ressources