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.
.htaccess) ou une restriction IP avant de le déployer en production.
.htaccess pour restreindre l'accès..htaccess : Require ip 192.168.1.0/24 pour n'autoriser l'accès qu'depuis votre réseau local ou VPN.
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
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.
/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.
Mise à jour automatique mensuelle
Affichage des drapeaux
Seelog supporte trois modes d'affichage des drapeaux de pays, configurables dans l'interface :
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.
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
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 :
Comportement des filtres
/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.
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.