documentation
Kohinos v3 Doc générée le commit 8d60b1904

Monitoring & incidents

Supervision, logs, sauvegardes, runbook incident. La règle : aucune donnée financière n'est jamais perdue silencieusement. Un soldat manquant en monnaie locale déclenche une investigation immédiate.

Logs Monolog

Tous les logs partent vers var/log/, segmentés par channel :

ChannelFichierNiveau prod
appvar/log/prod.logwarning
sepavar/log/sepa.loginfo
ssavar/log/ssa.loginfo
helloassovar/log/helloasso.loginfo
payzenvar/log/payzen.loginfo
doctrinevar/log/prod.logerror
deprecationvar/log/deprecation.loginfo

Rotation par logrotate (config /etc/logrotate.d/kohinos), rétention 90 jours minimum.

Supervision

Pas de Sentry cloud

.claude/rules/global.md interdit les SaaS propriétaires dans le path critique. GlitchTip self-host couvre 95 % des besoins Sentry, gratuitement et sans dépendance externe.

Vérifications quotidiennes automatisées

# Cron quotidien 04:00 — voir devops/cron.html
0 4 * * * www-data cd /var/www/kohinos && \
    php bin/console kohinos:accounts:check --env=prod \
    || mail -s "[KOHINOS] Anomalie comptes !" tresorier@example.org

kohinos:accounts:check vérifie : somme(débits) = somme(crédits), pas de solde en deçà du découvert autorisé, intégrité des chaînes flux.hash / operation.hash.

Sauvegardes

Runbook incident — perte de cohérence financière

  1. Geler les écritures : désactiver les crons financiers (kohinos:sepa:*, kohinos:ssa:*) et activer un mode lecture seule si possible.
  2. Snapshot DB immédiat : mysqldump --single-transaction --quick.
  3. Lancer un diagnostic : php bin/console kohinos:accounts:check et inspecter var/log/ssa.log / sepa.log.
  4. Comparer avec la dernière sauvegarde cohérente.
  5. Reproduire en environnement de staging avant tout correctif en prod.
  6. Communiquer : tenir le trésorier informé, notifier les adhérents impactés si nécessaire (privilégier la transparence).
  7. Post-mortem : documenter dans docs/audits/, créer un ADR si une décision durable est prise.

Runbook incident — webhook HelloAsso/PayZen perdu

  1. Identifier les PendingPaymentData bloqués (statut pending > 1h).
  2. Confronter avec le tableau de bord HelloAsso/PayZen (paiement réellement encaissé ?).
  3. Rejouer le webhook côté HelloAsso (UI admin) — les handlers sont idempotents, pas de risque de double crédit.
  4. Si rejeu impossible : créer manuellement le Flux avec le bon hash de référence, en transaction atomique.

Healthcheck route applicative

Endpoint /health recommandé (à implémenter si absent) qui vérifie : connexion DB, dernière exécution cron OK, espace disque, file mail non saturée.

Indicateurs à surveiller

IndicateurSeuil d'alerte
Échecs kohinos:accounts:checkTout échec → alerte trésorier immédiate
Mandats SEPA pending > 7 joursAlerte trésorier hebdo
Webhooks HelloAsso/PayZen pending > 1hAlerte technique immédiate
Bounces mail> 5 % des envois
Charge MariaDBConnexions actives > 80 % du max
Espace disque< 20 % libre