Administration

Journal d'accès et monitoring du trafic

QuietCMS enregistre chaque requête entrante dans un journal d'accès plat, analysé en temps réel par le back-office pour produire des statistiques de trafic, identifier les robots et alimenter les outils de sécurité. L'interface du journal est organisée en cinq onglets pour rendre ces données exploitables sans surcharge d'information.

Structure du journal

Chaque ligne de content/logs/access.log est un objet JSON minifié :

{"ts":1748513847,"url":"/blog/installation","ref":"https://google.com/","ua":"Mozilla/5.0...","ip":"a3f8...","ipd":"185.220.101.xxx","cc":"FR"}

Les champs clés :

  • ts — timestamp Unix de la requête
  • url — chemin demandé
  • ref — Referer HTTP (source de trafic)
  • ua — User-Agent complet
  • ip — hash SHA-256 de l'IP (non réversible, pour déduplication des visiteurs uniques)
  • ipd — IP masquée affichable (185.220.101.xxx)
  • cc — code pays ISO 3166-1 alpha-2

L'IP est hashée pour la déduplication des visiteurs uniques tout en préservant la confidentialité. L'IP masquée (ipd) permet l'affichage dans le back-office et le blocage manuel sans exposer l'adresse complète en clair sur le disque.

Détection automatique des robots

Un second fichier content/logs/bots.log enregistre séparément le trafic des robots connus. La détection repose sur une liste de signatures User-Agent : Googlebot, Bingbot, GPTBot, ClaudeBot, Bytespider, AhrefsBot, SemrushBot, et plusieurs dizaines d'autres. Les robots IA font l'objet d'un suivi particulier pour quantifier le volume d'indexation par les grands modèles de langage.

Un troisième fichier content/logs/human_daily.json agrège les statistiques de trafic humain par jour pour l'affichage des graphiques, sans conserver les entrées individuelles au-delà de la rétention configurée.

Les cinq onglets du journal d'accès

📈 Trafic

Vue d'ensemble du trafic humain : graphique en barres de l'activité sur les 30 derniers jours, répartition par code pays avec drapeaux, total de visiteurs uniques et de pages vues. Cet onglet s'appuie exclusivement sur human_daily.json pour des temps de chargement optimaux, quelle que soit la taille du journal brut.

🕷 Crawl & IA

Activité des robots d'exploration et des agents IA : carte de chaleur horaire des crawls, répartition par moteur (Google, Bing, OpenAI/GPT, Anthropic/Claude, Mistral, Bytedance…), nombre total de requêtes et de sessions robot. Utile pour surveiller l'intensité du recrawl SEO et mesurer la consommation par les LLM.

📋 Journal

Tableau paginé des entrées brutes du journal d'accès, 50 entrées par page. Pour chaque entrée : horodatage lisible, URL, IP masquée avec bouton de blocage direct, code pays, User-Agent abrégé. La pagination server-side préserve les performances même avec des journaux volumineux.

🤖 Robots

Classement des robots par nombre de requêtes, paginé à 25 par page. Pour chaque bot : nom, nombre total de requêtes, URLs les plus visitées. Permet d'identifier rapidement les scrapers agressifs ou les robots inconnus qui consomment des ressources.

🛡 Sécurité

Interface de gestion des accès : liste des IPs bloquées, liste des pays bloqués, liste blanche des IPs administratrices. Chaque section dispose d'un formulaire d'ajout et d'un bouton de suppression par entrée. C'est depuis cet onglet que s'opère l'ensemble du contrôle d'accès décrit dans l'article sur le blocage IP et le filtrage par pays.

Taille des fichiers et rétention

Une barre de taille affiche en permanence le poids de chaque fichier du système de journalisation : access.log, bots.log, human_daily.json et blocked.json, avec le total. Cette transparence permet de surveiller la croissance des logs et de planifier le nettoyage.

La rétention est configurable à l'initialisation : 90 jours par défaut pour le trafic humain, 365 jours pour les logs de robots. Une purgation automatique est déclenchée une fois par heure via un verrou de fichier atomique (.access_purge) pour éviter les exécutions concurrentes sur les sites à fort trafic.

Masquage de l'IP et conformité RGPD

Le champ ipd affiche les trois premiers octets suivis de .xxx (185.220.101.xxx). Le quatrième octet n'est jamais écrit en clair dans les journaux. Le hash SHA-256 de l'IP complète est uniquement utilisé pour compter les visiteurs uniques au sein d'une même journée — il est irréversible et ne permet pas de retrouver l'adresse originale.

Cette approche vise la conformité RGPD : les données de journal permettent d'analyser le trafic et d'assurer la sécurité du serveur sans stocker d'adresse IP complète et directement identifiable en clair sur le disque.

Articles similaires