vlogger est un petit script qui va s’occuper de gérer l’écriture des logs à la place d’Apache. Pourquoi ? Car il est bien mieux optimisé qu’Apache pour faire cette tâche et que du coup nous allons soulager notre serveur et économiser des ressources qui seront plutôt utilisées ailleurs. De plus sa façon de créer les logs est plutôt sympathique: vlogger va créer dans le répertoire de logs d’Apache un répertoire pour chaque VirtualHost du serveur (ce nom sera basé sur le ServerName). A l’intérieur, vlogger va créer un fichier de log différent pour chaque jour, et va créer un lien symbolique access.log vers le fichier de log du jour.
Installation de vlogger
> apt-get install vlogger
Une fois vlogger installé, nous allons devoir paramétrer Apache pour qu’il envoie ses logs à vlogger.
tout d’abord, éditer le fichier /etc/apache2/apache2.conf, et trouver les lignes
LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %O" common LogFormat "%{Referer}i -> %U" referer LogFormat "%{User-agent}i" agent
Le but est de rajouter %v au début de la ligne de chaque définition de log, ce qui donne :
LogFormat "%v %v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined LogFormat "%v %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%v %h %l %u %t \"%r\" %>s %O" common LogFormat "%v %{Referer}i -> %U" referer LogFormat "%v %{User-agent}i" agent
Pourquoi faire cela ? Lorsque nous enverrons nos logs à vlogger, celui-ci va prendre le premier paramètre pour créer le répertoire correspondant et nous voulons que le répertoire corresponde au virtualhost utilisé d’où l’ajout de %v. C’est donc ce nom qui sera utilisé pour désigner le répertoire et il sera ensuite supprimé de la ligne du log. Aller ensuite dans /etc/apache2/conf.d/. Si vous avez un fichier other-vhosts-access-log de présent éditez le, sinon créez le. A l’intérieur on va mettre les lignes suivantes:
ErrorLog "| /usr/sbin/vlogger -e -s error.log ${APACHE_LOG_DIR}/error/" CustomLog "| /usr/sbin/vlogger -s access.log ${APACHE_LOG_DIR}" vhost_combined
Ici donc on fait un pipe sur les logs d’Apache vers vlogger.
Si vous n’avez pas de ServerName par défaut pour votre serveur, je vous conseille d’en créer un, même bidon. Rappelez vous que vlogger utilise le premier paramètre de la définition du log pour créer son répertoire. Or le VirtualHost par défaut d’Apache (celui qui est utilisé lorsque l’on accède directement au serveur par l’adresse IP par exemple) ne définit pas de ServerName. Du coup le paramètre %v va être vide et vlogger va utiliser les paramètres suivants pour créer son répertoire. On risque donc de se retrouver avec des répertoires exotiques comme le port, l’adresse IP du client ou autre (selon le format de log utilisé). Pas terrible. Dans conf.d j’ai donc créé un fichier servername dans lequel j’ai mis:
ServerName localhost
vlogger a ceci d’intéressant qu’il gère lui-même la création des différents dossiers des virtualhost, du coup on va désactiver les logs du virtualhost par défaut. Dans le fichier /etc/apache2/sites-available/default, commentez les lignes suivantes:
ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined
Si vous avez d’autres VirtualHosts et que vous avez des logs personnalisés, désactivez les également.
On va maintenant allez dans le répertoire de logs d’Apache (/var/log/apache2/) et créer le répertoire error. En effet, les erreurs elles, seront toutes regroupées dans ce dossier
Sauvegardez et redémarrez Apache, normalement le nouveau système de logs devrait fonctionner.