Documentation

Guide complet d'installation, de configuration et d'utilisation de Seelog. PHP 5.3+ · Zéro dépendance · Auto-hébergé.

Installation

Seelog est un fichier PHP unique et autonome. L'installation se fait en moins de 5 minutes sur n'importe quel hébergement disposant de PHP 5.3 ou supérieur ,mutualisé, VPS, serveur dédié ou container Docker.

Seelog affiche des données sensibles (logs bruts, IPs, URLs). Protégez toujours son accès par un mot de passe (.htaccess) ou une restriction IP avant de le déployer en production.
1
Télécharger seelog.php
Un seul fichier PHP, inférieur à 200 Ko, contenant tout le code applicatif, le CSS et le JavaScript intégrés.
# Via wget (Linux/macOS) wget https://seelog.app/download/seelog.php # Via curl curl -LO https://seelog.app/download/seelog.php # Vérification de l'intégrité (SHA-256) sha256sum seelog.php
2
Déployer sur le serveur dans un répertoire protégé
Copiez le fichier dans un sous-répertoire de votre racine web. Créez un fichier .htaccess pour restreindre l'accès.
# Copie via SCP scp seelog.php user@monserveur.fr:/var/www/html/stats/ # Création du fichier de protection .htaccess cat > /var/www/html/stats/.htaccess << 'EOF' AuthType Basic AuthName "Seelog ,accès restreint" AuthUserFile /etc/apache2/.htpasswd Require valid-user EOF # Création du fichier de mots de passe htpasswd -c /etc/apache2/.htpasswd admin
Alternative : restriction par IP. Ajoutez dans .htaccess : Require ip 192.168.1.0/24 pour n'autoriser l'accès qu'depuis votre réseau local ou VPN.
3
Ouvrir et configurer dans le navigateur
Accédez à l'URL dans votre navigateur. La bannière de configuration s'affiche au premier lancement pour saisir le chemin vers vos logs Apache.
# Accès à Seelog https://monserveur.fr/stats/seelog.php # Chemins typiques des logs Apache Ubuntu / Debian : /var/log/apache2/ CentOS / RHEL : /var/log/httpd/ cPanel : /home/[user]/logs/ Plesk : /var/www/vhosts/[domain]/logs/

PHP doit avoir accès en lecture sur le répertoire de logs. Sur Ubuntu : sudo usermod -aG adm www-data puis sudo service apache2 restart.

Prérequis serveur

PHP requis : 5.3+ (testé jusqu'à 8.3) Extensions : aucune (zlib recommandée pour .gz, intégrée par défaut) Serveur web : Apache 2.x, Nginx, LiteSpeed (tout serveur PHP) Mémoire PHP : 64 Mo minimum, 128 Mo recommandés Timeout PHP : 60s minimum pour les gros fichiers de logs Accès logs : lecture seule sur le répertoire de logs Apache

Géolocalisation IP

Seelog intègre un lecteur MMDB pur PHP qui prend en charge deux bases de données de géolocalisation : DB-IP Country LITE (gratuit, sans inscription) et MaxMind GeoLite2 (gratuit avec compte). Les deux utilisent le format de fichier .mmdb.

Option 1 : DB-IP Country LITE (recommandé)

La base DB-IP Country LITE est disponible en téléchargement direct sans création de compte. Elle est mise à jour mensuellement et couvre l'ensemble des plages IPv4 et IPv6 mondiales avec résolution au niveau pays.

# Téléchargement de la base DB-IP LITE cd /var/www/geoip/ wget "https://download.db-ip.com/free/dbip-country-lite-$(date +%Y-%m).mmdb.gz" # Décompression gzip -d dbip-country-lite-$(date +%Y-%m).mmdb.gz # Renommage pour faciliter les mises à jour ln -sf dbip-country-lite-$(date +%Y-%m).mmdb dbip-country-lite.mmdb # Permissions chmod 644 dbip-country-lite.mmdb
Renseignez le chemin /var/www/geoip/dbip-country-lite.mmdb dans la bannière de configuration Seelog, champ "Chemin vers la base GeoIP (.mmdb)".

Option 2 : MaxMind GeoLite2

MaxMind propose une base GeoLite2-Country gratuite après création d'un compte gratuit sur maxmind.com. Elle offre une légère meilleure précision sur certaines plages mais nécessite une clé de licence.

# Téléchargement MaxMind GeoLite2 (clé de licence requise) curl -L "https://download.maxmind.com/app/geoip_download?\ edition_id=GeoLite2-Country&license_key=VOTRE_CLE&suffix=tar.gz" \ -o GeoLite2-Country.tar.gz # Extraction tar -xzf GeoLite2-Country.tar.gz cp GeoLite2-Country_*/GeoLite2-Country.mmdb /var/www/geoip/

Mise à jour automatique mensuelle

# Cron job mensuel pour DB-IP LITE (1er de chaque mois à 3h) 0 3 1 * * cd /var/www/geoip && \ wget -q "https://download.db-ip.com/free/dbip-country-lite-$(date +\%Y-\%m).mmdb.gz" && \ gzip -df dbip-country-lite-$(date +\%Y-\%m).mmdb.gz && \ ln -sf dbip-country-lite-$(date +\%Y-\%m).mmdb dbip-country-lite.mmdb

Affichage des drapeaux

Seelog supporte trois modes d'affichage des drapeaux de pays, configurables dans l'interface :

emoji → drapeaux emoji Unicode (🇫🇷 🇩🇪 🇺🇸) ,aucun fichier requis png → images PNG depuis le répertoire configuré (ex. ./flags/FR.png) svg → images SVG depuis le répertoire configuré (ex. ./flags/fr.svg)

Le mode emoji est recommandé car il ne nécessite aucun fichier supplémentaire et fonctionne sur tous les systèmes d'exploitation modernes. Les modes png et svg permettent un rendu plus homogène sur les systèmes où les emoji ont des polices incohérentes.

Configuration

Toutes les options de Seelog sont accessibles depuis la bannière de configuration dans l'interface ,aucune modification de code PHP requise. La configuration peut être exportée en fichier JSON et importée sur d'autres instances.

Cliquez sur "Sauvegarder la configuration" dans la bannière pour télécharger un fichier seelog-config.json sur votre ordinateur. Pour restaurer, cliquez sur "Charger une configuration" et sélectionnez le fichier ,aucune donnée de log n'est incluse dans l'export.
Option Description & valeurs
Répertoire de logs Chemin absolu vers le répertoire Apache. Exemple : /var/log/apache2/. Les fichiers .log, .log.gz, .log.tar.gz sont détectés automatiquement.
Date de début / fin Plage temporelle d'analyse. Boutons rapides : Aujourd'hui, 7 jours, 30 jours, 1 an, Tout. Les entrées hors plage sont ignorées lors du parsing.
Sessions par page Nombre de sessions dans le tableau paginé. Valeur par défaut : 40. Valeurs conseillées : 20, 40, 80, 100. Une valeur élevée augmente le temps de rendu AJAX.
Timeout de session Durée d'inactivité en minutes avant création d'une nouvelle session pour la même IP. Par défaut : 30 minutes. Valeur max : 60 minutes.
Chemin GeoIP (.mmdb) Chemin absolu vers le fichier de base de géolocalisation. Compatible DB-IP LITE et MaxMind GeoLite2. Laisser vide pour désactiver. Exemple : /var/www/geoip/dbip-country-lite.mmdb.
Mode drapeaux emoji (défaut), png ou svg. Les modes png/svg nécessitent un répertoire de drapeaux contenant des fichiers nommés par code pays ISO 3166-1 alpha-2 (FR.png, DE.svg…).
Répertoire drapeaux Chemin vers les images de drapeaux, utilisé uniquement si mode = png ou svg. Peut être relatif à seelog.php ou absolu. Exemple : ./flags/.
Filtres d'URL Liste de préfixes ou expressions régulières à exclure de l'analyse des sessions. Un filtre par ligne. Exemple : /healthcheck, /\.woff2$/. Ne masque pas les menaces.
Masquer les assets Si activé, les requêtes vers des ressources statiques (CSS, JS, images, fontes) sont exclues du comptage des pages vues et du détail de session. Activable globalement ou par session.
Granularité graphiques Regroupement des données : jour (365 points max), mois (24 points), année (5 points). Synchronisé sur tous les graphiques de l'interface.
Thème couleurs bots Palette de couleurs pour les pastilles et graphiques de bots. Actuelle : palette distinctive par catégorie (moteurs bleu, IA violet, monitoring vert, social coloré).

Format du fichier de configuration JSON

{ "log_dir": "/var/log/apache2/", "date_from": "2026-01-01", "date_to": "2026-05-20", "sessions_page": 40, "session_timeout": 30, "geoip_db": "/var/www/geoip/dbip-country-lite.mmdb", "flag_mode": "emoji", "flag_dir": "", "url_filters": ["/healthcheck", "/\\.woff2$/"], "hide_assets": true, "chart_granularity": "day" }

Filtres d'URL

Les filtres d'URL permettent d'exclure certaines requêtes de l'analyse des sessions sans modifier les fichiers de log. Ils sont particulièrement utiles pour éliminer les faux positifs générés par vos propres outils de monitoring, les webhooks, ou les endpoints d'API connus.

Syntaxe des filtres

Chaque filtre est défini sur une ligne distincte dans le champ "Filtres d'URL" de la bannière de configuration. Trois types de filtres sont supportés :

# 1. Préfixe de chemin exact (commence par) /healthcheck /api/webhook /wp-cron.php # 2. Regex encadrée de slashes /\.woff2$/ ← exclure les requêtes vers les fontes /\.(css|js|png)$/ ← exclure les assets statiques /^\/api\// ← exclure tout sous /api/ # 3. Correspondance partielle (contient) favicon.ico robots.txt sitemap.xml

Comportement des filtres

Les filtres d'URL n'affectent jamais la détection des menaces. Une requête vers /etc/passwd sera toujours signalée comme menace critique même si un filtre correspondant est défini. La sécurité prime sur le filtrage.

Les filtres s'appliquent :

  • Au calcul du nombre de pages vues par session
  • Aux graphiques d'activité et de bots
  • Au détail dépliable d'une session (les requêtes filtrées sont masquées)
  • Aux statistiques de référents et de clics sortants

Les filtres ne s'appliquent pas à :

  • La détection de menaces (toujours active)
  • La détection des bots (analyse basée sur le User-Agent, pas l'URL)
  • Le calcul de la durée de session (basé sur les timestamps, pas les URLs)

Filtres pré-définis "Assets statiques"

Une case à cocher "Masquer les assets statiques" active un filtre pré-défini couvrant les extensions courantes : .css, .js, .png, .jpg, .gif, .svg, .ico, .woff, .woff2, .ttf, .eot, .map.

# Regex interne du filtre "assets statiques" /\.(css|js|png|jpg|jpeg|gif|svg|ico|woff|woff2|ttf|eot|map|webp|avif)(\?.*)?$/i

FAQ

Les questions les plus fréquentes sur l'installation, la configuration et l'utilisation de Seelog.

Seelog fonctionne-t-il sur un hébergement mutualisé ?

Oui, dans la plupart des cas. Seelog ne nécessite que PHP 5.3+ et un accès en lecture sur les fichiers de logs. Sur les hébergements cPanel, les logs sont généralement dans /home/[user]/logs/ et accessibles par PHP. Sur les mutualisés OVH/Infomaniak, vérifiez que le chemin des logs est accessible via is_readable() depuis PHP.

La seule limitation est la mémoire PHP et le timeout d'exécution. Pour des logs volumineux (>100 Mo), il peut être nécessaire d'augmenter memory_limit à 256 Mo et max_execution_time à 120s dans le .htaccess (php_value memory_limit 256M).

PHP a-t-il besoin de droits spéciaux pour lire les logs Apache ?

Les logs Apache appartiennent généralement au groupe adm sur Debian/Ubuntu. L'utilisateur www-data (Apache/PHP) doit être membre de ce groupe.

Commande pour ajouter www-data au groupe adm : sudo usermod -aG adm www-data, puis sudo service apache2 restart. Sur CentOS/RHEL, remplacez www-data par apache.

Seelog envoie-t-il des données à l'extérieur ?

Non, absolument aucune. Seelog est un script PHP qui s'exécute entièrement sur votre serveur. Il ne fait aucune requête réseau sortante ,ni pour la géolocalisation (base MMDB locale), ni pour les graphiques (Chart.js inclus en CDN configuré dans votre instance), ni pour aucune autre raison.

Vos données de logs restent sur votre serveur. Le fichier de configuration JSON exporté ne contient que des préférences d'interface, jamais de données de log.

Comment analyser plusieurs virtual hosts (sites) simultanément ?

Seelog détecte automatiquement les virtual hosts à partir des noms de fichiers de logs. Si vos fichiers sont nommés site.com-access.log et autresite.fr-access.log, Seelog les identifie comme deux vhosts distincts et affiche un filtre par vhost dans l'interface.

Si tous vos vhosts partagent un même fichier access.log (configuration Apache sans CustomLog par vhost), Seelog les analysera ensemble sans distinction de domaine ,ceci est normal et ne constitue pas un bug.

Les fichiers .log.gz et .tar.gz sont-ils supportés ?

Oui. Seelog inclut un lecteur gzip (basé sur zlib_decode() ou les wrappers de flux PHP) et un lecteur tar/gz pur PHP. Formats supportés : .log, .log.1, .log.N, .log.gz, .log.N.gz, .log.tar.gz.

La détection du format est automatique basée sur l'extension et le magic number. Les archives tar.gz sont lues en streaming avec un buffer de 64 Ko, garantissant une consommation mémoire constante quelle que soit la taille de l'archive.

Comment ajouter un bot qui n'est pas dans la liste ?

La détection générique couvre automatiquement les User-Agents contenant bot, crawler, spider, scanner ou slurp (insensible à la casse). Ces bots apparaissent dans la catégorie "Autres bots".

Pour ajouter un bot nommé avec sa propre couleur dans les graphiques, éditez le tableau $bots dans seelog.php. Chaque entrée prend la forme : 'NomBot' => ['color' => '#hexcouleur', 'label' => 'Nom affiché', 'cat' => 'catégorie']. La chaîne de correspondance est vérifiée par strpos() dans le User-Agent (insensible à la casse).

Pourquoi le graphique Google Search n'affiche-t-il pas de données ?

Le graphique Google Search ne comptabilise que les requêtes provenant d'une vraie URL de recherche Google (google.*/search?q=...) dans le champ référent Apache. Si votre site reçoit peu de trafic organique Google, ou si Apache n'est pas configuré pour loguer le référent, le graphique sera vide.

Vérifiez que votre format de log Apache inclut le champ référent (%{Referer}i). Le format Combined Log Format le fait par défaut : LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined.

Seelog fonctionne-t-il avec Nginx ou LiteSpeed ?

Oui, à condition que le format de logs soit compatible Combined Log Format (CLF), qui est le format par défaut d'Apache et supporté par Nginx et LiteSpeed avec la directive log_format combined.

Configuration Nginx pour logs au format Combined : access_log /var/log/nginx/access.log combined;. La structure du fichier de log doit contenir les champs : IP, ident, auth, timestamp, requête, code HTTP, taille, référent, User-Agent ,dans cet ordre exact.

Changelog

Historique des versions et notes de mise à jour. Les versions majeures apportent de nouvelles fonctionnalités, les versions mineures des corrections et améliorations.

Mai 2026 · v2.6.0
Géolocalisation DB-IP LITE ,lecteur MMDB pur PHP
Intégration d'un lecteur MMDB (MaxMind Binary Database) complet en PHP pur, compatible DB-IP Country LITE (sans inscription) et MaxMind GeoLite2. Résolution en O(log n) via l'arbre binaire MMDB. Support des adresses IPv4 et IPv6. Trois modes d'affichage des drapeaux : emoji, PNG, SVG.
Fonctionnalité Performance
Avril 2026 · v2.5.0
12 catégories de menaces + graphiques séparés menaces/spam
Extension du moteur de détection de 7 à 12 catégories. Nouvelles catégories : Log4Shell (CVE-2021-44228), traversal de chemin avancé avec encodages multiples, scanners CMS (Drupal, Joomla, PrestaShop). Les graphiques d'évolution des menaces et du spam sont maintenant deux courbes séparées et synchronisées.
Sécurité Graphiques
Mars 2026 · v2.4.0
47+ bots identifiés ,bots IA, sociaux, monitoring
Ajout de 14 nouvelles entrées dans la base de bots : GPTBot (OpenAI), ClaudeBot (Anthropic), PerplexityBot, Discordbot, TelegramBot, WhatsApp, ia_archiver (archive.org), Slurp (Yahoo), SeznamBot, Yeti (Naver), Mail.RU_Bot, Meta-ExternalAgent, Google-Extended, StatusCake. Chaque bot dispose d'une couleur distinctive.
Bots IA
Février 2026 · v2.3.0
Tableau de sessions AJAX paginé avec tri multi-colonnes
Refonte complète du tableau de sessions. Pagination AJAX de 40 sessions par page (configurable). Tri par dernier accès, pages vues, volume, durée. Filtres Humains/Bots/Menaces conservés lors de la navigation. Premier rendu en moins de 800 ms pour 50 000 lignes de log.
Performance AJAX
Janvier 2026 · v2.2.0
Sauvegarde/restauration de configuration JSON côté client
Export de toute la configuration en fichier JSON téléchargé localement. Import en un clic via FileReader. Aucun stockage serveur. Le fichier exporté contient les préférences utilisateur uniquement ,jamais de données de log. Compatible avec toutes les instances Seelog 2.2+.
Configuration
Décembre 2025 · v2.1.0
Filtres d'URL personnalisables ,préfixes et regex
Système de filtres d'URL configurable depuis l'interface : préfixes de chemin, suffixes d'extension, expressions régulières complètes. Affichage du nombre de requêtes filtrées par règle. Filtre pré-défini "assets statiques" en case à cocher. N'affecte jamais la détection des menaces.
Sécurité Fonctionnalité
Novembre 2025 · v2.0.0
Support natif .tar.gz ,lecteur tar/gz pur PHP
Implémentation d'un lecteur tar/gz en PHP pur (formats GNU et POSIX ustar) sans dépendance à l'extension phar ni au binaire tar système. Lecture en streaming avec buffer 64 Ko ,consommation mémoire constante quelle que soit la taille de l'archive. Compatibilité PHP 5.3 garantie. Liste des formats supportés : .log, .log.1, .log.N, .log.gz, .log.N.gz, .log.tar.gz.
Fonctionnalité Compatibilité
Octobre 2025 · v1.9.0
Graphiques d'évolution par bot avec sélecteur interactif
Ajout d'un graphique Chart.js dans la section bots avec pastilles colorées cliquables. Sélection individuelle ou cumulative des bots. Synchronisation de la granularité (jour/mois/année) avec le sélecteur global. Injection des données par bloc script PHP au chargement, mise à jour AJAX JSON lors des changements.
Bots Graphiques

Prêt à analyser vos logs ?

Téléchargez Seelog, copiez-le sur votre serveur, ouvrez votre navigateur. C'est tout.