Différences entre les versions de « Syslog »

De BlaxWiki
Aller à la navigationAller à la recherche
 
(4 versions intermédiaires par le même utilisateur non affichées)
Ligne 16 : Ligne 16 :
recoit des logs des différents serveurs, cela permet de gagner du temps, la résolution dns étant inutiles. On peut en plus renseigner le /etc/hosts du serveur syslog avec le nom des  
recoit des logs des différents serveurs, cela permet de gagner du temps, la résolution dns étant inutiles. On peut en plus renseigner le /etc/hosts du serveur syslog avec le nom des  
machines qui envoient les logs.
machines qui envoient les logs.
=== Lignes importantes ===
<pre>
# Lorsque le serveur rsyslog recoit des logs externe, il faut ajouter la ligne ci dessous juste après les règles distantes, de cette facon rsyslog drop tout ce qui ne contient pas
le nom de la machine locale (ici syslog1-so), cela evite que les logs des autres machines soient aussi stockés en local dans /var/log/messages en plus du fichier de logs spécifié dans
les template.
:hostname, !contains, "syslog1-so" ~
Sinon on peut aussi ajouter à TOUTES les règles locales, à la ligne à la suite de la règles un & ~
if ($HOSTNAME == 'web1-so' or $HOSTNAME == 'web2-so') and ($syslogtag contains 'Enterpri) ..
& ~
</pre>


=== Explications ===
=== Explications ===
Ligne 253 : Ligne 238 :
la facility mail.  
la facility mail.  


</pre>
=== Eviter les doublons ===
<pre>
# Lorsque le serveur rsyslog recoit des logs externe, il faut ajouter la ligne ci dessous juste après les règles distantes, de cette facon rsyslog drop tout ce qui ne contient pas
le nom de la machine locale (ici syslog1-so), cela evite que les logs des autres machines soient aussi stockés en local dans /var/log/messages en plus du fichier de logs spécifié dans
les template.
:hostname, !contains, "syslog1-so" ~
Sinon on peut aussi ajouter à TOUTES les règles qui gérent les logs distants recus, à la ligne à la suite de la règles un & ~
$template vtd_acp_log,"/var/log/vtd_acp.log"
if $HOSTNAME == 'web-acp-1' and $syslogfacility-text == 'user' then ?vtd_acp_log
& ~
$template vtd_errors_acp_log,"/var/log/vtd_errors_acp.log"
if $HOSTNAME == 'web-acp-1' and $syslogfacility-text == 'user' then ?vtd_errors_acp_log& ~
</pre>
=== Concaténation de logs ===
<pre>
On peut parfois avec besoin de concaténer des fichiers de logs. Voir les outils logresolvemerge.pl (sur le site d'awstats) ou la fonction diff avec l'option -D (ex : diff -DMERGE
log_serveur1 log_serveurB > merge && egrep -v  '#if|#endif' merge > squid_access.log). Faire un backup des logs avant de lancer ces commandes
</pre>
</pre>


Ligne 333 : Ligne 341 :
=== Rsyslog export de log ===
=== Rsyslog export de log ===
Certain programmes ne peuvent pas envoyer leur log vers rsyslog via une locale (mysql, php, nginx), ce qui peut etre génant si on veut exporter facilement ses logs vers un serveur syslog.
Certain programmes ne peuvent pas envoyer leur log vers rsyslog via une locale (mysql, php, nginx), ce qui peut etre génant si on veut exporter facilement ses logs vers un serveur syslog.
On peut cependant mettre une configuration rsyslog en local pour qu'il lise les logs locaux et les envoie ailleurs, voir cette [https://{{SERVERNAME}}/BENPERSO/configuration-claranet/serveur/syslog/rsyslog-export.conf configuration]
On peut cependant mettre une configuration rsyslog en local pour qu'il lise les logs locaux et les envoie ailleurs, voir cette [https://{{SERVERNAME}}/BENPERSO/configuration-claranet/serveur/syslog/rsyslog-export.conf page] pour les configurations sur les serveurs qui vont envoyer leur logs locaux vers un serveur syslog.
 
Config sur le rsyslog qui va recevoir les logs :
<pre>
# Receiving Messages from Remote Hosts
$RuleSet remote
 
# Template
$template RemoteNGINXaccess,"/opt/data/logs/%fromhost-ip%/nginx/nginx_access.log-%$YEAR%%$MONTH%%$DAY%"
$template RemoteNGINXerror,"/opt/data/logs/%fromhost-ip%/nginx/nginx_error.log-%$YEAR%%$MONTH%%$DAY%"
 
 
# Rules
if $syslogtag == 'nginx_access_log:' then ?RemoteNGINXaccess
& ~
#if $syslogtag == 'nginx_access_log:' then ~
if $syslogtag == 'nginx_error_log:' then ?RemoteNGINXerror
& ~
if $programname == 'php' then ?RemotePHP
& ~
if $programname contains 'sendmail' then ?RemoteSENDMAIL
& ~
if $programname contains 'dovecot' then ?RemoteDOVECOT
& ~
........
</pre>


=== Rsyslog vers un autre serveur rsyslog ===
=== Rsyslog vers un autre serveur rsyslog ===

Version actuelle datée du 26 juillet 2013 à 12:42


Docs et url[modifier]

Doc générale Syslog.pdf

Rsyslog.conf exemple de conf assez complète

Syslog-ng.conf exemple de conf assez complète

Présentation poussée et exemple pour syslog&syslog-ng

Voici des scripts pour la maintenance d'un serveur syslog-ng : Make-Links-To-Current-Logs-forsyslog-Aulne.sh / Compress-Syslog-Logs-Aulne.sh Script de gestion des logs

Important : Sur un serveur de log (rsyslog, syslog-ng ou autres), il faut le configurer (généralement dans le script d'init, -x pour rsyslogd) afin qu'il ne fasse pas de résolution dns lorsqu'il recoit des logs des différents serveurs, cela permet de gagner du temps, la résolution dns étant inutiles. On peut en plus renseigner le /etc/hosts du serveur syslog avec le nom des machines qui envoient les logs.

Explications[modifier]

Chaque ligne est de la forme : Service.Priorité Destination

Service (ou facility) correspond au type de programme (Démon, Noyau,...) et doit être l’un de ces mots-clés : auth, authpriv, cron, daemon, kern, lpr, mail, mark, news, security (identique à auth).

auth ou security  	Messages de sécurité et d'authentification.
authpriv 	        La même chose que précédemment, mais logs plus privés 
cron 	                Messages de crontab et de at
daemon 	                Messages systémes générés par le daemon
ftp 	                Messages du serveur ftp
kern 	                Messages du noyau
lpr 	                Messages du serveur d'impression
mail 	                Messages du serveur de messagerie
news 	                Messages du serveur de news
syslog 	                Messages de syslog lui-même
user 	                Messages générés par le programme en cours d'un utilisateur
uucp 	                Messages UUCP
+ 8 autres, de LOCAL0 à LOCAL7, peuvent être personnalisés et utilisés par d'autre daemons, non standards. 


Priorité représente le niveau de gravité du message et doit être l’un de ces mots clés : debug, info, notice, warning, warn (identique à warning), err, error (identique à err), crit, alert, emerg, panic (identique à emerg). ATTENTION : En indiquant un niveau, syslog enverra les messages de ce niveau et tous les messages des niveaux plus importants. Donc en mettant « debug », syslog enverra tous les messages (de debug à panic). Puis la liste de sévérité, classée de la moins grave à la plus grave. Tous les messages de sévérité plus graves sont inclus, ainsi si vous choisissez sévérité err, vous avez aussi les messages crit, alert, et emerg.

7 	debug 	Messages de debogage
6 	info 	Messages d'information
5 	notice 	Messages un peu plus importants que les messages info
4 	warning ou warn 	Messages d'avertissement
3 	err 	Messages d'erreur
2 	crit 	Situation critique
1 	alert 	Situation critique nécessitant une intervention immédiate
0 	emerg ou panic 	Système inutilisable
Le signe ";" pour séparer plusieurs Services .
Il est possible de mettre plusieurs services pour une même destination en utilisant le «  ; » :
Service1.Priorité1; Service2.Priorité2     Destination
Le signe « , » pour plusieurs « Services » avec une même « Priorité ».''' Il est possible d’indiquer plusieurs « Services » pour le même niveau de « Priorité » avec le signe « , ». 
La ligne suivante envoie dans le fichier « mail_news » les messages en provenance des « Services » « mail » et « new » dont la « Priorité » est supérieure ou égale à « info ». :
mail,news.info  /var/log/mail_news
Le signe « = » pour ne traiter que la « Priorité » indiquée. Il est possible de n’envoyer que les messages d’une seule « Priorité » (sans les « Priorités » de niveaux supérieures) 
avec le singe « = ». Exemple :
mail.=err  /var/log/mail.err

Le signe « * » pour traiter toutes les « Services ». La commande suivante permet d’envoyer les messages d’erreurs de toutes les « Services » dans le fichier « error »

  • .error /var/log/error

Le signe « * » pour traiter toutes les « Priorités ». Le signe « * » permet d’indiquer que l’on souhaite toutes les « Priorités » (Le résultat est le même qu’en mettant « debug », mais c’est plus lisible). Exemple :

mail.* /var/log/mail

Le signe « * » pour envoyer des messages sur toutes les consoles ouvertes. La ligne suivante, permet d’envoyer tous les messages d’erreurs sur toutes les consoles ouvertes grâce au signe « * » placé en destination à la fin de la ligne :

  • .alert *

Le signe «  ! » pour exclure les niveaux supérieurs ou égaux à la « Priorité » indiquée. Le signe «  ! » permet d’indiquer que l’on souhaite exclure le niveaux indiqué et tous les niveaux supérieurs à celui indiqué. La ligne suivante, permet d’envoyer dans le fichier « mail » tous les messages sauf ceux supérieurs ou égaux à la « Priorité » « warn » :

mail.*;mail.!warn /var/log/mail

La ligne suivante permet d’envoyer dans le fichier « mail » tous les messages supérieurs ou égaux à la « Priorité » « notice » et inférieure à la « Priorité » « crit » :

mail.notice;mail.!crit /var/log/mail

Le signe « - » pour améliorer les performances en écriture. Le signe « - » est utilisé devant les chemins de fichiers les moins critiques pour améliorer les performances en écriture au risque de perdre des données en cas de crash du système (pas de synchronisation des fichiers). Cette ligne enregistre tous les messages de la « Service » « mail » dans le fichier «  mail » :

mail.* -/var/log/mail

Le signe « \ » pour écrire une instruction sur plusieurs lignes. La commande suivante écrite sur deux lignes grâce au signe « \ », permet d’envoyer tous les messages de mails ou de news dans le fichier « mail_news » : mail.*;\ news.* /var/log/mail_news

Envoyer les logs dans une console. La ligne suivante permet d’envoyer tous les logs dans la console « tty8 » (CTRL+ALT+F8) :

  • .* /dev/tty8


Tags


# Définit le nom d'un template pour mettre les logs dans le répertoire associé au template
$template df_admin_ed_application_message_acp_log,"/opt/data/log/syslog/enterprise-directory/ACP/%$YEAR%/%$MONTH%/%$DAY%/messages.log"
# Les logs iront dans le template ?df_admin_ed_application_message_acp_log
if $HOSTNAME == 'web-acp-1' and $syslogfacility-text == 'user' and ($syslogseverity-text == 'debug' or $syslogseverity-text == 'info' or $syslogseverity-text == 'notice') and 
($msg contains 'Referential' or $msg contains 'Directory' or $msg contains 'Execute batch URL') then ?df_admin_ed_application_message_acp_log

if ($HOSTNAME == 'web1-so' or $HOSTNAME == 'web2-so') and ($syslogtag contains 'Enterprise-Directory_Apache_Rewrite' or $syslogtag contains 'Enterprise-Directory_Apache' or $syslogtag
contains 'Referential-CMD_Apache' or $syslogtag contains 'Referential-LMD_Apache'  or $syslogtag contains 'Referential-CMD_Apache_Rewrite'  or $syslogtag contains 
'Referential- LMD_Apache_Rewrite') and not ($msg contains '172.25.3.156' or $msg contains '172.25.3.157' or $msg contains 'bytes of entropy' or $msg contains 'ERROR' or $syslogtag 
contains 'ERROR') then :ommysql:172.26.3.68,logs_web-apps-ED,rsyslog,XfNkHeb3


Exemples

Le signe «  ; » pour séparer plusieurs « Services »

Il est possible de mettre plusieurs services pour une même destination en utilisant le «  ; » :

Service1.Priorité1; Service2.Priorité2     Destination
Le signe « , » pour plusieurs « Services » avec une même « Priorité »

Il est possible d’indiquer plusieurs « Services » pour le même niveau de « Priorité » avec le signe « , ». La ligne suivante envoie dans le fichier « mail_news » les messages en
provenance des « Services » « mail » et « new » dont la « Priorité » est supérieure ou égale à « info ». :

mail,news.info  /var/log/mail_news
Le signe « = » pour ne traiter que la « Priorité » indiquée

Il est possible de n’envoyer que les messages d’une seule « Priorité » (sans les « Priorités » de niveaux supérieures) avec le singe « = ». Exemple :

mail.=err  /var/log/mail.err
Le signe « * » pour traiter toutes les « Services »

La commande suivante permet d’envoyer les messages d’erreurs de toutes les « Services » dans le fichier « error »

*.error  /var/log/error
Le signe « * » pour traiter toutes les « Priorités »

Le signe « * » permet d’indiquer que l’on souhaite toutes les « Priorités » (Le résultat est le même qu’en mettant « debug », mais c’est plus lisible). Exemple :

mail.*  /var/log/mail
Le signe « * » pour envoyer des messages sur toutes les consoles ouvertes

La ligne suivante, permet d’envoyer tous les messages d’erreurs sur toutes les consoles ouvertes grâce au signe « * » placé en destination à la fin de la ligne :

*.alert  *
Le signe «  ! » pour exclure les niveaux supérieurs ou égaux à la « Priorité » indiquée

Le signe «  ! » permet d’indiquer que l’on souhaite exclure le niveaux indiqué et tous les niveaux supérieurs à celui indiqué. La ligne suivante, permet d’envoyer dans le fichier
« mail » tous les messages sauf ceux supérieurs ou égaux à la « Priorité » « warn » :

mail.*;mail.!warn  /var/log/mail

La ligne suivante permet d’envoyer dans le fichier « mail » tous les messages supérieurs ou égaux à la « Priorité » « notice » et inférieure à la « Priorité » « crit » :

mail.notice;mail.!crit  /var/log/mail
Le signe « - » pour améliorer les performances en écriture

Le signe « - » est utilisé devant les chemins de fichiers les moins critiques pour améliorer les performances en écriture au risque de perdre des données en cas de crash du système
(pas de synchronisation des fichiers). Cette ligne enregistre tous les messages de la « Service » « mail » dans le fichier « mail » :

mail.*  -/var/log/mail

Le signe « \ » pour écrire une instruction sur plusieurs lignes
La commande suivante écrite sur deux lignes grâce au signe « \ », permet d’envoyer tous les messages de mails ou de news dans le fichier « mail_news » :
mail.*;\
news.*   /var/log/mail_news

La ligne suivante permet d’envoyer tous les logs dans la console « tty8 » (CTRL+ALT+F8) :
*.*  /dev/tty8

    # Les messages noyau sont tout d'abord stockés dans
    # le fichier kernel, les messages critiques et au-dessus
    # sont retransmis vers un autre hôte et vers
    # la console
    #
    kern.*                       /var/adm/kernel
    kern.crit                    @finlandia
    kern.crit                    /dev/console
    kern.info;kern.!err          /var/adm/kernel-info

La première règle dirige tous les messages de facility kernel vers le fichier /var/adm/kernel.

La seconde déclaration dirige tous les messages noyau de priorité crit et au-dessus vers l'hôte distant finlandia. Ceci est utile, car si l'hôte se crashe et que le disque subit des 
erreurs irréparables vous pourriez ne plus arriver à lire les messages stockés. S'ils sont aussi sur un hôte distant, vous pouvez encore essayer de trouver les raisons du crash.

La troisième règle dirige ces même messages vers la console courante, aussi l'utilisateur qui travaille sur la machine les recevra, aussi.

La quatrième ligne indique à syslogd de sauvegarder tous les messages noyau arrivant avec un priorité de info à warning dans le fichier /var/adm/kernel-info. Tout de err et au-dessus 
est exclu.

    # Tcp wrapper journalise selon mail.info, nous affichons
    # toute la connexion sur tty12
    #
    mail.=info                   /dev/tty12

Ceci dirige tous les messages utilisant mail.info (dans les sources LOG_MAIL | LOG_INFO) vers /dev/tty12, la 12ème console. Par exemple le tcp wrapper tcpd(8) utilise ceci par défaut.

    # Stocke tout ce qui concerne le courriel dans
    # le fichier mail
    #
    mail.*;mail.!=info           /var/adm/mail

Ce modèle correspond à tous les messages arrivant avec la facility mail, sauf ceux de priorité info. Ils seront stockés dans le fichier /var/adm/mail.

    # Journalise tout message mail.info ou news.info dans info
    #
    mail,news.=info              /var/adm/info

Ceci extraira tous les messages arrivant avec soit mail.info soit news.info et les stockera dans le fichier /var/adm/info.

    # Journalise les messages info et notice dans
    # le fichier messages
    #
    *.=info;*.=notice;\
            mail.none  /var/log/messages

Ceci laissera syslogd journaliser tous les messages qui arrivent avec la priorité soit info soit notice dans le fichier /var/log/messages, sauf les messages qui utilisent
la facility mail. 

Eviter les doublons[modifier]

# Lorsque le serveur rsyslog recoit des logs externe, il faut ajouter la ligne ci dessous juste après les règles distantes, de cette facon rsyslog drop tout ce qui ne contient pas
le nom de la machine locale (ici syslog1-so), cela evite que les logs des autres machines soient aussi stockés en local dans /var/log/messages en plus du fichier de logs spécifié dans 
les template.
:hostname, !contains, "syslog1-so" ~

Sinon on peut aussi ajouter à TOUTES les règles qui gérent les logs distants recus, à la ligne à la suite de la règles un & ~

$template vtd_acp_log,"/var/log/vtd_acp.log"
if $HOSTNAME == 'web-acp-1' and $syslogfacility-text == 'user' then ?vtd_acp_log
& ~

$template vtd_errors_acp_log,"/var/log/vtd_errors_acp.log"
if $HOSTNAME == 'web-acp-1' and $syslogfacility-text == 'user' then ?vtd_errors_acp_log& ~

Concaténation de logs[modifier]

On peut parfois avec besoin de concaténer des fichiers de logs. Voir les outils logresolvemerge.pl (sur le site d'awstats) ou la fonction diff avec l'option -D (ex : diff -DMERGE 
log_serveur1 log_serveurB > merge && egrep -v  '#if|#endif' merge > squid_access.log). Faire un backup des logs avant de lancer ces commandes

Rsyslog mode asynchrone[modifier]

En rajoutant ces lignes, cela permet de tout logguer en asynchrone

# File write in asynchronous mode and
# IO buffer config
#
$OMFileFlushInterval 3600
$OMFileIOBufferSize 128k
$OMFileAsyncWriting on
$OMFileFlushOnTXEnd on

Rsyslog spool[modifier]

Cas où notre serveur envoie des logs vers un serveur syslog, et que ce serveur syslog tombe en panne, on peut vouloir les garder en local jusqu'à ce que le serveur syslog remonte :
$WorkDirectory /rsyslog/spool # where to place spool files
$ActionQueueFileName uniqName # unique name prefix for spool files
$ActionQueueMaxDiskSpace 1g   # 1gb space limit (use as much as possible)
$ActionQueueSaveOnShutdown on # save messages to disk on shutdown
$ActionQueueType LinkedList   # run asynchronously
$ActionResumeRetryCount -1    # infinite retries if host is down

Rsyslog failover[modifier]

Sur des serveurs qui envoient leur log vers uniquement un seul serveur rsyslog, on peut vouloir qu'ils envoient leur log vers un serveur rsyslog de secours dans le cas où le premier
tombe en panne, mettre ses lignes dans la conf rsyslog du serveur qui envoie ses logs :
$ActionResumeRetryCount 1    # infinite retries if host is down
$ActionResumeInterval 1
*.* @@172.30.100.161 #server rsyslog primaire
$ActionExecOnlyWhenPreviousIsSuspended on
& @@172.30.100.162 #serveur rsyslog de spare
& /var/spool/rsyslog/buffer.log
$ActionExecOnlyWhenPreviousIsSuspended off

Rsyslog concataination de log[modifier]

Dans le cas ici présent nous avons 2 serveurs (lb1.randstad.fr & lb2.randstad.fr) avec un haproxy qui envoie ses logs sur local0. On veut que les deux services HAProxy loggent à la fois en local et sur le deuxième serveur, et que les logs soient concaténés dans /var/log/haproxy/haproxy.log :

LB1 = 127.0.0.1 + 192.168.203.122
LB2 = 127.0.0.1 + 192.168.203.121
  • Ajout dans le rsyslog.conf des 2 serveurs :
$PreserveFQDN on
$IncludeConfig /etc/rsyslog.d/*.conf
$ModLoad imtcp.so  # load module
$InputTCPServerRun 514 # start up TCP listener at port 514
$ModLoad imudp.so  # provides UDP syslog reception
$UDPServerRun 514 # start a UDP syslog server at standard port 514
  • Création de sur les 2 serveurs de /etc/rsyslog.d/haproxy.conf
lb1 :
if $programname == 'haproxy' and $syslogfacility-text == 'local0' and ($hostname == 'lb1.randstad.fr' or $hostname == 'lb2.randstad.fr') then /var/log/haproxy/haproxy.log
if $programname == 'haproxy' and $syslogfacility-text == 'local0' and $hostname == 'lb1.randstad.fr' then @@lb2.randstad.fr:514

lb2 :
if $programname == 'haproxy' and $syslogfacility-text == 'local0' and ($hostname == 'lb1.randstad.fr' or $hostname == 'lb2.randstad.fr') then /var/log/haproxy/haproxy.log
if $programname == 'haproxy' and $syslogfacility-text == 'local0' and $hostname == 'lb2.randstad.fr' then @@lb1.randstad.fr:514
  • /etc/hosts ( à modifier et bien mettre le fqdn du serveur en premier sinon rsyslog envoie les logs a son collègue avec le hostname "localhost")
lb1 :
127.0.0.1       lb1.randstad.fr lb1 localhost localhost.localdomain localhost4 localhost4.localdomain4
192.168.203.122 lb2.randstad.fr lb2

lb2 :
127.0.0.1       lb2.randstad.fr lb2 localhost localhost.localdomain localhost4 localhost4.localdomain4
192.168.203.121 lb1.randstad.fr lb1

Rsyslog export de log[modifier]

Certain programmes ne peuvent pas envoyer leur log vers rsyslog via une locale (mysql, php, nginx), ce qui peut etre génant si on veut exporter facilement ses logs vers un serveur syslog. On peut cependant mettre une configuration rsyslog en local pour qu'il lise les logs locaux et les envoie ailleurs, voir cette page pour les configurations sur les serveurs qui vont envoyer leur logs locaux vers un serveur syslog.

Config sur le rsyslog qui va recevoir les logs :

# Receiving Messages from Remote Hosts
$RuleSet remote

# Template
$template RemoteNGINXaccess,"/opt/data/logs/%fromhost-ip%/nginx/nginx_access.log-%$YEAR%%$MONTH%%$DAY%"
$template RemoteNGINXerror,"/opt/data/logs/%fromhost-ip%/nginx/nginx_error.log-%$YEAR%%$MONTH%%$DAY%"


# Rules
if $syslogtag == 'nginx_access_log:' then ?RemoteNGINXaccess
& ~
#if $syslogtag == 'nginx_access_log:' then ~
if $syslogtag == 'nginx_error_log:' then ?RemoteNGINXerror
& ~
if $programname == 'php' then ?RemotePHP
& ~
if $programname contains 'sendmail' then ?RemoteSENDMAIL
& ~
if $programname contains 'dovecot' then ?RemoteDOVECOT
& ~
........

Rsyslog vers un autre serveur rsyslog[modifier]

Il peut arriver que l'on veuille avoir des logs en local et qui soient aussi envoyés vers un autre serveur de log. Il faut dans ce cas doubler la condition pour en mettre une en local, et l'autre vers le serveur en question

$template testremote_log,"/var/log/test.log"
if ($syslogfacility-text == 'user') and ($syslogseverity-text == 'warn') then ?testremote_log
if ($syslogfacility-text == 'user') and ($syslogseverity-text == 'warn') then @@172.26.1.66:514

Syslog-ng mode relay[modifier]

Il peut arriver que l'on souhaite qu'un serveur syslog envoie une copie des logs recus à un autre serveur syslog. Il y a un option à spécifier pour que les logs ne soient pas réécrits lors du transfert. Cela est très util lorsque l'on a 2 serveurs de logs (pour plus de sécurité), mais que certain équipement ne peuvent envoyer leur log que sur une ip. Un serveur syslog-ng a été installé sur le serveur A syslog1 (qui écoute sur les ip 192.168.26.13 & 217.174.199.228) afin de forwarder les logs qu'il recoit sur lui meme et sur un serveur B (172.26.0.14 & 92.43.252.217). Le serveur A possède aussi un serveur rsyslog (qui écoute sur les ip 192.168.26.14 & 217.174.199.227). Le serveur B syslog2 possède juste un serveur rsyslog (qui écoute sur 172.26.0.14 & 92.43.252.217)


Syslog-ng a été recompilé de la manière suivante afin de ne pas réécrire l'adresse ip source :

./configure --prefix=/opt/applis/syslog-ng-2.0.10-2 --enable-spoof-source

Pour compiler syslog-ng avec l'option --enable-spoof-source, il faut installer le libnet, ce dernier a été installé via le rpm libnet-1.1.2.1-2.2.el5.rf.i386.rpm (disponible sur http://packages.sw.be/libnet/)

  • Config syslog-ng du serveur A
options {
        create_dirs(yes);
        sync(1);
        time_reopen(10);
        log_fifo_size(100);
        use_fqdn(no);
        long_hostnames(off);
        use_dns(no);
        dns_cache(no);
        keep_hostname(no);
        use_time_recvd(yes);
        perm(0644);
        chain_hostnames(no);
        stats_freq(0);
        keep-hostname(yes);
};


source local {
        unix-stream("/dev/log");
        internal();
        pipe("/proc/kmsg");
};

source network_in {
        udp(ip(192.168.26.13) port(514));
};

source network_out {
        udp(ip(217.174.199.228) port(514));
};



destination loghost_in {
        udp("192.168.26.14" port(514) spoof_source(yes));
        udp("172.26.0.14" port(514) spoof_source(yes));
};

destination loghost_out {
        udp("217.174.199.227" port(514) spoof_source(yes));
        udp("92.43.252.217" port(514) spoof_source(yes));
};


log {
        source(network_in);
        destination(loghost_in);
};

log {
        source(network_out);
        destination(loghost_out);
};
  • Config rsyslog du serveur A
#Le serveur écoute juste en udp mais il est possible de faire la meme chose en tcp
$ModLoad immark.so # provides --MARK-- message capability
$ModLoad imuxsock.so # provides support for local system logging (e.g. via logger command)
$ModLoad imklog.so # kernel logging (formerly provided by rklogd)
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat

$DirCreateMode 0755
$FileCreateMode 0644
$ModLoad imtcp.so  # load module
$ModLoad imudp.so  # provides UDP syslog reception
$UDPServerAddress 192.168.26.14
$UDPServerRun 514 # start a UDP syslog server at standard port 514
$UDPServerAddress 217.174.199.227
$UDPServerRun 514
$template byhost,"/data/local/syslog/by_ip/%fromhost-ip%/%$YEAR%/%$MONTH%/%$DAY%.log"
if $fromhost-ip != '127.0.0.1' then ?byhost


:fromhost-ip, !contains, "127.0.0.1" ~
$template local,"/data/local/syslog/by_ip/192.168.26.14/%$YEAR%/%$MONTH%/%$DAY%.log"

:hostname, !contains, "syslog1" ~
kern.*                                                  /var/log/kernel;RSYSLOG_TraditionalFileFormat
.....


  • Config rsyslog du serveur B
$ModLoad immark.so # provides --MARK-- message capability
$ModLoad imuxsock.so # provides support for local system logging (e.g. via logger command)
$ModLoad imklog.so # kernel logging (formerly provided by rklogd)
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat

$DirCreateMode 0755
$FileCreateMode 0644
$ModLoad imtcp.so  # load module
$InputTCPServerRun 514 # start up TCP listener at port 514

# UDP Syslog Server:
$ModLoad imudp.so  # provides UDP syslog reception
$UDPServerRun 514 # start a UDP syslog server at standard port 514

$MainMsgQueueSize 100000

$template byhost,"/data/local/syslog/by_ip/%fromhost-ip%/%$YEAR%/%$MONTH%/%$DAY%.log"
if $fromhost-ip != '127.0.0.1' then ?byhost


:fromhost-ip, !contains, "127.0.0.1" ~
$template local,"/data/local/syslog/by_ip/172.26.0.14/%$YEAR%/%$MONTH%/%$DAY%.log"

:hostname, !contains, "syslog2" ~
kern.*                                                  /var/log/kernel;RSYSLOG_TraditionalFileFormat
.....