Guides
Administration
Monitoring

Monitoring

Surveiller l'état et les performances de CSWeb Community Platform.

⚠️

Prochaine version : Dashboard monitoring temps réel à venir. Actuellement : monitoring via CLI et logs.

Logs Docker

Tail Logs

# Tous les services
docker compose logs -f
 
# Service spécifique
docker compose logs -f csweb
docker compose logs -f postgres

Filtrer par Niveau

# Erreurs seulement
docker compose logs csweb | grep ERROR
 
# Warnings
docker compose logs csweb | grep WARN

Métriques Système

Docker Stats

# CPU/Memory usage en temps réel
docker stats
 
# Output exemple :
# CONTAINER    CPU %    MEM USAGE / LIMIT     MEM %
# csweb        2.5%     512MB / 4GB           12.8%
# postgres     1.2%     256MB / 2GB           12.8%

Disk Usage

# Taille volumes Docker
docker system df -v
 
# Taille base de données
docker compose exec postgres du -sh /var/lib/postgresql/data

Health Checks

Services Running

docker compose ps
 
# Output :
# csweb      running
# postgres   running
# mysql      running

Database Connection

# PostgreSQL
docker compose exec postgres pg_isready
 
# MySQL
docker compose exec mysql mysqladmin ping

CSWeb Endpoint

curl -f http://localhost:8080/api/health || echo "CSWeb down"

Monitoring Database

Nombre de Cases

-- PostgreSQL
SELECT COUNT(*) as total_cases FROM eval_cases;
 
-- Par statut
SELECT verified, COUNT(*)
FROM eval_cases
GROUP BY verified;

Taille Tables

-- PostgreSQL
SELECT
    schemaname,
    tablename,
    pg_size_pretty(pg_total_relation_size(schemaname||'.'||tablename)) AS size
FROM pg_tables
WHERE schemaname = 'public'
ORDER BY pg_total_relation_size(schemaname||'.'||tablename) DESC;

Connexions Actives

-- PostgreSQL
SELECT count(*) FROM pg_stat_activity;
 
-- Détails
SELECT usename, application_name, state
FROM pg_stat_activity
WHERE state = 'active';

Logs Application

Via l'Interface Web

La page Settings > Data dispose de deux onglets dédiés aux logs :

  • Breakout Logs : logs des breakouts par dictionnaire avec filtrage, recherche, viewer modal, téléchargement et suppression
  • Application Log : consultation du fichier ui.log avec nombre de lignes, taille, word wrap, copie et suppression

Via CLI

# Logs CSWeb
tail -f /var/www/html/var/logs/prod.log
 
# Logs breakout individuels
ls -la /var/www/html/var/logs/breakout/
 
# Logs scheduler cron
tail -f /var/www/html/var/logs/scheduler-cron.log

Rotation Logs

Configurer logrotate :

# /etc/logrotate.d/csweb
/var/www/html/var/logs/*.log {
    daily
    rotate 30
    compress
    delaycompress
    missingok
    notifempty
}

Alertes

Email sur Erreur

Script monitoring :

#!/bin/bash
# /usr/local/bin/csweb-monitor.sh
 
# Check service
if ! docker compose ps csweb | grep -q "Up"; then
    echo "CSWeb service down" | mail -s "ALERT: CSWeb Down" admin@example.com
fi
 
# Check database
if ! docker compose exec postgres pg_isready > /dev/null 2>&1; then
    echo "PostgreSQL down" | mail -s "ALERT: PostgreSQL Down" admin@example.com
fi

Cron :

*/5 * * * * /usr/local/bin/csweb-monitor.sh

Slack Webhook

#!/bin/bash
SLACK_WEBHOOK="https://hooks.slack.com/services/YOUR/WEBHOOK"
 
STATUS=$(docker compose ps csweb | grep -c "Up")
 
if [ $STATUS -eq 0 ]; then
    curl -X POST -H 'Content-type: application/json' \
      --data '{"text":"🔴 CSWeb service DOWN"}' \
      $SLACK_WEBHOOK
fi

Métriques Applicatives

Requêtes API

Compter requêtes par endpoint :

# Logs Nginx
awk '{print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -10

Temps de Réponse

# Parse Nginx logs
awk '{print $NF}' /var/log/nginx/access.log | \
  awk '{sum+=$1; count++} END {print "Avg:", sum/count, "ms"}'

Dashboard Monitoring (v2.1 Preview)

Fonctionnalités Prévues

Métriques Temps Réel :

  • CPU/Memory usage
  • Database connections
  • API requests/sec
  • Response times

Alertes :

  • Service down
  • High memory usage
  • Slow queries
  • Disk space low

Logs Streaming :

  • Real-time logs
  • Filtres avancés
  • Export logs

Grafana + Prometheus

Stack Monitoring (Optionnel)

# docker-compose.yml
services:
  prometheus:
    image: prom/prometheus
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
    ports:
      - "9090:9090"
 
  grafana:
    image: grafana/grafana
    ports:
      - "3000:3000"

Prometheus Config

# prometheus.yml
scrape_configs:
  - job_name: 'csweb'
    static_configs:
      - targets: ['csweb:8080']
 
  - job_name: 'postgres'
    static_configs:
      - targets: ['postgres:5432']

Grafana Dashboards

Import dashboard PostgreSQL :

  • ID: 9628 (PostgreSQL Database)
  • ID: 455 (Docker Monitoring)

Troubleshooting

Service Ne Démarre Pas

# Vérifier logs
docker compose logs csweb
 
# Vérifier config
docker compose config
 
# Rebuild
docker compose build --no-cache csweb
docker compose up -d

High Memory Usage

# Identifier processus
docker compose exec csweb top
 
# Limite mémoire PHP
echo "memory_limit = 512M" > /etc/php/8.1/cli/conf.d/99-memory.ini

Slow Queries

PostgreSQL :

-- Activer log slow queries
ALTER SYSTEM SET log_min_duration_statement = 1000; -- 1 seconde
 
-- Reload config
SELECT pg_reload_conf();
 
-- Voir slow queries
SELECT * FROM pg_stat_statements
ORDER BY mean_exec_time DESC
LIMIT 10;

Ressources