<h2>But de ce document</h2>
<p class="spip">Ce document me sert de <strong class="spip">mémo</strong> pour <strong class="spip">Configurer Syslogd sur un système Linux</strong> (Testé sur Mandrake et Debian).</p>

<p class="spip">Je rappelle que <strong class="spip">syslogd</strong> est un démon permettant de rediriger vers des fichiers ou des terminaux les messages envoyés par d’autres démons, services ou par le noyau Linux.</p>

<p class="spip">Par exemple les messages d’informations ou d’erreurs émis par le système de messagerie (ex : Postfix), sont enregistrés grâce à syslogd dans le fichier « /var/log/mail.info ».</p>

<p class="spip">Il est également possible avec syslogd de centraliser sur un seul serveur les logs en provenance de routeurs ou d’autres serveurs sous Linux ou sous Windows.</p>

<h2>Configuration de /etc/syslog.conf</h2>
<p class="spip">Le fichier « <strong class="spip">/etc/syslog.conf</strong> » est le principal fichier de configuration du démon « <strong class="spip"> syslogd </strong> ».</p>

<h3>Syntaxe générale</h3>
<p class="spip">Chaque ligne de ce fichier indique le type du message (appelé <strong class="spip">Service </strong>ou<strong class="spip"> </strong><strong class="spip">Facility</strong> en anglais), le niveau de gravité (appelé <strong class="spip">Priorité</strong>) et sa <strong class="spip">Destination</strong> (fichier, terminal,...).</p>

<p class="spip">Par exemple, la ligne suivante permet d’envoyer les messages d’information des programmes de messagerie dans le fichier « mail.info » :</p>

<p class="spip"><code class='spip_code' dir='ltr'>mail.info        /var/log/mail.info</code></p>

<p class="spip">Chaque ligne est de la forme :</p>

<p class="spip"><code class='spip_code' dir='ltr'>Service.Priorité       Destination</code>
<br /></p>
<li> <strong class="spip">Service</strong> correspond au type de programme (Démon, Noyau,...) et doit être l’un de ces mots-clés : <strong class="spip">auth</strong>, <strong class="spip">authpriv</strong>, <strong class="spip">cron</strong>, <strong class="spip">daemon</strong>, <strong class="spip">kern</strong>, <strong class="spip">lpr</strong>, <strong class="spip">mail</strong>, <strong class="spip">mark</strong>, <strong class="spip">news</strong>, <strong class="spip">security</strong> (identique à auth), <strong class="spip">syslog</strong>, <strong class="spip">user</strong>, <strong class="spip">uucp</strong> et <strong class="spip">local0</strong> à <strong class="spip">local7.</strong>
<br /><li> <strong class="spip">Priorité</strong> représente le niveau de gravité du message et doit être l’un de ces mots clés : <strong class="spip">debug</strong>, <strong class="spip">info</strong>, <strong class="spip">notice</strong>, <strong class="spip">warning</strong>, <strong class="spip">warn</strong> (identique à warning), <strong class="spip">err</strong>, <strong class="spip">error</strong> (identique à err), <strong class="spip">crit</strong>, <strong class="spip">alert</strong>, <strong class="spip">emerg</strong>, <strong class="spip">panic</strong> (identique à emerg). <strong class="spip">ATTENTION</strong> : 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).
<br /><li> <strong class="spip">Destination</strong> représente la destination du message est peut être un chemin vers un fichier texte (ex : /var/log/mail.info) ou le nom d’une console pour envoyer les messages à l’écran (ex : /dev/tty8) ou un autre serveur (ex : @MonAutreServeur).
<p class="spip"><strong class="spip">Remarque </strong> : Chaque programme détermine les « <strong class="spip"> Services </strong> » et les « <strong class="spip"> Priorités </strong> » qu’il utilise et il est rarement possible de les modifier. Par exemple, les programmes Postfix et Fetchmail  utilisent la Service « mail »</p>

<h3>Le signe «  ; » pour séparer plusieurs « Services »</h3>
<p class="spip">Il est possible de mettre plusieurs services pour une même destination en utilisant le «  ; » :</p>

<p class="spip"><code class='spip_code' dir='ltr'>Service1.Priorité1; Service2.Priorité2     Destination</code></p>

<h3>Le signe « , » pour plusieurs « Services » avec une même « Priorité »</h3>
<p class="spip">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 ». :</p>

<p class="spip"><code class='spip_code' dir='ltr'>mail,news.info  /var/log/mail_news</code></p>

<h3>Le signe « = » pour ne traiter que la « Priorité » indiquée </h3>
<p class="spip">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 :</p>

<p class="spip"><code class='spip_code' dir='ltr'>mail.=err  /var/log/mail.err</code></p>

<h3>Le signe « * » pour traiter toutes les « Services »</h3>
<p class="spip">La commande suivante permet d’envoyer les messages d’erreurs de toutes les « Services » dans le fichier « error »</p>

<p class="spip"><code class='spip_code' dir='ltr'>*.error  /var/log/error</code></p>

<h3>Le signe « * » pour traiter toutes les « Priorités »</h3>
<p class="spip">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 :</p>

<p class="spip"><code class='spip_code' dir='ltr'>mail.*  /var/log/mail</code></p>

<h3>Le signe « * » pour envoyer des messages sur toutes les consoles ouvertes</h3>
<p class="spip">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 :</p>

<p class="spip"><code class='spip_code' dir='ltr'>*.alert  *</code></p>

<h3>Le signe «  ! » pour exclure les niveaux supérieurs ou égaux à la « Priorité » indiquée</h3>
<p class="spip">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 » :</p>

<p class="spip"><code class='spip_code' dir='ltr'>mail.*;mail.!warn  /var/log/mail</code></p>

<p class="spip">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 » :</p>

<p class="spip"><code class='spip_code' dir='ltr'>mail.notice;mail.!crit  /var/log/mail</code></p>

<h3>Le signe « - » pour améliorer les performances en écriture</h3>
<p class="spip">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 » :</p>

<p class="spip"><code class='spip_code' dir='ltr'>mail.*  -/var/log/mail</code></p>

<h3>Le signe « \ » pour écrire une instruction sur plusieurs lignes</h3>
<p class="spip">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 » :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>mail.*;\<br />
news.*   /var/log/mail_news</code></div>
<h3>Envoyer les logs dans une console</h3>
<p class="spip">La ligne suivante permet d’envoyer tous les logs dans la console « tty8 » (CTRL+ALT+F8) :</p>

<p class="spip"><code class='spip_code' dir='ltr'>*.*  /dev/tty8</code></p>

<p class="spip">Les lignes suivantes permettent d’envoyer les logs des mails dans le fichier « mail » et en même temps sur la console « tty8 »</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>mail.*  /var/log/mail<br />
mail.*  /dev/tty8</code></div>
<h3>Le signe @ pour envoyer les logs sur un autre serveur </h3>
<p class="spip">La ligne suivante permet d’envoyer tous les logs sur un autre serveur nommé « pgdebian » :</p>

<p class="spip"><code class='spip_code' dir='ltr'>*.* @pgdebian</code></p>

<h2>Redémarrer le démon </h2>
<p class="spip">A chaque modification du fichier « /etc/syslog.conf », il faut redémarrer le démon :</p>

<p class="spip"><code class='spip_code' dir='ltr'>/etc/init.d/sysklogd restart</code></p>

<p class="spip">Lors du démarrage, le démon créera les nouveaux fichiers de logs, si ceux-ci n’existent pas.</p>

<h2>Mettre syslogd à l’écoute du réseau</h2>
<p class="spip">Pour pouvoir centraliser les logs en provenance d’autres serveurs ou routeurs, il faut mettre le démon « syslogd » à l’écoute du réseau.</p>

<p class="spip">Pour cela, il faut ajouter le paramètre « -r » sur la commande de démarrage du démon.</p>

<p class="spip">Sur Debian testing, il faut modifier le fichier « <strong class="spip">/etc/default/syslogd</strong> » et renseigner la variable « <strong class="spip"> SYSLOGD </strong> » comme indiquée ci-dessous :</p>

<p class="spip"><code class='spip_code' dir='ltr'>SYSLOGD="-r"</code></p>

<p class="spip">Il faut aussi configurer les routeurs ou les autres serveurs pour que ceux-ci exportent leurs logs vers le serveur principal.</p>

<h3>Exporter des logs d’un autre poste sous Linux</h3>
<p class="spip">Pour exporter tous les logs d’un poste vers un serveur appelé par exemple « <strong class="spip"> pgdebian </strong> », il suffit d’ajouter la ligne suivante dans le fichier « /etc/syslog.conf » de ce poste :</p>

<p class="spip"><code class='spip_code' dir='ltr'>*.* @pgdebian</code></p>

<p class="spip">La ligne suivante permet de n’envoyer que les messages d’erreurs :</p>

<p class="spip"><code class='spip_code' dir='ltr'>*.notice{{ }}@pgdebian</code></p>

<h3>Exporter les logs d’un poste Windows</h3>
<p class="spip">Pour qu’un système Windows (NT, 2000,..) exporte ses logs sur un serveur syslog sous Linux, il faut installer le programme « <strong class="spip"> ntsyslog </strong> »
<br /></p>
<li> <a href="http://ntsyslog.sourceforge.net/" class="spip_out">http://ntsyslog.sourceforge.net/</a>
<p class="spip">La commande suivante, permet d’installer le service sur le poste Windows :</p>

<p class="spip"><code class='spip_code' dir='ltr'>ntsyslog -install</code></p>

<p class="spip">Le programme « <strong class="spip"> NTSyslogCtrl.exe </strong> » permet de configurer le service pour indiquer le serveur et les logs à envoyer sur celui-ci.</p>

<h3>Exporter les logs d’un routeur Zyxel ZyWall 10</h3>
<p class="spip">Pour un routeur Zyxel ZyWall 10, une fois connecté sur le routeur, il faut :
<br /></p>
<li> Aller dans le menu 24.3.2 (System Maintenance / Unix Syslog)
<br /><li> Activer le système Syslog (Active=Yes)
<br /><li> Indiquer l’adresse IP du serveur devant recevoir les logs (Syslog IP Adresse = 192.168.0.1)
<br /><li> Indiquer dans quelle « Service » les logs doivent arriver (Log Facility = Local 1)
<br /><li> Indiquer le type de logs à envoyer (Firewall log = Yes)
<h2>Quelques commandes pour consulter les logs</h2>
<p class="spip">La commande suivante permet de voir les 10 dernières lignes du fichier « syslog »</p>

<p class="spip"><code class='spip_code' dir='ltr'># tail /var/log/syslog</code></p>

<p class="spip">La commande suivante, permet de voir les 200 dernières lignes :</p>

<p class="spip"><code class='spip_code' dir='ltr'># tail -200 /var/log/syslog</code></p>

<p class="spip">La ligne suivante permet de voir les 10 dernières lignes avec une actualisation en temps réel :</p>

<p class="spip"><code class='spip_code' dir='ltr'># tail -f /var/log/syslog </code></p>

<p class="spip">Cette commande retourne les lignes du fichiers « syslog » contenant la chaîne de caractères « LeMotif » :</p>

<p class="spip"><code class='spip_code' dir='ltr'># cat /var/log/syslog | grep -i LeMotif</code></p>

<p class="spip">En combinant les deux commandes précédentes, il est possible par exemple d’avoir en temps réel, les logs de fetchmail :</p>

<p class="spip"><code class='spip_code' dir='ltr'># tail -f /var/log/syslog | grep fetchmail</code></p>

<p class="spip">Pour avoir uniquement les logs du noyau Linux au démarrage du poste :</p>

<p class="spip"><code class='spip_code' dir='ltr'># dmesg</code></p>

<h2>Historique des modifications</h2>
<table class="spip">
<thead><tr class='row_first'><th scope='col'><strong class="spip">Version</strong></th><th scope='col'><strong class="spip">Date</strong></th><th scope='col'><strong class="spip">Commentaire</strong></th></tr></thead>
<tbody>
<tr class="row_even"><td>0.1</td><td>10/02/05</td><td>Création par Tony GALMICHE</td></tr>
<tr class="row_odd"><td>0.2</td><td>12/04/05</td><td>Ajout exemple commande dmesg</td></tr>
<tr class="row_even"><td>0.3</td><td>11/08/06</td><td>Remplacement ’Facilité’ par ’Service’ suite à remarque</td></tr>
<tr class="row_odd"><td>0.4</td><td>12/02/07</td><td>Petite correction</td></tr>
<tr class="row_even"><td>0.41</td><td>08/08/07</td><td>Correction chemin « /etc/default/syslogd »</td></tr>
</tbody>
</table>