PDA

View Full Version : [HowTo] Rsyslog and SyslogNG


Visu@lSt@tion
05-09-2008, 04:35 PM
Je vais le faire en français et j'essayerai de le faire en anglais après.

Ca pourrait peut-être être utile de renommer Syslog-NG en Syslog car mainteant il n'est plus dépendant de php-syslog-ng

Donc en premier lieu, création de la table "logs" ou vous le souhaitez :

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`)
) ENGINE=MyISAM AUTO_INCREMENT=177087 DEFAULT CHARSET=latin1


ensuite créer un utilisateur ayant seulement les droits d'insertion. Donc ici, il se nommera "Monitoring" avec comme mot de passe : "pwMonitoring".

prendre son éditeur de texte favoris en Console (Vim pour moi) :
et ajouter ceci dans /etc/rsyslog.conf :

Au debut :
$ModLoad MySQL

A la fin :
$template sysMysql,"INSERT INTO logs (host,facility, priority,level,tag,datetime,program,msg) VALUES ('%HOSTNAME%','%syslogfacility%','%syslogpriority% ','%syslogseverity%','%syslogtag%', '%timereported:::date-mysql%','%programname%', '%msg%')", SQL
*.* ><db_adress>,<db_with_table_logs>,<db_user>,<db_password>;sysMysql


Relancer rsyslog avec :

/etc/init.d/rsyslog restart
service rsyslog restart


Installer votre module SyslogNG dans Centreon,
et voila vous avez votre syslog sans ajout supplémentaire.

Apres je vous laisse voir avec le man pour recevoir des trames TCP,UDP et le reste, sachant que ce serveur Syslog est vraiment tres simple d'utilisation.

De plus vous ne devez plus vous farcir un sale script en plus pour vider le pipe vers MySQL.

d'ailleur voici un script d'init pour syslog si vous ne souhaitez pas installer rsyslog vous faites la même chose avec la base de données, vous ne créez que la base logs puis :

vous utilisez ceci :

#!/bin/sh
# Syslog to Mysql

PATH=/usr/sbin:/usr/bin:/sbin:/bin
DESC="Syslog to Mysql"
NAME=syslog2mysql
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME

[ -x "/usr/bin/mysql" ] || exit 0

do_start()
{
[ ! -e /var/log/mysql.pipe ] && echo " (Creating $NAME pipe)." && mkfifo /var/log/mysql.pipe
if [ -e $PIDFILE ]; then
if ps -p $(cat $PIDFILE) >/dev/null; then
echo -n -e "\nError: $NAME seems to be already running!"
return 1
else
rm -f $PIDFILE
fi
fi
{
while [ -e /var/log/mysql.pipe ]
do
mysql -u syslogfeeder --password=<password> syslog < /var/log/mysql.pipe >/dev/null
sleep 1
done
} &
echo $! > $PIDFILE
}

#
# Function that stops the daemon/service
#
do_stop()
{
if [ -e $PIDFILE ]; then
PID=$(cat $PIDFILE)
if ps -p $PID >/dev/null; then
# get PID of child
CPID=$(pgrep -P $PID)
# kill script
kill $PID
# kill child
kill $CPID
rm -f $PIDFILE
return 0
else
echo -e "\nWarning: $NAME was not running."
echo -n -e "\nCleaning PID file"
rm -f $PIDFILE
return 1
fi
else
echo -n -e "\nWarning: $NAME was not running"
return 1
fi
}

case "$1" in
start)
[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
do_start
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
stop)
[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
do_stop
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
restart|force-reload)
#
# If the "reload" option is implemented then remove the
# 'force-reload' alias
#
log_daemon_msg "Restarting $DESC" "$NAME"
do_stop
case "$?" in
0|1)
do_start
case "$?" in
0) log_end_msg 0 ;;
1) log_end_msg 1 ;; # Old process is still running
*) log_end_msg 1 ;; # Failed to start
esac
;;
*)
# Failed to stop
log_end_msg 1
;;
esac
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
exit 3
;;
esac

:


Attention le pipe et la redirection de syslog vers le pipe est toujours obligatoire pour Syslog-ng

Je mettrai à jour le Howto ce we !

WAtt
05-09-2008, 05:25 PM
ca va finir sur le wiki tout ca:)

doc.centreon.com :)