Problème

Vous cherchez à comprendre pourquoi votre crawl a baissé ?

Vos URLs en 301 sont elles toujours crawlées ?

Besoin de faire un export des URLs en 302 suite à la dernière mise à jour du site ?

On a parfois besoin de rentrer dans le dur. Mais comment faire ?

Vous avez essayé Excel, mais les limites sont vite atteintes. Le site important sur lequel vous travaillez génère des fichiers de logs imposants tous les jours.

L’éditeur de texte vous rend fou et freeze après quelques minutes de travail …

On a parfois besoin d’outils pour lesquels la taille du fichier ne pose pas de problème.

Les commandes unix

La plupart de ces commandes sont développées depuis plusieurs décennies, les bug y sont donc très rares, pour ne pas dire absents.

En plus avec le temps, le code a pu être optimisé, bref, elles font bien et vite leur travail. Elles peuvent traiter des fichiers volumineux, voir même, ne pas se soucier de ce détails qu’est la taille du fichier car ce dernier est traité ligne par ligne et non dans son ensemble.

En plus, si vous utilisez ces commandes sur un serveur présent sur internet, généralement, la bande passante sera meilleure que celle de votre poste de travail. Ce petit plus n’est pas négligeable lorsqu’on travaille sur des fichiers volumineux.

Console Unix

Pas de panique si vous n’êtes pas très à l’aise avec UNIX.

Des solutions existent, faciles d’accès.

Par exemple, certains hébergeurs Web proposent dans leur offre d’hébergement mutualisé un accès ssh.

Vous profitez ainsi des avantages du monde unix (la puissance des commandes et du shell) sans les inconvénients (la maintenance du système).

Pour ne pas le citer, ovh dans son offre à 4.99 € / mois inclus un accès ssh et 250 Go de disque, de quoi bien débuter. Sinon, bien sur, si vous louez déjà un serveur, ça fera très bien l’affaire.

Une autre option est d’installer cygwin sur windows (plus d’infos par là : http://www.cygwin.com/) – moi, j’aime pas trop.

Accès unix

Une fois que vous avez un serveur sous unix, il vous faut vous connecter dessus.

Pour ma part j’utilise le logiciel putty (http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html)

OVH à mis en place un guide bien fait pour l’utilisation de base de putty : http://guides.ovh.com/UtilisationPutty

Fichier de logs

Vous pouvez télécharger les fichiers de logs que j’ai utilisé pour faire ces tests.

C’est par là, télécharger fichier de logs pour initiation Analyse de Logs

Les commandes

grep

Dans sa version de base cette commande permet de trouver les lignes qui contiennent une expression. Par exemple, pour trouver les lignes qui contiennent « Googlebot » dans le fichier access-log la commande sera la suivante :

grep "Googlebot" access-log

Autre exemple, pour trouver les pages qui ont généré une visite depuis Google (ici, on utilise une regex):

grep "google\..*q=.*" ./access.log

J’ai écrit ce mot affreux de regex. Je ne vais pas entrer dans les détails, c’est hors scope de cet article. Mais, les regex sont des chaines de caractères qui décrivent des chaines de caractères « possibles ».

C’est extrêmement pratique dans la recherche de texte. Revenons à nos moutons, le format de la commande grep est donc le suivant :

grep [options] [motif] [fichier]

[options] : généralement je ne mets rien (sauf l’exemple mentionné plus bas),

[motif] : c’est la chaine de caractères que l’on cherche,

fichier : c’est le fichier où l’on cherche notre chaine de caractère, donc, notre fichier de logs.

Une astuce sympa est d’utiliser l’option -F qui permet de faire une recherche « exacte », on accélère ainsi grandement le temps de traitement ce qui est très appréciable sur de gros fichiers.

Cette astuce fonctionne sur la recherche du crawl, pas sur la recherche des pages ayant généré des visites (c’est une regex, donc pas une recherche exacte).

résultat de la commande grep

résultat de la commande grep

exercice

Quelle est la commande pour trouver toutes les lignes du fichier access.log qui contiennent « .php »

cut

cut permet de « couper » les lignes d’un fichier.

On lui donne : le délimiteur (là où il doit couper), le(s) numéro(s) du(des) champs à extraire et le fichier sur lequel il doit travailler.

Par exemple :

unix cut par l'exemple

unix cut par l’exemple

cut -d " " -f7 access.log

découpe les lignes suivant les espaces et extrait le champs 7 du fichier access.log

Ce qui nous donne quelque chose comme ça :

unix cut

unix cut

Si on veut prendre plusieurs champs, il suffit de les mettre à la suite :

cut -d " " -f7,9 access.log

Découpe les lignes suivant les espaces et récupère les champs 7 et 9 (ici, l’URL et le code réponse).

Exercice : découper les lignes du fichier access.log suivant les points (« . ») et récupérer le second champs.

Pipe

Le « pipe » permet d’enchaîner les commandes. C’est un des trucs magiques d’UNIX. Il prend la forme « | » (Alt Gr – 6 sur un pc)

Par exemple, sélectionner les lignes contenant Googlebot et ne garder que l’URL (le champs 7 dans notre cas).

grep "Googlebot" ./access.log | cut -d " " -f7

La commande à droite du pipe s’exécute sur le résultat de la commande qui est à gauche du pipe.

La magie continue avec la possibilité d’enchaîner les pipes … Ainsi cette ligne de commande sélectionne les lignes contenant Googlebot, extrait le champs 7 (l’URL) et découpe cette url sur le point (« . ») pour ne prendre que le second champs (donc l’extension du fichier) :

grep "Googlebot" ./access.log | cut -d " " -f7 | cut -d "." -f2

En d’autres termes, quels type de pages sont crawlés par Google ? html, php, gif, jpg ?

C’est bon, vous l’avez ?

Exercice : Trouver les lignes qui contiennent « Googlebot » ET qui contiennent « 66.249 »

Les serveurs Google ont une adresse IP qui commence par « 66.249 », si on veut être sûr que notre Googlebot vient bien de Mountain View, on doit donc faire ce double contrôle.

sort

Cette commande permet de trier un fichier (ou le résultat d’une autre commande si dans un pipe). Par défaut le tris est basique, par classement alphabétique.

sort - classement alphabétique

sort – classement alphabétique

Si on reprend notre exemple précédent, on sélectionne les lignes contenant Googlebot, on extrait l’url (le champs 7) et on trie le tout :

grep "Googlebot" ./access.log | cut -d " " -f7 | sort

Les URLs sont classées par ordre alphabétique.

uniq

La commande uniq permet de dé-dupliquer les lignes d’un fichier.

Elle a la particularité de devoir venir après une commande sort.

Donc, pour de-dupliquer les lignes du fichier acces.log on procède ainsi :

sort acces.log | uniq

Si vous ne faites pas sort avant, le résultat est foireux, donc, TOUJOURS faire un sort avant un uniq, ok ? uniq possède une option que j’aime beaucoup, -c qui de-duplique et nous donne le nombre de duplicate. Ce qui s’écrit ainsi :

sort acces.log | uniq -c

Combien de fois a été crawlée notre robots.txt ?

grep "Googlebot" ./access.log | grep "robots.txt" | cut -d " " -f7 | sort | uniq -c

exercice : Quelle suite de commandes pour savoir combien de fois chaque page a été crawlée ?

wc

La commande wc (pour word count – comptage de mot) permet de compter. Dans sa forme standard wc renvoi trois informations, le nombre de lignes, le nombre de mot et le nombre d’octets d’un fichier. exemple :

wc access.log
wc - sans option

wc – sans option

Je l’utilise quasiment toujours avec l’option « -l » qui ne renvoie que le nombre de lignes.

wc -l access.log
wc avec l'option "-l"

wc avec l’option « -l »

Combien de pages distinctes ont été crawlées dans notre fichier access.log ?

grep "Googlebot" access.log | cut -d " " -f7 | sort | uniq | wc -l

Redirection

Enfin, pour terminer le travail, viennent les redirections (de sortie).

Ce n’est pas une commande à proprement parler, mais ça reste très très pratique. Une autre magie d’UNIX (qui existe aussi en dos je crois).

Par exemple, on a listé les pages uniques crawlées de notre fichier de log, et on en a plusieurs milliers. Le traitement prend du temps, on aimerait bien garder le résultat de la commande pour pouvoir l’examiner calmement.

Les redirections sont là pour nous. Les redirections de sortie peuvent prendre deux formes : « > » ou « >> » Elles redirigent la sortie (l’affichage ») vers un fichier par exemple.

Ce qui nous donne, extraire les lignes contenant Googlebot du fichier access.log et créer un fichier crawl-googlebot.txt avec le résultat :

grep "Googlebot" access.log > crawl-googlebot.txt

La subtilité entre « > » et « >> » vient du fait que :

« > » écrase le fichier cible s’il existe et le crée sinon.

« >> » enrichie le fichier cible s’il existe et le crée sinon.

Exercice :

Extraire du fichier access.log les urls crawlées et les codes réponses associées, créer un fichier url-crawles.txt avec le résultat.

En vrac

Difficile de parler d’unix sans évoquer la commande man (man comme … manuel). C’est la commande d’aide, le format :

man [nom-de-la-commande]
man grep

Et sous vos yeux ébahi s’affiche le manuel (abscons) de la commande grep.

Pas toujours évident à lire ou interpréter, les pages man peuvent être complétées par une recherche Google. « cd » c’est la commande qui permet de se déplacer d’un répertoire à un autre.

Aller dans un répertoire (qui est juste au dessus de l’emplacement actuel) :

cd repertoire_cible

Remonter d’un niveau :

cd ..

(cd point point)

Conclusion

Notre petit tour d’horizon des commandes utiles indispensables pour l’analyse de logs est presque terminé.

Avec ça, vous êtes autonome.

Le format des logs peut varier d’un site à l’autre (ou pour un même site dans le temps), ce n’est pas très grave, vous avez les outils pour bien faire.

De toute façon, les besoins varient d’un site à l’autre. Donc, l’idée est bien de comprendre ce que l’on fait et de pouvoir s’adapter.

Maintenant il faut pratiquer, pratiquer, pratiquer.

Je vous ai mis des petits exercices tout au long de l’article, n’hésitez pas à publier vos réponses en commentaires.

On va corriger tout ça ensemble, tranquillement.

Maintenant que vous avez les outils, vous allez en faire quoi ? Quels sont les premiers KPI que vous allez mesurer ?

Miseà jour – 2015-09-07 :

Par ailleurs, j’édite une solution d’analyse de logs orientée SEO : kelo.gs

A propos de l'auteur :

Consultant SEO avec plus de 10 ans d’expérience. J'ai travaillé pour différentes agences parisiennes de SEO. Depuis 2012 je suis à mon compte et j'optimise le référencement naturel de mes clients.


2 Comments » for Maitrisez l’analyse de logs : les 5 commandes indispensables pour devenir autonome
  1. 80232@supinfo.com' othmane dit :

    Bonjour Paul,
    Sympa ton article !

    Quels sont les premiers KPI à suivre ?

    – Le taux de page active sur une durée par exemple de 30 jours pour vérifier les pages dead.
    – Les URLs en 404,302 pour les corriger
    – Le nombre de hit vs nombre de visites par dimensions des URLs pour savoir les catégories qui consomment beaucoup de crawl et si cela se traduit par beaucoup de visites ?

    Pour les exercices allez je me lance sauf le troisième :

    -Exerice 1 : Quelle est la commande pour trouver toutes les lignes du fichier access.log qui contiennent « .php »

    grep « .php » access.log

    -Exercice 2: Exercice : découper les lignes du fichier access.log suivant les points (« . ») et récupérer le second champs.

    cut -d « . » -f2 access.log

    -exercice 4 : Quelle suite de commandes pour savoir combien de fois chaque page a été crawlée ?

    grep « Googlebot » ./access.log | cut -d  »  » -f7 | sort | uniq -c

    -exercice 5 : Extraire du fichier access.log les urls crawlées et les codes réponses associées, créer un fichier url-crawles.txt avec le résultat.

    grep « Googlebot » ./access.log | cut -d  »  » -f7,9 > url-crawles.txt

    Perso j’utilise WebLog Expert Lite ou Apache Logs Viewer, et merci encore pour ce petit tour d’horizon.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*