Configurer Apache et Rsyslog

17 août 2013 · Posté par dans GNU/Linux ·

Le problème d’Apache aujourd’hui, c’est que ses logs « access » ne peuvent pas être redirigés nativement vers un autre logger.

Vous allez me dire : ok, mais quel intérêt ?

Et bien si comme moi vous avez un mis en place des outils de corrélation de logs, vous souhaitez sans doute analyser tous les logs de vos différents serveurs WWW.

Pour remédier au problème d’Apache, voici une méthode à moi qui fonctionne plutôt pas mal.

Pour pouvoir envoyer ces logs vers une autre machine, je vais utiliser un « logger » externe.

Création du logger :

vi /usr/local/sbin/apache_syslog

Copiez/coller ce bout de code :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/usr/bin/perl
use Sys::Syslog qw (:DEFAULT setlogsock);
 
setlogsock('unix');
 
# creation du log socket
openlog('httpd', 'pid', 'local6');
 
# on log tout
while () {
syslog('info', $_);
}
 
# fermeture du log socket
closelog;

Enregistrez et fermez.

Pensez à faire

chmod +x /usr/local/sbin/apache_syslog

 

Redirection des logs « Error »

Par défaut, Apache log tout vers des fichiers. Les erreurs sont donc loggées vers error.log.

Ce qui nous intéresse ici, c’est de récupérer ces erreurs sur une machine distante.

Je vais donc remplacer, pour chaque virtualhost, la directive

ErrorLog ${APACHE_LOG_DIR}/error.log

par

ErrorLog |/usr/local/sbin/apache_syslog

 

Redirection des logs « Access »

Comme vous l’avez fait pour les logs Error, vous allez, pour chacun des virtualhost que vous hébergez, modifier la ligne

CustomLog ${APACHE_LOG_DIR}/access.log combined

par

CustomLog |/usr/local/sbin/apache_syslog combined

Une fois terminé, pensez à redémarrer Apache.

Désormais, vos logs access et error sont dans syslog.

Deux options s’offrent à vous : les laisser là, ou les envoyez sur une autre machine qui vous sert de corrélateur.

 

Rediriger ces logs vers une machine distante

C’est très simple :

Dans /etc/rsyslog.d/, créez un fichier qui se nomme

10-apache.conf

et ajoutez les lignes suivantes :

1
2
:programname,contains,"httpd" @ip_address_distante
& ~

Enregistrez, fermez et relancez rsyslog

service rsyslog restart

Désormais, tous vos logs d’Apache sont envoyés à la machine dont l’adresse ip est celle que vous avez renseignée.

Simple, rapide et efficace !

Related Posts Plugin for WordPress, Blogger...

Comments

4 Responses to “Configurer Apache et Rsyslog”

  1. Mamadoo on juin 7th, 2014 15 h 23 min

    Bonjour,

    Merci pour ce super tuto, c’est très clair.
    J’ai tout mis en place mais maintenant je cherche à récupérer les logs envoyés à l’IP distante pour pouvoir les fournir à logstash (installé sur le serveur distant).
    Comment faut il faire ?
    Une piste ?
    Merci !

  2. antonin on novembre 15th, 2014 9 h 33 min

    Cette fois, ça se passe côté logstash…
    Je n’utilise pas ce produit donc je ne sais pas te répondre sur le sujet.

  3. jluc on octobre 15th, 2014 7 h 43 min

    Restarting web server: apache2 … waiting syslog: expecting argument $format at /usr/local/sbin/apache_syslog line 11

    la ligne 11 étant :

    syslog(‘info’, $_);
    A priori un petit problème de variable ??

  4. antonin on novembre 15th, 2014 9 h 32 min

    étrange… Aucune erreur de mon côté…
    Je viens de refaire le test sur une autre machine.

Poster une réponse




*