OnCrawl est l’un des analyseurs de logs du marché parmi beaucoup d’autres comme Graylog, Seolyzer, Kibana, Kelogs, Watussi Box etc. C’est à lui que je m’intéresse particulièrement aujourd’hui. Pourquoi ? Parce que la gestion des logs dans leur VPS (WHM + cPanel) est un peu mal foutue.
Petit rappel
Que vous ayez un serveur mutualisé, dédié ou un VPS, il enregistre tout ce qui se passe sur votre site. Ces données sont stockées dans des fichiers texte, les fichiers de logs. L’analyse de ces fichiers permet de déceler des problèmes éventuels, notamment lorsque vous regardez comment Google le parcourt (pages orphelines, pages non crawlées, erreurs 404, 302, 301, 500, etc).
OnCrawl
OnCrawl ne s’installe pas sur votre serveur. Afin d’analyser les logs, vous devez créer une tâche périodique qui va envoyer les fichiers en FTP sur leur serveur au moyen d’un script bash. C’est un script exécuté sur votre serveur qui va récupérer les logs du jour, les compresser et les envoyer en FTP sur l’espace que OnCrawl vous aura créé.
Cas de figure 1
En général, les serveurs gardent les logs du jour courant ainsi que ceux de la veille dans des fichiers .log non compressés. Les jours précédents sont compressés et gardé indépendants des autres jours sur un certains nombre de jours comme ci-dessous (dédié OVH sur Débian 9) :
Là, c’est du gâteau, il y a juste à récupérer le script bash de la documentation officielle de OnCrawl et le tour est joué.
Cas de figure 2
Certains serveurs pré-configurés comme les VPS de chez Planethoster (en tout cas c’est comme ça pour ma cliente et le support m’a fait comprendre qu’il n’y avait pas d’autre solution) fonctionnent différemment. Tous les jours à 14h, les logs du jour courant sont intégrés à une archive des logs du mois. La suite des logs (donc de 14h01 à 14h du lendemain) est stocké dans un fichier log. Du coup, vous ne pouvez pas simplement récupérer un fichier log, le compresser et l’envoyer en FTP car les logs doivent être envoyés tous les fichiers sous cette forme :
access.log-2018-04-08.google_only.gz
Voici à quoi ressemblent les logs de ma cliente :
La solution
Vous vous retrouvez donc avec le fichier global. Voici les étapes par lesquelles je vais passer :
- Je vide mon dossier temporaire
- Je copie l’archive dans le dossier temporaire
- Je décompresse l’archive
- Je filtre le contenu du fichier sur la date courante
- Je filtre le contenu du fichier sur le mot google (c’est ce qui nous intéresse, les bots de Google)
- Je mets tout ça dans un fichier texte
- Je compresse le fichier texte
- Je l’upload en FTP sur les serveurs de OnCrawl
- Je supprime les fichiers temporaires
Pour arriver à faire comme moi, vous devrez :
- Créer un dossier temporaire de travail, pour moi : /tmp/oncrawl/
- Déterminer l’emplacement de vos archives de logs, pour moi : /home/USER/logs/
- Créer une cron, j’ai fait le choix de la lancer tous les soirs a 23h59, avec crontab -e :
59 23 * * * /home/USER/oncrawl_upload_logs.sh
Le script
Le début de la documentation reste identique. Vous devez créer en root votre script bash, sur lequel vous appliquez les droits en exécution.
Voici mon code, testé et validé :
#!/bin/bash # variables FTP_SERVER='ftp.oncrawl.com' FTP_USER='<YOUR ONCRAWL USERNAME>' FTP_PASS='<YOUR ONCRAWL PASSWORD>' FTP_FOLDER='site-internet.fr' TMP_FOLDER='/tmp/oncrawl/' CURRENT_MONTH=$(date -d "$D" '+%b') CURRENT_YEAR=$(date -d "$D" '+%Y') CURRENT_DAY=$(date -d "$D" '+%d') LOG_PATH="/home/USER/logs/" LOG_FILENAME="${FTP_FOLDER}-ssl_log-${CURRENT_MONTH}-${CURRENT_YEAR}" GREP_WORD='google' LOG_TMP_FILE="access.log-$(date +%Y-%m-%d).${GREP_WORD}_only.gz" # je vide le dossier temporaire rm -f ${TMP_FOLDER}/* # je copie mon archive de logs cp "${LOG_PATH}${LOG_FILENAME}.gz" ${TMP_FOLDER} # je la decompresse gzip -d "${TMP_FOLDER}${LOG_FILENAME}.gz" # je filtre sur la date et le mot google puis je compression le fichier cat "${TMP_FOLDER}${FTP_FOLDER}-ssl_log-${CURRENT_MONTH}-${CURRENT_YEAR}" | grep "${CURRENT_DAY}/${CURRENT_MONTH}/${CURRENT_YEAR}" | grep "${GREP_WORD}" | gzip > ${TMP_FOLDER}${LOG_TMP_FILE} # je l'envoi en FTP curl -s -T ${TMP_FOLDER}${LOG_TMP_FILE} "ftp://${FTP_SERVER}/${FTP_FOLDER}/" --user $FTP_USER:$FTP_PASS # je vide mon dossier temporaire rm -f ${TMP_FOLDER}/*