OnCrawl et VPS Planethoster : upload de vos logs

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) :

Image

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 :

Image

La solution

Vous vous retrouvez donc avec le fichier global. Voici les étapes par lesquelles je vais passer :

  1. Je vide mon dossier temporaire
  2. Je copie l'archive dans le dossier temporaire
  3. Je décompresse l'archive
  4. Je filtre le contenu du fichier sur la date courante
  5. Je filtre le contenu du fichier sur le mot google (c'est ce qui nous intéresse, les bots de Google)
  6. Je mets tout ça dans un fichier texte
  7. Je compresse le fichier texte
  8. Je l'upload en FTP sur les serveurs de OnCrawl
  9. 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}/*

WordPress / Prestashop : auditer un serveur en cas de piratage

Laisser un commentaire

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