Exporter vos journaux nginx ou Apache pour les analyser
Où vivent les fichiers, quel format vérifier avant de les envoyer, comment en extraire une période précise et comment traiter la rotation quotidienne.
L’équipe NessFlow (Ingénierie produit, NessFlow) · · 3 min de lecture
Écran réel du produit, rendu sur un jeu de démonstration fictif : les chiffres affichés ne sont ceux d’aucun client.
Vous administrez le serveur, donc vous avez déjà tout ce qu'il faut. La difficulté n'est pas l'accès, c'est de repartir avec le bon fichier, au bon format, sur la bonne période.
Où vivent les fichiers
Sur une installation nginx classique, les accès s'écrivent dans /var/log/nginx/access.log. Sur Apache, c'est /var/log/apache2/access.log sur les distributions dérivées de Debian, et /var/log/httpd/access_log sur celles dérivées de Red Hat.
Si votre serveur héberge plusieurs sites, chaque hôte virtuel a souvent son propre fichier. Vérifiez la directive access_log de votre configuration nginx, ou CustomLog côté Apache, pour savoir lequel correspond au domaine que vous auditez. Prendre le mauvais fichier ne produit pas d'erreur, seulement une analyse qui décrit un autre site.
Vérifier le format avant d'envoyer
Le format par défaut des deux serveurs s'appelle combined. Une ligne y ressemble à ceci, adresse en tête, requête au milieu, agent utilisateur en fin de ligne entre guillemets.
203.0.113.10 - - [12/Jul/2026:04:11:02 +0000] "GET /produit/ HTTP/1.1" 200 8214 "https://exemple.fr/" "Mozilla/5.0 (compatible; Googlebot/2.1)"
Le point à contrôler est la présence de ce dernier champ. C'est lui qui porte l'agent utilisateur, donc c'est lui qui permet de distinguer un robot d'un humain. Le format common, plus ancien, s'arrête au nombre d'octets et ne le contient pas : avec lui, la moitié de la valeur d'une analyse de journaux disparaît, puisque tout le trafic est compté humain. Si vos lignes s'arrêtent après le code de statut et la taille, changez la directive log_format avant de collecter la période qui vous intéresse.
Extraire une période
La rotation compresse les fichiers de la veille en access.log.1, access.log.2.gz, et ainsi de suite. Un mois complet est donc éclaté en une trentaine de fichiers.
Concaténez-les dans l'ordre chronologique, du plus ancien au plus récent, puis compressez le résultat.
zcat -f /var/log/nginx/access.log.*.gz /var/log/nginx/access.log.1 /var/log/nginx/access.log | gzip > journaux-juillet.log.gz
L'ordre n'a pas d'importance pour l'analyse, qui lit l'horodatage de chaque ligne, mais il aide beaucoup quand vous ouvrez le fichier pour vérifier ce qu'il contient.
La rotation, et ce qu'elle emporte
La configuration logrotate par défaut conserve souvent deux semaines. Si vous voulez comparer deux mois, vérifiez la valeur rotate de /etc/logrotate.d/nginx avant de découvrir que la période demandée a été supprimée. Augmenter cette valeur ne coûte que de l'espace disque, et les journaux compressés en occupent peu.
Ensuite
Le fichier compressé se dépose tel quel dans l'assistant d'import, sans le décompresser. L'analyse en tire la fréquentation par robot, la profondeur réellement explorée et les pages demandées qui répondent en erreur.
Pour ce qu'on peut en conclure, et pour les limites de l'exercice, la procédure complète est détaillée dans notre guide sur l'analyse de journaux serveur, et le module lui-même est décrit sur la page Analyse de logs.