TOTAL
Depuis Dec 2006
1'942'871 Visiteurs
4'218'042 Pages

Stats Nov 2010
82'909 Visiteurs
146'476 Pages
196 pays
Statistiques completes



Aidez-nous à traduire
nos tutoriaux!

REJOINGNEZ
l'équipe OpenManiak.
SYSLOG-NG - Le tutorial facile - Tutorial

PHP-Syslog-NG Tutorial
Dernière modif: Feb 02 2008


Outil
Tutorial
Ergonomie
Forum



Détails Phpsyslog-ng, c'est quoi?
Captures d'écran
Prérequis
Tutorial php-syslog-ng
Clients Syslog


Par défaut, syslog est installé sur une machine Debian ou Ubuntu.
La première chose à faire est d'installer syslog-ng en lieu et place de syslog et puis ensuite, le script php-syslog-ng.



1 - INSTALLER SYSLOG-NG

Deux gros avantages de syslog-ng comparé à syslog est l'amélioration de la sécurité de l'outil et la possibilité de filtrer en fonction de la source des logs.
Installons syslog-ng, il va alors désinstaller syslog.

#apt-get install syslog-ng



2 - INSTALLER PHP-SYSLOG-NG

Télécharger php-syslog-ng ici:

http://code.google.com/p/php-syslog-ng/downloads/list

Décomprésser le fichier tar.gz

#tar -xvf phpsyslogng-2.8.tar.gz
Déplacer le dossier à l'intérieur du dossier apache2, par exemple:

#mv /home/po/Desktop/phpsyslogng-2.8 /var/www/



3 - CONFIGURER SYSLOG-NG

La première chose à faire est de créer la base de données mysql syslog.

#mysql -u root -p syslog < /var/www/phpsyslogng-2.8/scripts/scripts/dbsetup.sql
Dans le même temps, nous allons créer trois utilisateurs mysql:

- syslogadmin, requis pour les sauvegardes.
- sysloguser
- syslogfeeder, requis pour envoyer les données vers la base de données.

Ajouter un mot de passe pour syslogadmin et syslogfeeder:

mysql -u root -p
SET PASSWORD FOR syslogfeeder@localhost = PASSWORD ('syslogfeederpassword');
SET PASSWORD FOR syslogadmin@localhost = PASSWORD ('syslogadminpassword');
Maintenant, nous devons entrer dans le fichier /etc/syslog-ng/syslog-ng.conf pour configurer l'outil.
Décommenter la ligne suivante pour recevoir des logs depuis des machines distantes:

udp();
Nous devons envoyer les logs dans la base de données MySQL.

Ajouter les lignes suivantes pour dire à syslog-ng où envoyer les données:

# pipe messages to /var/log/mysql.pipe to be processed by mysql

destination d_mysql { pipe("/var/log/mysql.pipe" template("INSERT INTO logs
(host, facility, priority, level, tag, datetime, program, msg)
VALUES ( '$HOST', '$FACILITY', '$PRIORITY', '$LEVEL', '$TAG', '$YEAR-$MONTH-$DAY $HOUR:$MIN:$SEC',
'$PROGRAM', '$MSG' );\n") template-escape(yes)); };

# Ci-dessous, tous les sources des logs sont envoyés vers la base de données MySQL.

log { source(s_all); destination(d_mysql); };
Vous pouvez trouver les lignes de configuration ci-dessus dans le fichier .../"phpsyslog-ng directory"/scripts/syslog.conf


4 - SCRIPTS ET CRONS

Maintenant, nous devons créer le fichier temporaire d'insertion MySQL:

#mkfifo /var/log/mysql.pipe
Nous devons pousser les logs dans la base de données avec un script bash:

Créer un nouveau fichier et insérer y la ligne ci-dessous, soyez attentif à sauver le fichier avec une extension .sh
Si vous ne vouler par créer le fichier, vous pouvez le trouver dans le dossier phpsyslog, puis /scripts/syslog2mysql.sh. (n'oublier pas de configurer l'utilisateur et le mot de passe MySQL)

#!/bin/bash

if [ ! -e /var/log/mysql.pipe ]
then
mkfifo /var/log/mysql.pipe
fi
while [ -e /var/log/mysql.pipe ]
do mysql -u syslogfeeder --password=syslogfeederpassword syslog < /var/log/mysql.pipe >/dev/null
done
Le script signifie que si le fichier mysql.pipe n'existe, il est créé.
Ensuite, tant que le fichier mysql.pipe existes, ouvrir une connexion MySQL et envoyer les données en tampon dans la base de données.

Lancer le script. Pour nous:

/var/www/phpsyslogng-2.8/scripts/syslog2mysql.sh
Il est sage d'ajouter une ligne dans la crontab de root pour démarrer le script au démarrage du serveur.

# crontab -e -u root
@reboot root /var/www/phpsyslogng-2.8/scripts/syslog2mysql.sh >> /var/log/mysql.log 2>&1
La commande crontab va mettre à jour le fichier /var/spool/cron/crontabs/root.

Comme avec chaque collecteur de log, une stratégie sur la manière de gérer la quantité de log doit être crée.
Pour ça, un très joli script appelé logrotate.php est fourni dans le dossier .../phpsyslogng-2.8/scripts .

Avec ce script,
- il est possible de purger fréquemment la table MySQL log and la sauvegarder.
- il est possible de supprimer les anciens enregistrements.

Ouvrer le fichier .../phpsyslogng-2.8/scripts/logrotate.php et vérifier à la ligne 6, que la variable $APP_ROOT corresponds à ce que vous avez. Dans notre fichier de configuration:

$APP_ROOT = '/var/www/phpsyslogng-2.8';
Dans la partie "MISC FUNCTIONALITY" du fichier /var/www/phpsyslogng-2.8/config/config.php, vous pouvez configurer des paramètres liés au fichier logrotate.php. Nous avons choisi de laisser les paramètres par défaut.

DAns la partie "DATABASE CONNECTION INFO" du fichier, nos devons paramétrer le mot de passe pour l'utilisateur MySQL syslogadmin. Nous l'avons déjà configuré précédemment. Cette utilisateur MySQL aura assez de droits pour sauvegarder les tables MySQL .

define('DBADMINPW', 'syslogadminpassword');
La dernière chose à faire est d'activer extention=mysql.so dans le fichier /etc/php5/cli/php.ini.
Rechercher la ligne avec extension=mysql.so et enlever le point virgule au début de la ligne.

extension=mysql.so
Essayer de lancer le script logrotate.php:

#php5 /var/www/phpsyslogng-2.8/scripts/logrotate.php
Si vous avez quelque chose comme:

Starting logrotate
No DB link


Cela veut dire que extension=mysql.so n'est pas décommenté dans le fichier php.ini.

Si tous est okay, vous devriez voir quelque chose comme ceci:

Starting logrotate
2006-07-29 22:42:50
Log rotate ended successfully


La dernière chose à faire est d'ajouter ce script dans un cron mensuel par exemple.
Il faut faire attention que seulement root peut accéder au fichier.

# chmod 700 /var/www/phpsyslogng-2.8/scripts/logrotate.php
# chown root:root /var/www/phpsyslogng-2.8/scripts/logrotate.php

#crontab -e -u root
00 30 1 * * /var/www/phpsyslogng-2.8/scripts/logrotate.php
Le script sera lancé le premier jour de chaque mois à 00:30 la nuit.