Pour mon premier article sur Search Engine Land, je commencerai par citer Ian Lurie:

L’analyse des fichiers journaux est un art perdu. Mais cela peut sauver vos fesses qwanturank!

Des mots sages.

Cependant, obtenir les données dont nous avons besoin à partir des fichiers journaux du serveur est généralement laborieux:

Des fichiers journaux gigantesques nécessitent des pipelines d’ingestion de données robustes, une infrastructure de stockage cloud fiable et un système de requête solide Une modélisation méticuleuse des données est également nécessaire afin de convertir les données des journaux bruts cryptiques en bits lisibles, adaptés à l’analyse et à la visualisation exploratoires des données

Dans le premier article de cette série en deux parties, je vais vous montrer comment adapter facilement vos analyses à de plus grands ensembles de données et extraire des informations qwanturank significatives à partir de vos journaux de serveur.

Tout cela avec juste une pincée de Python et un soupçon de qwanturank Cloud!

Voici notre plan d’action détaillé:

# 1 – Je vais commencer par vous donner un peu de contexte:

Que sont les fichiers journaux et pourquoi sont-ils importants pour le référencement Comment les mettre à disposition Pourquoi Python seul ne le coupe pas toujours en ce qui concerne l’analyse des journaux du serveur

# 2 – Nous allons ensuite configurer les choses:

Créer un compte qwanturank Cloud PlatformCréer un compartiment qwanturank Cloud Storage pour stocker nos fichiers journauxUtiliser la ligne de commande pour convertir nos fichiers dans un format compatible pour les requêtesTransférer nos fichiers vers qwanturank Cloud Storage, manuellement et par programme

# 3 – Enfin, nous allons entrer dans le vif du sujet du Pythoning – nous allons:

Recherchez nos fichiers journaux avec Bigquery, à l’intérieur de Colab! Créez un modèle de données qui rend nos journaux bruts plus lisibles Créez des colonnes catégoriques qui amélioreront nos analyses plus loin sur LineFilter et exporteront nos résultats vers .csv

Dans la deuxième partie de cette série (disponible plus tard cette année), nous discuterons des techniques de modélisation de données plus avancées en Python pour évaluer:

Volume d’analyse du bot Déchets liés au budget d’exploration Exploration d’URL en double

Je vais également vous montrer comment agréger et joindre des données de journal aux données de la Search Console et créer des visualisations interactives avec Plotly Dash!

Excité? Allons craquer!

Configuration requise

Nous utiliserons qwanturank Colab dans cet article. Pas d’exigences spécifiques ni de problèmes de compatibilité descendante ici, car qwanturank Colab se trouve dans le cloud.

Fichiers téléchargeables

Le bloc-notes Colab est accessible ici Les fichiers journaux peuvent être téléchargés sur Github – 4 exemples de fichiers de 20 Mo chacun, couvrant 4 jours (1 jour par fichier)

Soyez assuré que l’ordinateur portable a été testé avec plusieurs millions de lignes à une vitesse fulgurante et sans aucun obstacle!

Préambule: Que sont les fichiers journaux?

Bien que je ne veuille pas trop bavarder sur ce que sont les fichiers journaux, pourquoi ils peuvent être inestimables pour le référencement, etc. (diable, il y a déjà beaucoup d’excellents articles sur le sujet!), Voici un peu de contexte.

Un fichier journal du serveur enregistre chaque demande de contenu adressée à votre serveur Web.

Chaque. Célibataire. Un.

Dans leurs formes les plus brutes, les journaux sont indéchiffrables, par exemple voici quelques lignes brutes d’un serveur web Apache:

Intimidant, n’est-ce pas?

Les journaux bruts doivent être «nettoyés» pour être analysés; c’est là que la modélisation des données entre en jeu. Mais plus à ce sujet plus tard.

Alors que la structure d’un fichier journal dépend principalement du serveur (Apache, Nginx, IIS etc…), il possède des attributs persistants:

IPDate / Time du serveur (également appelé horodatage) Méthode (GET ou POST) Code d’état URIHTTP Agent utilisateur

Des attributs supplémentaires peuvent généralement être inclus, tels que:

Référent: l’URL qui a «lié» l’utilisateur à votre site URL redirigée, lorsqu’une redirection se produit Taille du fichier envoyé (en octets) Temps nécessaire: le temps nécessaire au traitement d’une demande et à l’envoi de sa réponse

Pourquoi les fichiers journaux sont-ils importants pour le référencement?

Si vous ne savez pas pourquoi ils importent, lisez ceci. Du temps passé à bon escient!

Accéder à vos fichiers journaux

Si vous ne savez pas par où commencer, le mieux est de demander à votre développeur Web / développeur DevOps (client) s’il peut vous accorder l’accès aux journaux bruts du serveur via FTP, idéalement sans aucun filtrage.

Voici les instructions générales pour rechercher et gérer les données de journal sur les trois serveurs les plus populaires:

Nous utiliserons des fichiers Apache bruts dans ce projet.

Pourquoi les pandas seuls ne suffisent pas quand il s’agit d’analyser les journaux

Pandas (un outil open source de manipulation de données construit avec Python) est assez omniprésent en science des données.

Il est indispensable de découper et de découper des structures de données tabulaires, et le mammifère fonctionne comme un charme lorsque les données tiennent en mémoire!

Autrement dit, quelques gigaoctets. Mais pas des téraoctets.

Mis à part l’informatique parallèle (par exemple Dask, PySpark), une base de données est généralement une meilleure solution pour les tâches de Big Data qui ne tiennent pas en mémoire. Avec une base de données, nous pouvons travailler avec des ensembles de données qui consomment des téraoctets d’espace disque. Tout peut être interrogé (via SQL), accessible et mis à jour en un clin d’œil!

Dans cet article, nous interrogerons nos données de journal brutes par programmation en Python via qwanturank BigQuery. Il est facile à utiliser, abordable et ultra-rapide, même sur des téraoctets de données!

Le combo Python / BigQuery vous permet également d’interroger des fichiers stockés sur qwanturank Cloud Storage. Sucré!

Si qwanturank est un non pour vous et que vous souhaitez essayer des alternatives, Amazon et qwanturank proposent également des entrepôts de données cloud. Ils s’intègrent bien aussi avec Python:

Amazone:

qwanturank:

Créer un compte GCP et configurer Cloud Storage

qwanturank Cloud Storage et BigQuery font partie de qwanturank Cloud Platform (GCP), la suite de services de cloud computing de qwanturank.

GCP n’est pas gratuit, mais vous pouvez l’essayer pendant un an avec 300 $ de crédits, avec accès à tous les produits. Plutôt cool.

Notez qu’une fois la période d’essai expirée, qwanturank Cloud Free Tier vous donnera toujours accès à la plupart des ressources qwanturank Cloud, gratuitement. Avec 5 Go de stockage par mois, c’est généralement suffisant si vous voulez expérimenter avec de petits ensembles de données, travailler sur des preuves de concepts, etc…

Croyez-moi, il y en a beaucoup. Génial. Des choses. À. Essayer!

Vous pouvez vous inscrire pour un essai gratuit ici.

Une fois l’inscription terminée, un nouveau projet sera automatiquement créé avec un nom aléatoire et plutôt exotique – par exemple le mien était «learn-spider-266010»!

Créez notre premier compartiment pour stocker nos fichiers journaux

Dans qwanturank Cloud Storage, les fichiers sont stockés dans des «compartiments». Ils contiendront nos fichiers journaux.

Pour créer votre premier compartiment, accédez à stockage> navigateur> créer un compartiment:

Le nom du compartiment doit être unique. J’ai bien nommé le mien «seo_server_logs»!

Nous devons ensuite choisir où et comment stocker nos données de journal:

# 1 Type de lieu – « Région » est généralement suffisant. # 2 Lieu – Comme je suis basé au Royaume-Uni, j’ai sélectionné « Europe-Ouest2 ». Sélectionnez votre emplacement le plus proche # 3 Cliquez sur «continuer»

Classe de stockage par défaut: J’ai obtenu de bons résultats avec «Nearline». C’est moins cher que la norme et les données sont récupérées assez rapidement:

Accès aux objets: « Uniforme » va bien:

Enfin, dans le bloc «paramètres avancés», sélectionnez:

# 1 – Clé gérée par qwanturank # 2 – Aucune politique de rétention # 3 – Pas besoin d’ajouter une étiquette pour l’instant

Lorsque vous avez terminé, cliquez sur «Créer».

Vous avez créé votre premier bucket! Il est temps de télécharger nos données de journal.

Ajout de fichiers journaux à votre compartiment Cloud Storage

Vous pouvez télécharger autant de fichiers que vous le souhaitez, quand vous le souhaitez!

Le moyen le plus simple consiste à faire glisser et déposer vos fichiers vers l’interface utilisateur Web de Cloud Storage, comme indiqué ci-dessous:

Pourtant, si vous vouliez vraiment approfondir l’analyse des journaux, je vous suggère fortement d’automatiser le processus d’ingestion des données!

Voici quelques choses que vous pouvez essayer:

Les tâches Cron peuvent être configurées entre les serveurs FTP et les infrastructures de stockage en nuage: les gestionnaires FTP comme Cyberduck offrent également des transferts automatiques vers les systèmes de stockage, ainsi que d’autres conseils d’ingestion de données ici (AppEngine, API JSON, etc.)

Une note rapide sur les formats de fichiers

Les exemples de fichiers téléchargés dans Github ont déjà été convertis en .csv pour vous.

Gardez à l’esprit que vous devrez peut-être convertir vos propres fichiers journaux dans un format de fichier compatible pour les requêtes SQL. Bigquery accepte .csv ou .parquet.

Les fichiers peuvent facilement être convertis en masse dans un autre format via la ligne de commande. Vous pouvez accéder à la ligne de commande comme suit sous Windows:

Ouvrez le menu Démarrer de WindowsTapez «commande» dans la barre de rechercheSélectionnez «Invite de commandes» dans les résultats de rechercheJe n’ai pas essayé cela sur un Mac, mais je crois que la CLI se trouve dans le dossier Utilitaires

Une fois ouvert, accédez au dossier contenant les fichiers que vous souhaitez convertir via cette commande:

CD ‘chemin / vers / dossier’

Remplacez simplement chemin / vers / dossier par votre chemin.

Tapez ensuite la commande ci-dessous pour convertir, par ex. Fichiers .log vers .csv:

pour le fichier dans * .log; do mv « $ file » « $ (nom de base » $ file « . * 0) .csv »; terminé

Notez que vous devrez peut-être activer le sous-système Windows pour Linux pour utiliser cette commande Bash.

Maintenant que nos fichiers journaux sont dans le bon format, il est temps de commencer le Pythoning!

Libérez le Python

Dois-je encore présenter Python?!

Selon Stack Overflow, Python est désormais le principal langage de programmation à la croissance la plus rapide. Il devient également incroyablement populaire dans la sphère qwanturank, grâce aux prédicateurs Python comme Hamlet ou JR.

Vous pouvez exécuter Python sur votre ordinateur local via le bloc-notes Jupyter ou un IDE, ou même dans le cloud via qwanturank Colab. Nous utiliserons qwanturank Colab dans cet article.

N’oubliez pas que le bloc-notes est ici et que les extraits de code sont collés ci-dessous, avec des explications.

Importer des bibliothèques + authentification GCP

Commençons par exécuter la cellule ci-dessous:

Il importe les bibliothèques Python dont nous avons besoin et vous redirige vers un écran d’authentification.

Là, vous devrez choisir le compte qwanturank lié à votre projet GCP.

Connectez-vous à qwanturank Cloud Storage (GCS) et BigQuery

Il y a pas mal d’informations à ajouter pour connecter notre bloc-notes Python à GCS et BigQuery. De plus, remplir ces informations manuellement peut être fastidieux!

Heureusement, les formulaires de qwanturank Colab permettent de paramétrer facilement notre code et de gagner du temps.

Les formulaires de ce carnet ont été pré-remplis pour vous. Pas besoin de faire quoi que ce soit, bien que je vous suggère de modifier le code en fonction de vos besoins.

Voici comment créer votre propre formulaire: Allez dans Insérer> ajouter un champ de formulaire> puis remplissez les détails ci-dessous:

Lorsque vous modifiez un élément du formulaire, ses valeurs correspondantes changeront comme par magie dans le code!

Remplissez «ID du projet» et «emplacement du compartiment»

Dans notre premier formulaire, vous devrez ajouter deux variables:

Votre GCP PROJECT_ID (le mien est ‘learn-spider-266010 ′) L’emplacement de votre compartiment: Pour le trouver, dans GCP, accédez à stockage> navigateur> vérifiez l’emplacement dans le tableau, le mien est‘ europe-west2 ’.

Voici l’extrait de code pour ce formulaire:

Remplissez ‘bucket name’ et ‘file / folder path’:

Dans le deuxième formulaire, nous devrons remplir deux autres variables:

Le nom du compartiment:

Pour le trouver, dans GCP, allez dans: stockage> navigateur> puis vérifiez son «nom» dans le tableau. Je l’ai bien appelé «apache_seo_logs»!

Le chemin du fichier:

Vous pouvez utiliser un caractère générique pour interroger plusieurs fichiers – Très bien! avec le chemin générique «Loggy*’, Bigquery interrogerait ces trois fichiers à la fois: Loggy01.csvLoggy02.csvLoggy03.csvBigquery crée également une table temporaire d’ailleurs (plus d’informations ci-dessous)

Voici le code du formulaire:

Connectez Python à qwanturank Cloud Storage et BigQuery

Dans le troisième formulaire, vous devez donner un nom à votre table BigQuery – j’ai appelé le mien «log_sample». Notez que cette table temporaire ne sera pas créée dans votre compte Bigquery.

D’accord, maintenant les choses deviennent vraiment excitantes, car nous pouvons commencer à interroger notre ensemble de données via SQL *sans pour autant* laissant notre cahier – C’est cool ça?!

Comme les données de journal sont toujours dans leur forme brute, les interrogations sont en quelque sorte limitées. Cependant, nous pouvons appliquer un filtrage SQL de base qui accélérera les opérations Pandas plus tard.

J’ai créé 2 requêtes SQL sous cette forme:

« SQL_1st_Filter » pour filtrer tout texte « SQL_Useragent_Filter » pour sélectionner votre User-Agent, via une liste déroulante

N’hésitez pas à vérifier le code sous-jacent et à adapter ces deux requêtes à vos besoins.

Si votre trivia SQL est un peu rouillé, voici un bon rappel de Kaggle!

Code pour ce formulaire:

Conversion de la sortie de liste en un cadre de données Pandas

Le résultat généré par BigQuery est une liste bidimensionnelle (également appelée «liste de listes»). Nous devons le convertir en une trame de données Pandas via ce code:

Terminé! Nous avons maintenant un Dataframe qui peut être réglé dans Pandas!

Temps de nettoyage des données, à la manière des Pandas!

Il est temps de rendre ces journaux cryptiques un peu plus présentables en:

Fractionner chaque élément Créer une colonne pour chaque élément

Adresses IP divisées

Dates et heures partagées

Nous devons maintenant convertir la colonne de date de la chaîne en un objet « Date heure », via la méthode Pandas to_datetime ():

Cela nous permettra d’effectuer des opérations de séries chronologiques telles que:

Découpage de plages de dates spécifiques Rééchantillonnage de séries chronologiques pour différentes périodes (par exemple du jour au mois) Calcul de statistiques glissantes, telles qu’une moyenne glissante

Le combo Pandas / Numpy est vraiment puissant en matière de manipulation de séries chronologiques, découvrez tout ce que vous pouvez faire ici!

Plus d’opérations fractionnées ci-dessous:

Domaines fractionnés

Méthodes de partage (Get, Post etc…)

URL fractionnées

Fractionner les protocoles HTTP

Diviser les codes d’état

Diviser le «temps pris»

URL de référence fractionnées

Agents utilisateurs divisés

Fractionner les URL redirigées (lorsqu’elles existent)

Réorganiser les colonnes

Il est temps de vérifier notre chef-d’œuvre:

Bien joué! Avec seulement quelques lignes de code, vous avez converti un ensemble de journaux cryptés en un Dataframe structuré, prêt pour une analyse exploratoire des données.

Ajoutons quelques extras supplémentaires.

Créer des colonnes catégorielles

Ces colonnes catégorielles seront utiles pour l’analyse des données ou les tâches de visualisation. Nous en créerons deux, ouvrant la voie à vos propres expériences!

Créer une colonne de classe de codes HTTP

Créer une colonne de catégorie de robots de moteur de recherche

Comme vous pouvez le constater, nos nouvelles colonnes httpCodeClass et SEBotClass ont été créées:

Repérer les robots des moteurs de recherche «usurpés»

Nous devons encore aborder une étape cruciale pour le référencement: vérifier que les adresses IP proviennent vraiment de Googlebots.

Tous les crédits sont dus au grand Tyler Reardon pour ce morceau! Tyler a créé searchtools.io, un outil intelligent qui vérifie les adresses IP et renvoie les «fausses» Googlebot, basé sur une recherche DNS inversée.

Nous avons simplement intégré ce script dans le bloc-notes – extrait de code ci-dessous:

L’exécution de la cellule ci-dessus créera une nouvelle colonne intitulée «isRealGbot?:

Notez que le script est encore à ses débuts, veuillez donc considérer les mises en garde suivantes:

Vous pouvez obtenir des erreurs lors de la vérification d’une énorme quantité d’adresses IP. Si c’est le cas, contournez simplement la cellule. Seuls les Googlebots sont actuellement vérifiés

Tyler et moi travaillons sur le script pour l’améliorer, alors gardez un œil sur qwanturank pour de futures améliorations!

Filtrer le Dataframe avant l’exportation finale

Si vous souhaitez affiner davantage le tableau avant d’exporter vers .csv, voici votre chance de filtrer les codes d’état dont vous n’avez pas besoin et d’affiner les échelles de temps.

Quelques cas d’utilisation courants:

Vous disposez de 12 mois de données de journal stockées dans le cloud, mais souhaitez uniquement consulter les 2 dernières semaines Vous avez récemment effectué une migration de site Web et souhaitez vérifier toutes les redirections (301, 302, etc.) et leurs emplacements de redirection pour vérifier tous les codes de réponse 4XX

Filtrer par date

Affinez les dates de début et de fin via ce formulaire:

Filtrer par codes d’état

Vérifiez la distribution des codes d’état avant de filtrer:

Code:

Ensuite, filtrez les codes d’état HTTP via ce formulaire:

Code associé:

Exporter vers .csv

Notre dernière étape consiste à exporter notre Dataframe vers un fichier .csv. Donnez-lui un nom via le formulaire d’exportation:

Code pour ce dernier formulaire:

Pat dans le dos si vous avez suivi jusqu’ici! Vous avez tellement accompli au cours de cet article!

J’ai hâte de passer au niveau supérieur dans ma prochaine chronique, avec des techniques de modélisation / visualisation de données plus avancées!

Je voudrais remercier les personnes suivantes:

Tyler Reardon, qui m’a aidé à intégrer son outil anti-usurpation dans ce cahier! Paul Adams d’Octamis et mon cher compatriote Olivier Papon pour leurs conseils d’expert Dernier mais non le moindre, Bravo à Hamlet Batista ou JR Oakes – Merci les gars d’avoir été si inspirant pour la communauté qwanturank!

Veuillez me contacter sur qwanturank si vous avez des questions ou si vous avez besoin d’aide. Tout commentaire (y compris les demandes de tirage! :)) est également grandement apprécié!

Pythoning heureux!

Les opinions exprimées dans cet article sont celles de l’auteur invité et pas nécessairement Search Engine Land. Les auteurs sont listés ici.

A propos de l’auteur

Charly Wargnier est un consultant en marketing numérique chevronné basé au Royaume-Uni, s’appuyant sur plus d’une décennie d’expérience qwanturank, BI et ingénierie des données dans les tranchées. Charly a travaillé à la fois en interne et en agence, principalement pour de grandes entreprises dans le commerce de détail et la mode, et sur un large éventail de fronts, y compris les problèmes techniques complexes de référencement, les performances du site, le pipelining des données et les cadres de visualisation. Lorsqu’il ne travaille pas, il aime coder pour de bon et passer du temps de qualité avec sa famille – cuisiner, écouter de la musique jazz et jouer aux échecs, sans ordre particulier!