Utilisation de logrotate pour les logs et reports Magento

Logrotate avec Magento

Logrotate avec Magento

Sous les systèmes Linux, l'utilitaire logrotate est souvent utilisé pour faire la rotation des logs. Nous allons voir comment le mettre en œuvre, pour les fichiers logs Magento.

Logrotate fonctionne avec des fichiers de configuration. Ces fichiers définissent les règles à appliquer pour un fichier ou pattern défini.

Configuration pour la rotation des fichiers de logs

Les fichiers de logs de Magento sont généralement stockés dans le répertoire var/log du site Web. On y trouve les fichiers classiques Magento (system.log, exception.log) ou des fichiers de logs mis en place spécifiquement.

/path/to/root/magento/var/log/*.log {
   weekly
   missingok
   rotate 4
   compress
   delaycompress
   notifempty
}
Rotation des fichiers logs

La configuration ci-dessus nous permet de définir une rotation, pour les fichiers de type *.log se trouvant dans le répertoire var/log, avec les règles suivantes :

  • Un intervalle de rotation hebdomadaire
  • Continuer le processus en cas d'erreur
  • Garder 4 semaines de journalisation
  • Compresser les fichiers
  • Compresser avec un délai un intervalle
  • Ne pas effectuer la rotation si le fichier est vide

Configuration pour la rotation des reports

En plus des logs, Magento génère des reports en cas d'erreur interne. Nous allons également définir une configuration pour que logrotate archive ces documents.

/path/to/magento/root/var/report/* {
    daily
    missingok
    rotate 30
    olddir old
}
Rotation des reports Magento

La configuration ci-dessus nous permet de définir une rotation, pour les fichiers se trouvant dans le répetoire var/report, avec les règles suivantes :

  • Un intervalle de rotation quotidien
  • Continuer le processus en cas d'erreur
  • Garder 30 jours de journalisation
  • Déplacer les fichiers dans le sous répertoire old

Cette configuration peut être écrite à la suite de la configuration précédente, dans un unique fichier.

Mise en place de la rotation

Une fois les configurations de logrotate définies, il ne reste plus qu'à les faire appliquer par le programme.

Une première solution consiste à demander à l'hébergeur d'ajouter notre fichier de configuration spécifique Magento aux autres fichiers de configuration logrotate. Dans ce cas, pour chaque modification, il faudra passer par l'hébergeur.

Le petit script ci après nous permettra d'être indépendant de l'hébergeur.

#!/bin/bash

BASE_DIR=$(readlink -f $(dirname $0)"/..")
LOG_DIR=$BASE_DIR/var/log
REPORT_DIR=$BASE_DIR/var/report

BINARY=$(which logrotate)
CONF_FILE=$BASE_DIR/logrotate_magento.conf
STATUS_FILE=$BASE_DIR/status.tmp

if [[ -z $BINARY ]]
then
  BINARY=/usr/sbin/logrotate
fi

if [[ ! -f $BINARY ]]
then
  echo "[logrotate.sh] ERROR: $BINARY doesn't exist !"
  exit 1
fi

if [[ ! -f $CONF_FILE ]]
then
  echo "[logrotate.sh] ERROR: $CONF_FILE doesn't exist !"
  exit 1
fi

if [[ ! -d "$REPORT_DIR/old" ]]
then
  mkdir "$REPORT_DIR/old"
fi

$BINARY -s $STATUS_FILE -f $CONF_FILE
exit 0
Shell script pour la rotation des logs Magento

Le script ci-dessus va vérifier que l'utilitaire logrotate est présent sur la plateforme. Le cas échéant, logrotate sera exécuté avec le fichier de configuration précédemment décrit. A noter le passage de l'option -s, qui permet d'éviter les conflits de droits sur le fichier status, nécessaire à logrorate.

Une fois le fonctionnement validé,  il ne reste plus qu'à ajouter une ligne dans la crontab.

@daily /bin/bash magento_logrotate.sh 2>&1
Crontab pour logrotate

A vous de jouer ! N'hésitez pas à adapter les configurations et le script à vos besoins. Il est, par exemple, tout à fait possible de transposer ce modèle pour Drupal.

Laisser un commentaire

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

Captcha *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.