Distinction entre absence dans les logs et absence de l'événement

Absence dans les logs

Définition : L'événement a pu se produire, mais il n'a pas été enregistré dans les logs.
Causes possibles :
Erreur de configuration : Le système n'a pas été configuré pour journaliser cet événement (ex. : niveau de log trop bas, filtre appliqué).
Défaillance du système de logging : Le service de logs était indisponible (ex. : disque plein, crash du démon de logs).
Suppression ou altération des logs : Les logs ont été effacés, tronqués ou corrompus (ex. : rotation mal configurée, attaque malveillante).
Latence ou bufferisation : Les logs sont temporairement stockés en mémoire ou dans un buffer et n'ont pas encore été écrits sur le support de stockage.
Permissions insuffisantes : Le processus générant l'événement n'avait pas les droits pour écrire dans les logs.
Sélectivité du logging : Certains événements sont délibérément exclus (ex. : logs désactivés pour des raisons de performance ou de confidentialité).

Implications :
On ne peut pas conclure que l'événement ne s'est pas produit.
Une preuve par l'absence est invalide : l'absence de trace ne prouve pas l'absence de l'événement.

Absence de l'événement

Définition : L'événement ne s'est objectivement pas produit.
Causes possibles :
Condition non remplie : Les prérequis pour déclencher l'événement n'étaient pas satisfaits (ex. : une requête n'a jamais été envoyée).
Bug ou dysfonctionnement : Le code ou le système n'a pas exécuté l'action attendue (ex. : une fonction n'a pas été appelée).
Interception ou blocage : L'événement a été empêché par un mécanisme de sécurité (ex. : pare-feu, validation d'entrée).
Contexte temporel : L'événement était censé se produire à un moment où le système était inactif (ex. : maintenance, arrêt planifié).

Implications :
Si l'on peut prouver que l'événement n'a pas eu lieu (par d'autres moyens que les logs), cela peut expliquer son absence dans les logs.
Une preuve positive est nécessaire (ex. : traces d'un autre système, audit externe, état cohérent des données).

Comment distinguer les deux cas ?
Critère Absence dans les logs Absence de l'événement

Preuve directe Aucune trace, mais impossibilité de conclure. Preuves externes (ex. : état du système, autres logs, témoignages).
Analyse des logs Recherche d'anomalies (ex. : gaps temporels, erreurs de logging). Cohérence avec d'autres événements (ex. : absence de conséquences attendues).
Contexte système Vérifier la santé du système de logging. Vérifier les conditions préalables à l'événement.
Approche forensique Audit des configurations et des permissions. Reconstruction de la timeline avec d'autres sources.
Risque d'erreur Faux négatif (l'événement a eu lieu mais n'est pas loggé). Faux positif (on croit à tort que l'événement n'a pas eu lieu).

Exemples concrets

Absence dans les logs :

Un utilisateur affirme avoir cliqué sur un bouton, mais aucun log ne le montre.
Diagnostic : Vérifier si le bouton était configuré pour logger l'action, ou si les logs ont été perdus.

Absence de l'événement :

Un paiement n'apparaît pas dans les logs, et la base de données montre que le solde n'a pas changé.
Diagnostic : Le paiement n'a probablement jamais été initié (ex. : erreur côté client avant l'envoi de la requête).

Bonnes pratiques pour éviter la confusion

Redondance des logs :

Utiliser plusieurs systèmes de logging (ex. : logs applicatifs + logs système + monitoring externe).
Archiver les logs de manière immuable (ex. : blockchain, stockage WORM).

Validation croisée :

Corréler les logs avec d'autres sources (ex. : métriques, bases de données, journaux d'audit).

Tests de logging :

Simuler des événements et vérifier leur traçabilité.
Valider que les niveaux de log couvrent tous les cas critiques.

Gestion des erreurs :

Logger les échecs de logging eux-mêmes (ex. : "Échec d'écriture dans le log principal, bascule sur le log secondaire").

Politique de rétention :

Conserver les logs suffisamment longtemps pour permettre des investigations a posteriori.

Conclusion :
L'absence dans les logs est une incertitude (on ne sait pas si l'événement a eu lieu), tandis que l'absence de l'événement est une affirmation (on a des preuves qu'il ne s'est pas produit). Pour trancher, il faut croiser les sources et analyser le contexte technique.