Parcours Admin NOC — Opérations Quotidiennes
Vue d'ensemble des responsabilités opérationnelles quotidiennes du Network Operations Center (NOC) RGZ. Ce guide couvre la routine matinale, surveillance, gestion des alertes et tâches nocturnes.
Timeline quotidienne
09h00 — Vérification du Docker Stack
Action : Vérifier que les 21 conteneurs de production sont healthy.
Commandes essentielles
# SSH sur serveur production
ssh rgz_prod_1
# Vérifier les services
sudo docker compose -f /opt/rgz/docker-compose.core.yml ps
sudo docker compose -f /opt/rgz/docker-compose.monitoring.yml ps
# Status détaillé
sudo docker compose -f /opt/rgz/docker-compose.core.yml ps -a
# Logs en cas de problème
sudo docker logs rgz-api --tail 50
sudo docker logs rgz-db --tail 30Résultat attendu
STATUS HEALTHY (21 services)
rgz-api ✓
rgz-web ✓
rgz-portal ✓
rgz-nginx ✓
rgz-db ✓
rgz-redis ✓
rgz-beat ✓
rgz-radius ✓
rgz-dns ✓
rgz-gateway ✓
rgz-prometheus ✓
rgz-grafana ✓Seuil critique
Si >3 services sont DOWN, c'est une escalade P0 immédiate. Contacter Directeur Technique.
09h10 — Grafana System Overview
Action : Consulter les métriques système globales.
URL : https://grafana-rgz.duckdns.org → Dashboard "System Overview"
Métriques à vérifier
| Métrique | Seuil OK | Seuil Alerte | Action |
|---|---|---|---|
| CPU Usage | <60% | >80% | Identifier processus gourmand |
| RAM Usage | <70% | >85% | Vérifier memory leaks |
| Disk Usage (/) | <70% | >80% | Nettoyer logs, archiver données |
| Disk Usage (/var) | <70% | >80% | Docker logs trop gros → rotate |
| Network In | <500 Mbps | >800 Mbps | Spike traffic = possible DDoS |
| Network Out | <500 Mbps | >800 Mbps | Vérifier transferts de données |
| Température CPU | <60°C | >75°C | Problème ventilation physique |
Analyse rapide
Grafana propose les 15 derniers jours. Comparer jour/jour pour détecter les tendances dégradées.
10h00 — Revue AlertManager
Action : Consulter les alertes actives et prioriser les incidents.
URL : https://grafana-rgz.duckdns.org → Alerting → Alerts
Classification des incidents
P0 (CRITIQUE - Escalade 0min):
├─ rgz-api DOWN
├─ rgz-db DOWN
├─ rgz-radius DOWN
├─ Disk / >90%
└─ Memory >95%
P1 (HAUTE - Escalade 15min):
├─ rgz-api latence >5s
├─ Erreurs RADIUS >50/min
├─ Session RADIUS dropped >5%
└─ Paiement KKiaPay timeout
P2 (NORMALE - Escalade 1h):
├─ CPU >85%
├─ Redis latence >100ms
└─ DNS timeout <1%Processus de triage
- Lire alerte : timestamp, service, métrique, valeur
- Vérifier contexte : changements récents? déploiement? trafic anormal?
- Escalader si P0/P1 : créer ticket incident Jira/Discord
- Documenter : raison supposée + actions prises
- Résoudre ou remonter : si >30min sans résolution → escalade DG
P0 Alert
Tout P0 déclenche automatiquement :
- Alerte SMS au CTO
- Message Discord #critical
- Ouverture ticket incident auto
11h00 — Vérification des Services Critiques
Action : Vérifier les 4 services métier critiques.
Checklist API
# Santé API
curl -H "Authorization: Bearer $(your_token)" \
https://api-rgz.duckdns.org/api/v1/health
# Résultat attendu:
{
"status": "ok",
"db": "ok",
"redis": "ok",
"uptime_seconds": 123456
}Checklist Portail Captif
# Test portail (sans auth)
curl -L https://access-rgz.duckdns.org
# Vérifier redirection: 302 vers /portal/index.htmlChecklist RADIUS
# Test RADIUS auth (depuis anywhere)
radtest user-123 password-123 \
rgz-prod-1 1812 shared_secret_here
# Résultat: Access-Accept = OKChecklist PostgreSQL
# Depuis conteneur rgz-api
sudo docker exec rgz-api psql -h rgz-db -U postgres -d rgz \
-c "SELECT COUNT(*) as subscribers FROM subscribers;"
# Vérifier count >014h00 — Vérification des Backups
Action : Vérifier que les backups PostgreSQL 03h00 ont réussi.
# Vérifier derniers fichiers backup
ssh rgz_prod_1
ls -lah /opt/rgz/backups/ | tail -5
# Attendu: fichier du jour, taille >50MB
# Format: backup_2026-02-24_03h00.sql.gzRestauration de test (optionnel hebdo)
# Créer BD de test
sudo docker exec rgz-db createdb -U postgres rgz_test
# Restaurer
zcat /opt/rgz/backups/backup_2026-02-24_03h00.sql.gz | \
sudo docker exec -i rgz-db psql -U postgres rgz_test
# Vérifier
sudo docker exec rgz-db psql -U postgres rgz_test -c \
"SELECT COUNT(*) FROM subscribers;"
# Nettoyer
sudo docker exec rgz-db dropdb -U postgres rgz_test16h00 — Rapport Quotidien au Directeur Général
Action : Envoyer rapport statut du jour par email/WhatsApp.
Template rapport
📊 RAPPORT OPÉRATIONNEL RGZ — 24 février 2026
🟢 STATUT: Tous services OK
📈 MÉTRIQUES JOUR:
• Abonnés actifs: X (J-1: Y)
• Sessions RADIUS: Z
• Revenus jour: 45,000 FCFA
• Paiements KKiaPay: 12 transactions (100% approuvé)
• Temps réponse API: 145ms avg (SLA: <500ms)
⚠️ INCIDENTS: Aucun
📊 GRAFANA: https://grafana-rgz.duckdns.org/d/system-overview
📲 DASHBOARD: https://admin-rgz.duckdns.org/
Questions? Support: support@rgz.bjTâches nocturnes (Celery Beat)
00h15 — Réconciliation des paiements KKiaPay
# Task: rgz.billing.reconcile
# Déclenche automatiquement via Celery Beat
# Qu'elle fait:
# 1. Requête KKiaPay API → liste transactions 24h
# 2. Compare avec DB (radius_sessions)
# 3. Détecte divergences: paiement sans session, session sans paiement
# 4. Résout automatiquement 90% des cas
# 5. Génère rapport divergence pour révision manuelVérification :
# Logs de la task
sudo docker exec rgz-api tail -f /var/log/celery/celery.log | \
grep "billing.reconcile"
# Ou via Celery Flower (si déployé)
https://flower-rgz.duckdns.org/task/ → search "billing.reconcile"03h00 — Backup PostgreSQL
# Task: rgz.backup.pg_dump
# Déclenche: daily 03h00 UTC
# Fichier généré:
# /opt/rgz/backups/backup_YYYY-MM-DD_03h00.sql.gz
# Vérifier:
ls -lh /opt/rgz/backups/ | grep "$(date +%Y-%m-%d)"
# Taille attendue: >50MB pour 500+ abonnésRétention : 30 jours glissants (suppression auto des backups >30j)
Backup critique
Si backup 03h00 échoue, NOC doit être alerté avant 09h00. C'est le point de restauration officiel du jour.
05h00 — Purge APDP (Droit à l'oubli)
# Task: rgz.apdp.purge_expired
# Anonymise les comptes dont la demande de suppression APDP a >90j
# Qu'elle fait:
# 1. SELECT subscribers WHERE deletion_requested_at < NOW() - INTERVAL '90 days'
# 2. Anonymise: msisdn → "DELETED", nom → "DELETED", OTP logs supprimé
# 3. Conserve: subscriber_id (audit ARCEP obligatoire)
# 4. Génère audit trailOutils du NOC
Dashboard Admin Web
URL : https://admin-rgz.duckdns.org
Pages principales :
- Dashboard : KPIs globaux, uptime, revenue
- /alerts : alertes actives, incidents, tickets
- /incidents : file d'attente incidents P0/P1/P2
- /monitoring : santé services, CPU/RAM/disk
- /billing : factures, paiements, divergences KKiaPay
- /subscribers : recherche abonnés, sessions actives
- /sessions : RADIUS sessions en temps réel
Grafana Dashboards
URL : https://grafana-rgz.duckdns.org
Dashboards importants :
- System Overview : CPU, RAM, Disk, Network
- API Performance : requests/sec, latence, erreurs
- RADIUS Sessions : auth success/fail, simultaneous-use violations
- Revenue-Billing : revenus temps réel, paiements KKiaPay, factures
- SLA Incidents : uptime par revendeur, alertes actives
- Database : queries/sec, connections, cache hit ratio
Kibana (Logs centralisés)
URL : https://kibana-rgz.duckdns.org (si déployé)
Index principaux :
rgz-api-*→ logs FastAPIrgz-radius-*→ FreeRADIUS authentificationrgz-nginx-*→ reverse proxy accèsrgz-celery-*→ tâches de fond
SSH Prod (Troubleshooting avancé)
ssh rgz_prod_1
# Vérifier ressources
free -h # Mémoire
df -h # Disques
top -b -n 1 | head -20 # Processus top
# Logs Docker
docker logs rgz-api | tail -100
docker logs rgz-db --tail 50 --follow
# Vérifier réseau
netstat -tulpn | grep LISTEN
ss -s # Statistiques socketsEscalade d'urgence
Procédure P0
Si service DOWN :
Confirmation (5 min)
- Vérifier docker ps
- Vérifier logs
- Essayer redémarrage:
docker restart rgz-api
Notification (5 min)
- SMS au CTO
- Message Discord #critical
- Email DG
Diagnostic (15 min)
- Cause supposée (logs, disk space, memory?)
- Tentative résolution
Escalade (30 min)
- Si pas de résolution: appel téléphone CTO
- Envisager rollback ou failover
Documentation
- Créer incident ticket
- Timeline événements
- Cause root + actions correctives
Checklist journalière (résumé)
- [ ] 09h00 :
docker ps— tous services healthy - [ ] 09h10 : Grafana System Overview — CPU/RAM/Disk <80%
- [ ] 10h00 : AlertManager — aucune alerte P0 active
- [ ] 11h00 : API health, Portail, RADIUS, PostgreSQL — tous OK
- [ ] 14h00 : Backup 03h00 du jour — fichier >50MB
- [ ] 16h00 : Rapport DG envoyé
- [ ] 00h15 : Task reconciliation — log OK
- [ ] 03h00 : Backup — fichier créé
- [ ] 05h00 : APDP purge — aucune erreur
Fin : Valider le lendemain 09h00 ✓