Centraliser ses logs avec Syslog-ng
[30 mn de lecture - paru le 10/7/2005 11:11:11 AM - Public : Débutant]
|
   
|
Auteur
5 Intégration mySQL-PHP avec Php-Syslog-NG
Enregistrer les logs de plusieurs systèmes, c'est bien, s'y retrouver à
travers une interface claire et conviviale, c'est mieux.
A ce titre, il nous semble judicieux d'installer le système
Php-syslog-NG. Ce module permet d'afficher les logs reçus grâce aux
entrées d'un serveur mySQL, et de les trier comme bon nous semble. Il
est donc complètement indispensable pour l'administrateur.
5.1 Installation des serveurs
Il faut avant tout installer le serveur
de base de données mySQL afin de stocker les différents logs reçus par
syslog-ng, ainsi que le serveur Apache permettant d'intepréter les
pages écrites en php.
Installation du serveur mySQL et initialisation du compte root
# apt-get mysql-server-5.0 # mysql -u root mysql> USE mysql; mysql> UPDATE user -> SET password = PASSWORD('motdepass') -> WHERE user = 'root'; mysql> flush privileges; mysql> exit ; |
Vous pouvez vérifier si votre serveur mySQL en vous
connectant dessus via la commande
« mysql -u root –p motdepass ». Si vous
utilisez une autre machine pour stocker votre base mySQL, n’oubliez pas
d’installer un client mySQL sur votre serveur syslog-ng.
Installation du client mySQL
# apt-get install mysql-client |
Enfin, autorisez la machine à pouvoir accéder à votre serveur mySQL sur celui-ci.
Installation du serveur apache2 et de sa documentation
$ apt-get install apache2 $ apt-get install apache2-doc ; |
Vous pouvez vérifier si votre serveur Apache marche convenablement en consultant l’adresse http://localhost/
sur votre browser préféré. Vous devez à présenter installer les
librairies php ainsi que le module phpmyadmin permettant de gérer
simplement votre serveur mySQL. Installation de PHP et de phpmyadmin
Vérifier tout marche convenablement en vous connectant sur http://localhost/phpmyadmin avec votre browser.
5.2 Synchronisation mySQL
Il faut maintenant intégrer le SGBD mySQL à ce
système de logs. Pour cela vous allez devoir créer un fichier fifo,
remplir celui-ci avec vos requêtes SQL, puis l’exécuter via mySQL. Il
faudra penser à l’exécuter continuellement ainsi qu’à sauver la base
mySQL.
Commençons par créer la table mySQL contenant les logs
CREATE TABLE logs ( host varchar(32) default NULL, facility varchar(10) default NULL, priority varchar(10) default NULL, level varchar(10) default NULL, tag varchar(10) default NULL, datetime datetime default NULL, program varchar(15) default NULL, msg text, seq bigint(20) unsigned NOT NULL auto_increment, PRIMARY KEY (seq), KEY host (host), KEY program (program), KEY datetime (datetime), KEY priority (priority), KEY facility (facility) ) TYPE=MyISAM;
|
Création du fichier fifo contenant les requêtes temporaires d'insertion
$mkfifo /var/log/mysql.pipe |
Construction de la requête SQL dans /etc/syslog-ng/syslog-ng.conf
# On place dans le fichier fifo les requêtes mySQL
destination d_tomysql { 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)); };
|
Création d’un fichier Bash syslog_mysql.sh permettant d’exécuter les requêtes
#! /bin/bash
if [ ! -e /var/log/mysql.pipe ]; then mkfifo /var/log/mysql.pipe fi while [ -e /var/log/mysql.pipe ] do if [ ! -e /var/run/syslog-ng.pid ] ; then exit 1; fi syslogstate=`ps -p $1 --no-heading | \ sed "s/[^0-9]//g" `;
if [ -z $syslogstate ] ; then exit 1; fi
mysql -h ip -u user --password=pass ipbase \ < /var/log/mysql.pipe done |
Etant donné que ce fichier Bash s'exécutera
continuellement, il est préférable de le lancer en tant que tâche de
fond au démarrage du système, comme nous avons pu le voir dans le
premier chapitre lors de l'édition du script de démarrage de syslog-ng /etc/init.d/syslog-ng.
Ici, si le serveur mySQL tombe, ou que ses tables
sont corrompues, on pourrait perdre l’ensemble de la base de logs. Il
est donc préférable de sauver la table des logs régulièrement.
Script de sauvegarde backup_syslog.sh
#!/bin/bash # Soyez sur d’avoir un mask 600 sur /var/log/backup /usr/bin/mysqlhotcopy --user=user –password=pass \ --allowold syslog /var/log/backup
|
Votre Syslog-ng est maintenant relié à votre SGBD
mySQL. Vous pourrez plus facilement faire le tri parmi ceux-ci et les
visualiser avec un outil tel que mySQL Front sous Windows. Cependant,
ces outils ne sont pas vraiment appropriés pour ce que nous voulons :
avoir un affichage clair et conci de nos logs. A ce titre, il semble
intéressant de nous intéresser à l'interface web offerte par
php-syslog-ng.
5.3 Installation et configuration de Php-syslog-NG.
Télécharger l'archive sur :
http://www.phpwizardry.com/php-syslog-ng/phpsyslogng-2.8.tar.gz
Installation de php-syslog-ng
$ tar -xvzf phpsyslogng-2.8.tar.gz \ /var/www/localhost/htdocs/php-syslog-ng # chown -R apache:apache \ /var/www/localhost/htdocs/php-syslog-ng
|
Editez le fichier config/config.php afin de préciser la base mySQL, l'utilisateur, etc...
Vous n'avez plus qu'à tester votre nouveau système de logs en allant sur http://localhost/php-syslog-ng/ avec votre browser.

Voila, votre application Syslog-ng est fonctionnelle et n’a plus qu’à être personnalisée.
Note : Si vous souhaitez arrêter le service syslog-ng, stopper-le absolument à l’aide du script se trouvant dans init.d, comme ceci :
# /etc/init.d/syslog-ng stop |
En
effet, si vous utilisez la simple commande « syslog-ng
stop », le service ne s’arrêtera pas, et il restera des processus
inutiles consommant des ressources CPU inutilement.
Votre interface est à présent
opérationnelle, ainsi que l'ensemble de votre système Syslog-NG. Afin
de clore ce dossier, il semblerait judicieux d'écrire un script Perl
permettant d'envoyer un email de notification, au cas où un log suspect
venait à arriver, à l'image d'une authentification ratée, où de l'arrêt
d'un daemon critique , comme Bind.
|