{"id":381,"date":"2020-10-07T14:49:45","date_gmt":"2020-10-07T14:49:45","guid":{"rendered":"https:\/\/cinnk.com\/index.php\/2020\/10\/07\/poor-old-man-log-analyzer-juillet-2016\/"},"modified":"2020-10-07T14:49:45","modified_gmt":"2020-10-07T14:49:45","slug":"poor-old-man-log-analyzer-juillet-2016","status":"publish","type":"post","link":"https:\/\/cinnk.com\/fr\/poor-old-man-log-analyzer-juillet-2016\/","title":{"rendered":"Poor old man log analyzer &#8211; juillet 2016"},"content":{"rendered":"<p>Nous allons voir<strong> comment faciliter l&rsquo;indexaction<\/strong> de votre site par les moteurs de recherche avec l&rsquo;utilisation d&rsquo;un <strong>sitemap<\/strong> ou <strong>plan de site<\/strong> en fran\u00e7ais.<\/p>\n<p><!--more--><br \/>\nSi vous g\u00e9rez votre site internet avec un minimum de rigueur (vous le faites, sinon vous ne me liriez pas en ce moment, n&rsquo;est ce pas ?), vous utilisez d\u00e9j\u00e0 tr\u00e8s certainement toute une panoplie d&rsquo;outils pour savoir ce qui se passe sur le dit site : Google Search Console (anciennement Google Web Tools), Google Analytics, sans doute \u00e9galement divers outils propos\u00e9s par votre h\u00e9bergeur, parmi les plus fr\u00e9quents, on peut noter awStats, Webalizer et bien d&rsquo;autres encore &#8230;<\/p>\n<p>&nbsp;Si ces outils permettent d&rsquo;avoir une vue synth\u00e9tique de l&rsquo;activit\u00e9, certains sont trop globalis\u00e9s (c&rsquo;est bien de savoir le nombre d&rsquo;erreurs 404 d\u00e9tect\u00e9es mais quel int\u00e9r\u00eat si l&rsquo;on n&rsquo;a pas acc\u00e8s au contexte et aux d\u00e9tails ?), d&rsquo;autres sont extraordinairement fouill\u00e9s, mais \u00e0 moins de consulter des dizaines de pages de documentation, impossible de s&rsquo;y retrouver facilement dans Google Analytics, sauf \u00e0 en faire son m\u00e9tier.<br \/>\nAlors, une fois encore, je vais vous proposer de mettre les mains dans le cambouis, et de vous &lsquo;fabriquer&rsquo; votre outil d&rsquo;analyse de votre site internet \u00e0 vous. Chaque serveur internet Apache ou IIS (leur contenu ne diff\u00e8re que par l&rsquo;ordre des param\u00e8tres et l&rsquo;ajout pour IIS du code erreur ) met \u00e0 votre disposition ce que l&rsquo;on appelle des logs d&rsquo;activit\u00e9s. Ces logs sont en fait l&rsquo;enregistrement ligne apr\u00e8s ligne de tous les \u00e9changes HTTP entrant ou sortant, passant par votre site. Je vous pr\u00e9viens de suite, si vous comptabilisez plusieurs milliers de connexions par jour, ma m\u00e9thode est clairement sous-dimensionn\u00e9e par rapport \u00e0 vos besoins et ne vous satisfera pas. Il existe des tas d&rsquo;outils, certains payants, d&rsquo;autres gratuits pour faire la m\u00eame chose en mieux, \u00e0 une \u00e9chelle plus &#8230; industrielle, mais l&rsquo;\u00e9crire soi-m\u00eame est (forc\u00e9ment) plus formateur et motivant.<br \/>\n &nbsp;<br \/>\n {loadposition abo-magazine}<br \/>\nBases et Principes.<br \/>\nQue sont donc ces fichiers logs dont je viens de vous parler ? Si vous ignoriez m\u00eame jusqu&rsquo;\u00e0 leur existence, je vous propose de jeter un \u0153il sur la &lsquo;loi&rsquo; les concernant. La documentation Apache elle-m\u00eame, traduite en fran\u00e7ais sur le site ad-hoc est disponible \u00e0 cet emplacement : fichiers journaux Apache 2.5. Si le contenu et l&rsquo;ordre des informations est sp\u00e9cifi\u00e9 de base, votre h\u00e9bergeur est \u00e0 m\u00eame de red\u00e9finir le format d&rsquo;origine pour l&rsquo;adapter \u00e0 ses souhaits et besoins, en configurant le module mod_log_config. La m\u00e9thode d\u00e9crite ci-apr\u00e8s s&rsquo;appuie sur les fichiers logs fournis par mon h\u00e9bergeur : Siteground. Je l&rsquo;ai valid\u00e9 avec des exemplaires de fichiers journaux HTTP en provenance des h\u00e9bergeurs 1and1 et OVH, deux des principaux h\u00e9bergeurs de &lsquo;petits&rsquo; sites internet en France. Des journaux en provenance d&rsquo;autres h\u00e9bergeurs pourront n\u00e9cessiter des r\u00e9glages sp\u00e9cifiques.<br \/>\nLa premi\u00e8re \u00e9tape consiste bien entendu \u00e0 r\u00e9cup\u00e9rer les fichiers logs en question. Votre h\u00e9bergeur les fournit en g\u00e9n\u00e9ral quotidiennement. Siteground met \u00e0 ma disposition un fichier journalier et une r\u00e9capitulation mensuelle des logs d&rsquo;acc\u00e8s \u00e0 mon site, des logs d&rsquo;erreurs et \u00e9galement des logs FTP &#8230; ceux qui nous int\u00e9ressent en l&rsquo;occurrence sont uniquement les logs d&rsquo;acc\u00e8s. La m\u00e9thode pour r\u00e9cup\u00e9rer les fichiers correspondants, est d\u00e9pendante de votre h\u00e9bergeur, en ce qui me concerne une entr\u00e9e du  cPanel me permet de transf\u00e9rer ces fichiers en toute s\u00e9curit\u00e9, mais il est tout \u00e0 fait possible bien entendu d&rsquo;aller les chercher via FTP. Siteground les fournissant au format compress\u00e9 .gz, l&rsquo;\u00e9tape suivante consiste \u00e9videmment \u00e0 les d\u00e9compresser. Ceci \u00e9tant fait, jeter un \u0153il sur leur contenu est tout aussi \u00e9videmment indispensable et &#8230; d\u00e9cevant :<\/p>\n<p>Je vous avais pr\u00e9venu. Tout ce qui entre ou sort de votre site est enregistr\u00e9 \u00e0 raison d&rsquo;une ligne par \u00e9change au protocole HTTP et pour une seule page affich\u00e9e, il peut y avoir des dizaines de requ\u00eates et donc de lignes. Il va donc falloir commencer par y mettre de l&rsquo;ordre car il est absolument impossible de lire le fichier de haut en bas de mani\u00e8re naturelle.<br \/>\nLe contenu.<br \/>\nComme dit pr\u00e9c\u00e9demment, pour chaque requ\u00eate HTTP nous allons trouver une ligne dans le fichier log. Cette ligne est constitu\u00e9e des informations suivantes s\u00e9par\u00e9es l&rsquo;une de l&rsquo;autre par un espace :<\/p>\n<p>adresse IP \u00e0 partir de laquelle a \u00e9t\u00e9 \u00e9mise la requ\u00eate<br \/>\nidentit\u00e9 (RFC 1413) du client d&rsquo;origine, peu fiable, l&rsquo;information est remplac\u00e9e par mon h\u00e9bergeur par un tiret<br \/>\nidentifiant utilisateur de la personne \u00e0 l&rsquo;origine de la requ\u00eate, remplac\u00e9e ici aussi par un tiret pour les m\u00eames raisons<br \/>\ndate et heure \u00e0 laquelle la requ\u00eate a \u00e9t\u00e9 re\u00e7ue et trait\u00e9e.<br \/>\nla requ\u00eate elle-m\u00eame plac\u00e9e entre guillemets<br \/>\ncode statut de la requ\u00eate (200 si tout va bien, 404 pour une donn\u00e9e non trouv\u00e9e), la liste des codes peut \u00eatre trouv\u00e9e sur le site de la W3C.<br \/>\ntaille de l&rsquo;information retourn\u00e9e au client en nombre d&rsquo;octets<br \/>\nurl du referrer, c&rsquo;est \u00e0 dire de la page \u00e0 l&rsquo;origine de la requ\u00eate (votre site si la requ\u00eate est d\u00e9clench\u00e9e par un lien de menu, ou une url \u00e9trang\u00e8re pour une requ\u00eate entrante, ou un tiret s&rsquo;il n&rsquo;y a pas de referrer). l&rsquo;information est plac\u00e9e entre guillemets<br \/>\nuser-agent du navigateur \u00e0 l&rsquo;origine de la requ\u00eate<\/p>\n<p>Maintenant que nous avons vu ce que mon h\u00e9bergeur met \u00e0 ma disposition, il nous reste \u00e0 voir ce que nous pouvons esp\u00e9rer en faire. Pour r\u00e9pondre \u00e0 cette question, il nous faut \u00e0 d\u00e9faut d&rsquo;un cahier des charges, \u00e0 minima une expression de besoins. Si l&rsquo;on jette \u00e0 la va-vite les besoins que nous pouvons \u00e9mettre pour parcourir nos fichiers logs r\u00e9guli\u00e8rement, nous pouvons d\u00e9j\u00e0 grossi\u00e8rement dire qu&rsquo;il est souhaitable de pouvoir :<\/p>\n<p>trier le fichier des acc\u00e8s selon un argument \u00e9l\u00e9mentaire en fonction de nos besoins<br \/>\norganiser et &lsquo;lire&rsquo; les requ\u00eates selon diff\u00e9rents crit\u00e8res variables<br \/>\nextraire rapidement les informations qui nous semblent pertinentes en fonction de nos besoins pr\u00e9sents<br \/>\nchercher et trouver les diff\u00e9rentes erreurs sur nos pages, les compter et analyser leur contexte<br \/>\ncomptabiliser les diff\u00e9rentes op\u00e9rations effectuer par nos utilisateurs et les classifier<br \/>\nrechercher et organiser les acc\u00e8s en fonction des pages cibles parcourues par les utilisateurs<br \/>\nrep\u00e9rer rapidement les &lsquo;fake&rsquo;, robots connus et autoris\u00e9s parmi les autres bots<br \/>\nconna\u00eetre l&rsquo;origine des appels entrants vers nos pages<\/p>\n<p>Comme point de d\u00e9part d&rsquo;une &lsquo;application&rsquo; de lecture et traitement des logs Apache, ce n&rsquo;est d\u00e9j\u00e0 pas si mal et nous serons tr\u00e8s satisfait de pouvoir y r\u00e9pondre avec des m\u00e9thodes \u00e0 la port\u00e9e de tous (et \u00e0 ma port\u00e9e pour commencer).<br \/>\nIl n&rsquo;y a, \u00e0 mon sens que deux fa\u00e7ons de r\u00e9pondre \u00e0 cette expression de besoin :<\/p>\n<p>cr\u00e9er une base de donn\u00e9es et s&rsquo;appuyer sur mes articles pr\u00e9c\u00e9dents parlant des requ\u00eates SQL dans Joomla!.<br \/>\nutiliser un outil courant et abordable pour organiser nos donn\u00e9es.<\/p>\n<p>Nous allons privil\u00e9gier la seconde solution et nous appuyer sur Excel pour traiter notre fichier log journalier.<br \/>\n{loadposition abo-magazine}<br \/>\nRetroussons nos manches et au boulot&nbsp;<br \/>\nPour r\u00e9pondre \u00e0 notre expression de besoin, nous allons commencer par ouvrir Excel 2007 et charger notre fichier log de mani\u00e8re standard. (Avec Excel 2003, \u00e0 quelques restrictions pr\u00eat, nous pourrions effectuer la m\u00eame approche, mais avec des limitations tr\u00e8s forte de nombre de lignes \u00e0 traiter entre autre).<\/p>\n<p>Apr\u00e8s avoir s\u00e9lectionn\u00e9 le fichier dans l&rsquo;explorateur interne d&rsquo;Excel et cliqu\u00e9 sur &lsquo;Ouvrir&rsquo;, remplir l&rsquo;assistant d&rsquo;importation avec les options suivantes :<br \/>\nonglet 1\/3 de l&rsquo;assistant : choisir &lsquo;d\u00e9limit\u00e9&rsquo;, Commencer l&rsquo;importation \u00e0 la ligne 1 et utiliser le format MS-DOS (PC-8)<br \/>\nonglet 2\/3 cocher Espace comme d\u00e9limiteur, conserver l&rsquo;option Identificateur de texte est le guillemet (\u00ab\u00a0)<br \/>\nValider sans modification l&rsquo;onglet 3\/3 et cliquer sur le bouton Terminer <\/p>\n<p>Les colonnes 2 et 3 correspondent aux informations peu fiables d&rsquo;identification de l&rsquo;utilisateur et ne pr\u00e9sentent aucun int\u00e9r\u00eat. Plut\u00f4t que de les supprimer sans autre forme de proc\u00e8s, nous allons conserver la colonne B et masquer la colonne C (clic-droit sur l&rsquo;en-t\u00eate de colonne puis masquer).<br \/>\nPour commencer la mise en forme nous allons s\u00e9lectionner la ligne 1 et ins\u00e9rer une ligne vierge (clic-droit sur l&rsquo;en-t\u00eate de ligne puis Insertion) pour y saisir nos titres de colonnes. Suggestion :<br \/>\n IP (colonne A)<br \/>\n IP (colonne B dont nous motiverons ult\u00e9rieurement l&rsquo;usage)<br \/>\n Time (colonne D)<br \/>\n D\u00e9calage (colonne E). En th\u00e9orie, le d\u00e9calage fait partie de l&rsquo;information date-heure de la requ\u00eate, mais le traitement des donn\u00e9es bas\u00e9 sur le s\u00e9parateur &lsquo;espace&rsquo; en fait un champ \u00e0 part enti\u00e8re.<br \/>\n Requ\u00eate (colonne F)<br \/>\n Status (colonne G)<br \/>\n Longueur (colonne H)<br \/>\n Referrer (colonne I)<br \/>\n User-agent (colonne J)<\/p>\n<p>Nous allons maintenant cr\u00e9er une nouvelle donn\u00e9e (colonne K), constitu\u00e9e de la concat\u00e9nation de l&rsquo;adresse IP (colonne A1) et du User-agent (colonne H1) en effectuant la manipulation suivante :<br \/>\ndans la colonne K1 taper la formule suivante : =CONCATENER(A1; \u00ab\u00a0-\u00ab\u00a0;H1)<br \/>\nApr\u00e8s avoir valid\u00e9 la formule, la cellule contient d\u00e9sormais le texte : IP-User-agent<br \/>\nS\u00e9lectionner avec la souris, la cellule K1 et d\u00e9placer le pointeur de la souris vers le bord bas droite de la cellule. Le pointeur de la souris se transforme en signe +, effectuez un double-clic \u00e0 cet emplacement. La formule ci-dessus est recopi\u00e9e et calcul\u00e9e instantan\u00e9ment sur toutes les cellules non vides de la colonne K.<br \/>\nLa colonne K contient d\u00e9sormais pour chaque ligne, la concat\u00e9nation du contenu des champs IP et&nbsp; User-agent de chaque requ\u00eate HTTP du fichier log. Nous utiliserons cette information comme identificateur unique de chaque source de requ\u00eate HTTP. Ce sera en quelque sorte notre identifiant de session.<\/p>\n<p>Nous allons \u00e9galement cr\u00e9er une nouvelle donn\u00e9e (colonne L) en pla\u00e7ant dans la cellule L1 le libell\u00e9 Total, dans la cellule L2 la valeur 0. En partant de la cellule L2, nous allons appliquer la m\u00eame m\u00e9thode que ci-dessus et dupliquer le contenu de la cellule pour toutes les lignes utiles de la feuille de calcul.<br \/>\nNous allons maintenant s\u00e9lectionner en une seule fois les cellules A1 \u00e0 L1, puis cliquer sur l&rsquo;onglet Donn\u00e9es afin de l&rsquo;ouvrir et choisir l&rsquo;op\u00e9ration Trier.<br \/>\nValider ensuite l&rsquo;option \u00e9tendre la s\u00e9lection (ceci peut \u00eatre \u00e9vit\u00e9 en s\u00e9lectionnant les en-t\u00eates de colonnes A \u00e0 L \u00e0 la place des cellules A1 \u00e0 L1)<br \/>\nV\u00e9rifier que la case \u00e0 cocher Mes donn\u00e9es ont des en-t\u00eates est bien coch\u00e9e, choisir IP-User-agent comme premi\u00e8re colonne de tri, cliquer sur Ajouter un niveau (en haut \u00e0 gauche) et choisir Time comme second crit\u00e8re de tri, valider en cliquant sur OK et attendre que le tableur ait fini de trier les donn\u00e9es.<\/p>\n<p>&nbsp;<\/p>\n<p>Nous avons d\u00e9sormais un fichier log ordonn\u00e9, mais encore peu lisible et pas vraiment pratique d&rsquo;utilisation. Nous allons nous efforcer d&rsquo;y rem\u00e9dier et pour commencer, nous avons deux colonnes IP dont une rest\u00e9e \u00e0 la valeur &#8211; (tiret) d&rsquo;origine. Am\u00e9liorons tout cela et rendons cette colonne utile :<br \/>\nCommen\u00e7ons par cliquer dans la cellule B2 pour y recopier la formule : =LIEN_HYPERTEXTE(CONCATENER(\u00ab\u00a0http:\/\/ip-lookup.net\/index.php?ip=\u00a0\u00bb;A2);A2), ce qui a pour r\u00e9sultat de nous afficher dans la cellule B2, la m\u00eame adresse IP que celle affich\u00e9e dans la cellule A2, mais il s&rsquo;agit cette fois-ci d&rsquo;un lien hypertexte d\u00e9clenchant l&rsquo;appel d&rsquo;un site internet bien connu avec l&rsquo;adresse IP concern\u00e9e en param\u00e8tre de l&rsquo;url.<br \/>\nReproduisons dans toute la colonne B cette formule de calcul en r\u00e9utilisant la manipulation d\u00e9crite au \u00a7D-3.<br \/>\nCeci fait, la colonne A n&rsquo;a plus aucune utilit\u00e9 (mais ne doit pas pour autant \u00eatre supprim\u00e9e : les colonnes B et K y font r\u00e9f\u00e9rence). Nous pouvons la cacher en effectuant un clic-droit sur l&rsquo;en-t\u00eate de la colonne suivi du choix masquer.<\/p>\n<p>Continuons \u00e0 am\u00e9liorer notre feuille de calcul et s\u00e9lectionnons la totalit\u00e9 de nos donn\u00e9es, ceci peut \u00eatre fait de deux mani\u00e8res :<br \/>\nen cliquant sur la petite case en haut \u00e0 gauche \u00e0 l&rsquo;intersection des en-t\u00eates de ligne et des en-t\u00eates de colonnes<br \/>\nen cliquant dans la cellule B1 et en appliquant les combinaisons de touche Ctrl+shift+fl\u00e8che-basse suivi de Ctrl+shift+fl\u00e8che-droite<\/p>\n<p>Nos donn\u00e9es \u00e9tant s\u00e9lectionn\u00e9es, nous allons maintenant reprendre l&rsquo;onglet Donn\u00e9es et s\u00e9lectionner l&rsquo;op\u00e9ration Sous-Total. Dans le formulaire Sous-Total, choisir :<br \/>\n A chaque changement de s\u00e9lectionner dans la liste : IP-User-agent<br \/>\n Utiliser la fonction : Nombre<br \/>\n Ajouter un sous-total \u00e0 s\u00e9lectionner dans la liste : Total<br \/>\nV\u00e9rifier que les cases \u00e0 cocher Remplacer les sous-totaux existants et Synth\u00e8se sous les donn\u00e9es sont bien coch\u00e9es<br \/>\nCliquer sur OK et attendre que Excel ait finit de recalculer la page (S&rsquo;il y a beaucoup de lignes, cela peut prendre &#8230; un certain temps ! Il y a une barre de progression affich\u00e9e dans la barre de status du tableur)<\/p>\n<p>Excel a g\u00e9n\u00e9r\u00e9 un plan (cases d&rsquo;indentations 1 &#8211; 2 &#8211; 3 \u00e0 gauche des en-t\u00eates de ligne), ajout\u00e9 un sous-total \u00e0 chaque rupture de notre cl\u00e9 unique. Si vous avez pris soin de mettre la ligne 1 en gras &#8211; centr\u00e9, vous devez d\u00e9sormais avoir quelque chose qui ressemble \u00e0 ceci :<\/p>\n<p>Tr\u00e8s gros progr\u00e8s par rapport au point de d\u00e9part, n&rsquo;est ce pas ? Mais pas encore suffisant, nous pouvons aller beaucoup, beaucoup plus loin ! Nous allons r\u00e9gler le probl\u00e8me des totaux \u00e0 z\u00e9ro de la colonne L (il s&rsquo;agit d&rsquo;un bug de calcul des sous-totaux impossibles lorsque les cellules n&rsquo;ont pas \u00e9t\u00e9 initialis\u00e9es. C&rsquo;est pour cela que nous avons rempli la colonne de 0 \u00e0 l&rsquo;\u00e9tape \u00a7E). Il suffit de cliquer sur l&rsquo;en-t\u00eate de colonne L, choisir Format de cellule puis, dans le formulaire affich\u00e9, s\u00e9lectionner l&rsquo;onglet Nombre, puis Personnalis\u00e9e et dans la zone Type, taper pr\u00e9cis\u00e9ment :  0;-0;;@ et valider en cliquant sur OK. <\/p>\n<p>La colonne K IP-User-agent qui est notre cl\u00e9 unique de r\u00e9f\u00e9rence, ne nous est plus d\u00e9sormais d&rsquo;aucune utilit\u00e9, ou plus exactement ne n\u00e9cessite pas d\u2019occuper de la place \u00e0 l&rsquo;affichage. Nous pouvons \u00e9galement la masquer (clic-droit sur l&rsquo;en-t\u00eate de colonne puis choisir masquer)<br \/>\nApr\u00e8s cette am\u00e9lioration cosm\u00e9tique, revenons \u00e0 notre sujet d&rsquo;origine. Nous allons cliquer sur le niveau de plan 2, ce qui nous permet d&rsquo;afficher uniquement les sous-totaux programm\u00e9s \u00e0 l&rsquo;\u00e9tape \u00a7H. Pour am\u00e9liorer la visibilit\u00e9 que nous en avons, nous allons maintenant mettre ces sous-totaux en \u00e9vidence :<br \/>\nS\u00e9lectionnez les lignes sous-totaux (il n&rsquo;y a plus qu&rsquo;elles de visibles, mais les autres sont toujours pr\u00e9sentes), en tapant Alt+; (les autres modes de s\u00e9lection ne fonctionneront pas)<br \/>\nColor\u00e9s les lignes s\u00e9lectionn\u00e9es de la mani\u00e8re que vous souhaitez : Onglet Accueil, puis choisir une couleur de remplissage \u00e0 votre convenance et enfin cliquer \u00e0 nouveau sur le bouton de plan n\u00b0 3. Vous devriez voir quelque chose comme :<\/p>\n<p>Ce qui est, il faut le reconna\u00eetre d\u00e9j\u00e0 beaucoup plus agr\u00e9able \u00e0 regarder. Nous approchons de la fin et allons bient\u00f4t pouvoir profitez de nos efforts ! Il nous reste \u00e0 nous accorder la possibilit\u00e9 de s\u00e9lectionner les informations qui nous int\u00e9ressent, s\u00e9lectionnons les cellules A1 \u00e0 L1 puis l&rsquo;onglet Donn\u00e9es et l&rsquo;op\u00e9ration Filtrer (ou appliquons la combinaison de touches Ctrl+Maj+L). Excel rajoute des listes de s\u00e9lection pour chacune des en-t\u00eates de colonnes visibles et pouvons effectuer des recherches sur (par exemple) :<br \/>\nles requ\u00eates en erreur (status = 404) ou en acc\u00e8s non autoris\u00e9es (status = 403)<br \/>\ntel ou tel type de user-agent<br \/>\nles acc\u00e8s d&rsquo;url constitu\u00e9es de moins de 5 requ\u00eates (probablement des bots ou des robots plus officiels)<br \/>\nou tout autre type de s\u00e9lection de votre choix (toutes les informations sont disponibles dans le fichier journal et \u00e0 la disposition de votre imagination).<\/p>\n<p> &nbsp;<br \/>\n &nbsp;<\/p>\n<p>Ne pas oublier apr\u00e8s chaque s\u00e9lection de restaurer le contenu de la feuille en :<br \/>\neffa\u00e7ant le filtre<br \/>\net \/ ou en s\u00e9lectionnant \u00e0 nouveau le niveau de plan 3<\/p>\n<p>Pour notre confort final, il nous reste une \u00e9tape \u00e0 accomplir : S\u00e9lectionnons l&rsquo;onglet Affichage, op\u00e9ration : Figer les volets, choix : Figer la ligne sup\u00e9rieure, ce qui nous permettra de toujours garder pr\u00e9sent \u00e0 l&rsquo;affichage et les titres des colonnes et les s\u00e9lections disponibles.<\/p>\n<p>Pour aller plus loin &#8230;<br \/>\nJe suis bien conscient que pour arriver jusqu&rsquo;\u00e0 l&rsquo;\u00e9tape finale il faut effectuer un grande quantit\u00e9 d&rsquo;op\u00e9rations manuelles. S&rsquo;il fallait les effectuer chaque jour, ce ne serait pas viable et le jeu n&rsquo;en vaudrait pas la chandelle. Mais l&rsquo;avantage avec Excel est que toute op\u00e9ration qui doit \u00eatre r\u00e9p\u00e9t\u00e9e peut \u00eatre (assez) facilement automatis\u00e9e sous forme de macro ou de module VBA. Vous allez donc trouver le t\u00e9l\u00e9chargement du fichier texte contenant le contenu de la macro VBA permettant de s\u00e9lectionner le fichier log \u00e0 traiter et d&rsquo;automatiser toutes les op\u00e9rations d\u00e9crites ci-dessus. Plut\u00f4t que de fournir la feuille de macro Excel, j&rsquo;ai pr\u00e9f\u00e9r\u00e9 fournir le fichier ASCII correspondant, il vous restera donc \u00e0 le copier &#8211; coller dans une macro \u00e0 ins\u00e9rer dans votre classeur de macros personnel.<br \/>\nComme je suis loin d&rsquo;\u00eatre un expert en VBA, j&rsquo;ai abondamment comment\u00e9 cette macro, il vous sera assez facile de comprendre son fonctionnement, et probablement de l&rsquo;am\u00e9liorer en terme de performances. Celles-ci ne sont pas mauvaises au demeurant. Je dispose d&rsquo;un PC 64 bits tournant sous le syst\u00e8me d&rsquo;exploitation Windows 10 et \u00e9quip\u00e9 d&rsquo;un processeur I7 et de 16 Go de m\u00e9moire vive. La macro ci-dessus donne les r\u00e9sultats suivants pour mouliner les fichiers logs :<\/p>\n<p>environ 7 000 lignes : moins de 2 secondes<br \/>\nenviron 25 000 lignes : 15 secondes<br \/>\nenviron 130 000 lignes : 4 minutes 30 secondes<\/p>\n<p>On voit bien la progression exponentielle du temps d&rsquo;ex\u00e9cution li\u00e9 au nombre de lignes du fichier &#8230;<br \/>\nRemerciements<br \/>\nJe dois \u00e0 la v\u00e9rit\u00e9 de reconna\u00eetre que je n&rsquo;ai pas invent\u00e9 la m\u00e9thode d\u00e9crite ci-dessus. Cette m\u00e9thode est d\u00e9taill\u00e9e en anglais dans une page du blog de Webtrendsoutsider.com datant de 2013, blog affili\u00e9 plus ou moins \u00e0 la soci\u00e9t\u00e9 Webtrends  bien connue dans le monde de l&rsquo;analyse de logs. J&rsquo;ai par contre am\u00e9lior\u00e9 (un peu) la technique, compl\u00e9t\u00e9 (beaucoup) les informations mises \u00e0 disposition et \u00e9crit en totalit\u00e9 le processus d&rsquo;automatisation en VBA.<br \/>\n&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nous allons voir comment faciliter l&rsquo;indexaction de votre site par les moteurs de recherche avec l&rsquo;utilisation d&rsquo;un sitemap ou plan de site en fran\u00e7ais.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[13],"tags":[],"class_list":["post-381","post","type-post","status-publish","format-standard","hentry","category-archives"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Poor old man log analyzer - juillet 2016 | Cinnk<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/cinnk.com\/fr\/poor-old-man-log-analyzer-juillet-2016\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Poor old man log analyzer - juillet 2016 | Cinnk\" \/>\n<meta property=\"og:description\" content=\"Nous allons voir comment faciliter l&rsquo;indexaction de votre site par les moteurs de recherche avec l&rsquo;utilisation d&rsquo;un sitemap ou plan de site en fran\u00e7ais.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/cinnk.com\/fr\/poor-old-man-log-analyzer-juillet-2016\/\" \/>\n<meta property=\"og:site_name\" content=\"Cinnk\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Cinnk.formation\" \/>\n<meta property=\"article:published_time\" content=\"2020-10-07T14:49:45+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cinnk.com\/wp-content\/uploads\/2024\/10\/Logo-font.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"500\" \/>\n\t<meta property=\"og:image:height\" content=\"500\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Cinnk\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@CinnkCom\" \/>\n<meta name=\"twitter:site\" content=\"@CinnkCom\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"Cinnk\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"15 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/cinnk.com\/fr\/poor-old-man-log-analyzer-juillet-2016\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/cinnk.com\/fr\/poor-old-man-log-analyzer-juillet-2016\/\"},\"author\":{\"name\":\"Cinnk\",\"@id\":\"https:\/\/cinnk.com\/fr\/#\/schema\/person\/eacaed860bb77e88b654cab0718cdc3d\"},\"headline\":\"Poor old man log analyzer &#8211; juillet 2016\",\"datePublished\":\"2020-10-07T14:49:45+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/cinnk.com\/fr\/poor-old-man-log-analyzer-juillet-2016\/\"},\"wordCount\":3231,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/cinnk.com\/fr\/#organization\"},\"articleSection\":[\"Archives\"],\"inLanguage\":\"fr-FR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/cinnk.com\/fr\/poor-old-man-log-analyzer-juillet-2016\/\",\"url\":\"https:\/\/cinnk.com\/fr\/poor-old-man-log-analyzer-juillet-2016\/\",\"name\":\"Poor old man log analyzer - juillet 2016 | Cinnk\",\"isPartOf\":{\"@id\":\"https:\/\/cinnk.com\/fr\/#website\"},\"datePublished\":\"2020-10-07T14:49:45+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/cinnk.com\/fr\/poor-old-man-log-analyzer-juillet-2016\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/cinnk.com\/fr\/poor-old-man-log-analyzer-juillet-2016\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/cinnk.com\/fr\/poor-old-man-log-analyzer-juillet-2016\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/cinnk.com\/fr\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Poor old man log analyzer &#8211; juillet 2016\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/cinnk.com\/fr\/#website\",\"url\":\"https:\/\/cinnk.com\/fr\/\",\"name\":\"Cinnk\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/cinnk.com\/fr\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/cinnk.com\/fr\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/cinnk.com\/fr\/#organization\",\"name\":\"Cinnk\",\"url\":\"https:\/\/cinnk.com\/fr\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/cinnk.com\/fr\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/cinnk.com\/wp-content\/uploads\/2023\/10\/logo-svg-orange_new.svg\",\"contentUrl\":\"https:\/\/cinnk.com\/wp-content\/uploads\/2023\/10\/logo-svg-orange_new.svg\",\"width\":125,\"height\":32,\"caption\":\"Cinnk\"},\"image\":{\"@id\":\"https:\/\/cinnk.com\/fr\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Cinnk.formation\",\"https:\/\/x.com\/CinnkCom\",\"https:\/\/www.instagram.com\/cinnk\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/cinnk.com\/fr\/#\/schema\/person\/eacaed860bb77e88b654cab0718cdc3d\",\"name\":\"Cinnk\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/cinnk.com\/fr\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/2110805a2e278c633c677ec50fd5a9944d8f66b4fac05f86ebb21a2f87be8e0b?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/2110805a2e278c633c677ec50fd5a9944d8f66b4fac05f86ebb21a2f87be8e0b?s=96&d=mm&r=g\",\"caption\":\"Cinnk\"},\"sameAs\":[\"https:\/\/cinnk.com\"],\"url\":\"https:\/\/cinnk.com\/fr\/author\/cinnkdev\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Poor old man log analyzer - juillet 2016 | Cinnk","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/cinnk.com\/fr\/poor-old-man-log-analyzer-juillet-2016\/","og_locale":"fr_FR","og_type":"article","og_title":"Poor old man log analyzer - juillet 2016 | Cinnk","og_description":"Nous allons voir comment faciliter l&rsquo;indexaction de votre site par les moteurs de recherche avec l&rsquo;utilisation d&rsquo;un sitemap ou plan de site en fran\u00e7ais.","og_url":"https:\/\/cinnk.com\/fr\/poor-old-man-log-analyzer-juillet-2016\/","og_site_name":"Cinnk","article_publisher":"https:\/\/www.facebook.com\/Cinnk.formation","article_published_time":"2020-10-07T14:49:45+00:00","og_image":[{"width":500,"height":500,"url":"https:\/\/cinnk.com\/wp-content\/uploads\/2024\/10\/Logo-font.jpg","type":"image\/jpeg"}],"author":"Cinnk","twitter_card":"summary_large_image","twitter_creator":"@CinnkCom","twitter_site":"@CinnkCom","twitter_misc":{"\u00c9crit par":"Cinnk","Dur\u00e9e de lecture estim\u00e9e":"15 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/cinnk.com\/fr\/poor-old-man-log-analyzer-juillet-2016\/#article","isPartOf":{"@id":"https:\/\/cinnk.com\/fr\/poor-old-man-log-analyzer-juillet-2016\/"},"author":{"name":"Cinnk","@id":"https:\/\/cinnk.com\/fr\/#\/schema\/person\/eacaed860bb77e88b654cab0718cdc3d"},"headline":"Poor old man log analyzer &#8211; juillet 2016","datePublished":"2020-10-07T14:49:45+00:00","mainEntityOfPage":{"@id":"https:\/\/cinnk.com\/fr\/poor-old-man-log-analyzer-juillet-2016\/"},"wordCount":3231,"commentCount":0,"publisher":{"@id":"https:\/\/cinnk.com\/fr\/#organization"},"articleSection":["Archives"],"inLanguage":"fr-FR"},{"@type":"WebPage","@id":"https:\/\/cinnk.com\/fr\/poor-old-man-log-analyzer-juillet-2016\/","url":"https:\/\/cinnk.com\/fr\/poor-old-man-log-analyzer-juillet-2016\/","name":"Poor old man log analyzer - juillet 2016 | Cinnk","isPartOf":{"@id":"https:\/\/cinnk.com\/fr\/#website"},"datePublished":"2020-10-07T14:49:45+00:00","breadcrumb":{"@id":"https:\/\/cinnk.com\/fr\/poor-old-man-log-analyzer-juillet-2016\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/cinnk.com\/fr\/poor-old-man-log-analyzer-juillet-2016\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/cinnk.com\/fr\/poor-old-man-log-analyzer-juillet-2016\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/cinnk.com\/fr\/"},{"@type":"ListItem","position":2,"name":"Poor old man log analyzer &#8211; juillet 2016"}]},{"@type":"WebSite","@id":"https:\/\/cinnk.com\/fr\/#website","url":"https:\/\/cinnk.com\/fr\/","name":"Cinnk","description":"","publisher":{"@id":"https:\/\/cinnk.com\/fr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/cinnk.com\/fr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/cinnk.com\/fr\/#organization","name":"Cinnk","url":"https:\/\/cinnk.com\/fr\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/cinnk.com\/fr\/#\/schema\/logo\/image\/","url":"https:\/\/cinnk.com\/wp-content\/uploads\/2023\/10\/logo-svg-orange_new.svg","contentUrl":"https:\/\/cinnk.com\/wp-content\/uploads\/2023\/10\/logo-svg-orange_new.svg","width":125,"height":32,"caption":"Cinnk"},"image":{"@id":"https:\/\/cinnk.com\/fr\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Cinnk.formation","https:\/\/x.com\/CinnkCom","https:\/\/www.instagram.com\/cinnk"]},{"@type":"Person","@id":"https:\/\/cinnk.com\/fr\/#\/schema\/person\/eacaed860bb77e88b654cab0718cdc3d","name":"Cinnk","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/cinnk.com\/fr\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/2110805a2e278c633c677ec50fd5a9944d8f66b4fac05f86ebb21a2f87be8e0b?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/2110805a2e278c633c677ec50fd5a9944d8f66b4fac05f86ebb21a2f87be8e0b?s=96&d=mm&r=g","caption":"Cinnk"},"sameAs":["https:\/\/cinnk.com"],"url":"https:\/\/cinnk.com\/fr\/author\/cinnkdev\/"}]}},"_links":{"self":[{"href":"https:\/\/cinnk.com\/fr\/wp-json\/wp\/v2\/posts\/381","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cinnk.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cinnk.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cinnk.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/cinnk.com\/fr\/wp-json\/wp\/v2\/comments?post=381"}],"version-history":[{"count":0,"href":"https:\/\/cinnk.com\/fr\/wp-json\/wp\/v2\/posts\/381\/revisions"}],"wp:attachment":[{"href":"https:\/\/cinnk.com\/fr\/wp-json\/wp\/v2\/media?parent=381"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cinnk.com\/fr\/wp-json\/wp\/v2\/categories?post=381"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cinnk.com\/fr\/wp-json\/wp\/v2\/tags?post=381"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}