Syslog - rsyslog

De Wiki info-lab.fr
Aller à : Navigation, rechercher

Sommaire

Généralités sur les journaux systèmes

Tout système *NIX comporte plusieurs systèmes de génération de messages. Le noyau génère ses propres messages dès son lancement et la commande dmesg permet à posteriori de les consulter.
Le démon SYSLOG prend ensuite le relais : Après avoir récupéré les messages émis par le noyau dès son démarrage, Syslog va recevoir et traiter les messages émis par d'autres démons ou programmes.
Sur certaines distributions le fichier /var/log/messages sert de fichier général pour SYSLOG qui y stocke chronologiquement l'ensemble de tous les messages qu'il reçoit. Ce fichier "fourre-tout" est assez délicat à consulter sans y appliquer un filtre au moyen de grep.

Généralités sur SYSLOG

SYSLOG est un logiciel d'enregistrement et de gestion des journaux système d'un ordinateur. SYSLOG reçoit des messages issus des différents sous-systèmes de la machine et les enregistre dans des fichiers au format texte. D'abord limité au sein d'un système, SYSLOG a évolué pour permettre l'envoi des messages à travers un réseau vers une machine centralisant les journaux.
Au sein d'une machine l'envoi de messages est possible grâce à la communication inter processus et sur le réseau l'envoi de messages se fait via des segments UDP à destination du port 514 (par défaut).

Différents démons SYSLOG

Sur une machine Unix/Linux/BSD, syslogd, rsyslog et syslog-ng sont les principaux programmes utilisés pour journaliser les logs. Il est possible de trouver de petits utilitaires Win32 remplissant ce rôle, ou des modules SYSLOG à greffer à des solutions de supervision. Les fichiers de configurations respectifs des démons SYSLOG pour *NIX sont  :

  • /etc/syslog.conf pour le démon syslogd
  • /etc/rsyslog.conf pour le démon rsyslog
  • /etc/syslog-ng.conf pour le démon syslog-ng

Rappel : /var/log/dmesg est le fichier qui enregistre les messages générés par le noyau dès le démarrage du système. Ce fichier est consultable via la commande dmesg.

Fonctionnement de RSYSLOG

RSYSLOG est le programme SYSLOG choisi pour la suite de cette article. Rsyslog est installé par défaut sur de nombreuses distributions, sinon son installation se fait de manière classique ( # aptitude install rsyslog) ; cette installation désactive de fait syslogd, car en effet rsyslog et syslogd ne peuvent être actif en même temps.
RSYSLOG va stocker les messages dans un fichier texte : En général /var/log/syslog. Parfois certains démons envoient leurs message à destination d'un fichier spécifique (par exemple /var/log/mail.log pour le serveur de messagerie) mais en envoient aussi tout ou partie vers le fichier par défaut /var/log/syslog.

$ logger -t test "message de test"     

envoi d'un message à Rsyslog pour tester son fonctionnement, en local

$ less /var/log/syslog
............
Sep 25 22:39:45 machine-locale test: message de test
(END)

Par défaut Rsyslog ne reçoit pas les messages issus d'autres machines. Pour Remédier à cela il faut permettre à Rsyslog d'écouter sur UDP (port par défaut 514) :

# vim /etc/rsyslog.conf

Il faut dé commenter la partie concernant le module UDP et le choix du port (soit les 2 croisillons colorés en mauve)

# provides UDP syslog reception
#$ModLoad imudp
#$UDPServerRun 514

de manière à ce que le fichier ressemble à ceci :

# provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514

puis il faut réactualiser la configuration de Rsyslog :

# service rsyslog restart

A partir d'une machine distante on peut maintenant tester Rsyslog sur le port UDP 514 en lui envoyant un message de test :

$ echo "test-distant" | netcat w.x.y.z -u 514   

(w.x.y.z est l'adresse IP du serveur sur lequel Rsyslog est en écoute)
On peut vérifier que le serveur Rsyslog a bien reçu ce message :

$ less /var/log/syslog
............
Sep 25 22:39:45 machine-locale test: message de test
Sep 25 22:41:22 test-distant
(END)

Modification de l'horodatage

De base, Rsyslog tout comme syslogd n'enregistre pas l'année et sa précision ne va pas plus loin que la seconde. Commenter la ligne $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat du fichier /etc/rsyslog.conf permet d'améliorer les informations d'horodatage de Rsyslog :
De base, ligne non commentée ($ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat)

$ less /var/log/syslog
............
Sep 25 22:39:45 machine-locale test: message de test
(END)

Ligne à présent commentée (#$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat). Ajout de l'année, précision au millionième de seconde, affichage de la modification appliquée à l'heure UTC en fonction du fuseau horaire paramétré et suppression de tous les espaces dans le champ "horodatage" :

$ less /var/log/syslog
............
2013-09-25T22:39:45.559839+02:00 machine-locale test: message de test
(END)

LOGROTATE

Le programme logrotate va définir quels fichiers seront stockés, combien de temps, sous quelle forme (compressée ou pas) et ce qu'il adviendra des vieux fichiers.
Par défaut, SYSLOG crée un fichier /var/log/syslog par jour pour y enregistrer les messages reçus, puis le lendemain la commande logrotate renomme ce fichier en /var/log/syslog.1 et créée un nouveau fichier /var/log/syslog. /var/log/syslog.1 est donc l'archive de la veille. Le surlendemain, le fichier /var/log/syslog.1 est renommé en /var/log/syslog.2.gz, le fichier /var/log/syslog est renommé en /var/log/syslog.1 et un nouveau fichier /var/log/syslog est crée. remarque : Tout fichier vieux de 2 jours ou plus est compressé par gz.
Au delà de 7 jours, les archives sont effacées, sauf si le fichier /etc/logrotate.d/rsyslog est modifié en conséquence. logrotate est un programme lancé quotidienement par cron (en général entre 06h25 et 06h30) qui est chargé de gérer la journalisation sur le long terme : Il crée de nouveaux fichiers et réalise un certain nombre d'opérations telles que : compression, archivage, effacement, stockage sur serveur distant, envoi par messagerie...
Edition du fichier de logrotate concernant rsyslog pour conserver les fichiers 366 jours (au lieu de 7 ou 35 souvent par défaut), soit un an pile les années bissextiles, et un an plus un jour les autres années :

# vim /etc/logrotate.d/rsyslog
/var/log/syslog
{
     rotate 366
     daily
     ......
}

Services concernés par SYSLOG et niveaux de priorité

Par défaut, un système UNIX/Linux/BSD va émettre des messages à destination de SYSLOG pour un certain nombre de ses composants ou sous-systèmes, comme :

  • Le noyau
  • L'authentification au système
  • La planification des tâches
  • La gestion des utilisateurs
  • La phase de démarrage
  • La charge du système

On peut ajouter d'autres services à surveiller. Un développeur peut concevoir une application qui va envoyer des messages vers SYSLOG en fonction d’événements programmés. Comme par exemple :

  • La gestion des pilotes de périphériques
  • Le montage/démontage de disques ou lecteurs amovibles.
  • Le bon fonctionnement des services (messagerie, FTP, HTTP...) s'exécutant sur la machine.
  • La gestion des impressions
  • L'installation / désinstallation de programmes
  • ...

Les messages envoyés sont tous identifiés par le service émetteur et un niveau de sévérité qui permet donc un traitement différent en fonction de la provenance et de l'importance du message :

  • Le nom du service/composant/logiciel émetteur (facility) : noyau, messagerie, serveur http, impression...
  • Le niveau de sévérité (priority), défini sur une échelle de 0 (le plus grave) à 7 (le moins grave).
    • 0 Emerg Urgence absolue, le système concerné est inutilisable ou va bientôt l'être. Parfois nommé Emergency
    • 1 Alert Intervention immédiate nécessaire.
    • 2 Crit Erreur critique rencontrée par le système.
    • 3 Err Erreur de fonctionnement du système. Parfois nommé Error
    • 4 Warning Message d'avertissement. Parfois nommé Warn
    • 5 Notice Evènement normal mais assez important pour être signalé.
    • 6 Info Message à titre informatif.
    • 7 Debug message de débogage.
    • * caractère joker indiquant tous les niveaux de priorité : 0 à 7 inclus.

Dans le fichier de configuration, la ligne service.priorité précise comment traiter les messages correspondants :

kern.*         -/var/log/kern.log             les messages noyau, tous niveaux de priorité à enregistrer dans le fichier /var/log/kern.log
*.*            -/var/log/syslog               tous les messages de tous les niveaux de priorité à enregistrer dans le fichier /var/log/syslog
mail.info      -/var/log/mail.info            les messages niveau info minimum de la messagerie à enregistrer dans le fichier spécifique /var/log/mail.info
mail.warn      -/var/log/mail.warn            les messages niveau warning minimum de la messagerie à enregistrer dans le fichier spécifique /var/log/mail.warn
mail.err       -/var/log/mail.err             idem pour les messages de niveau minimum error

Lecture et format des logs

La lecture des journaux est possible par les moyens suivants :

  • Soit en lisant directement les fichiers voulus (connecté localement à la machine ou à distance via ssh par exemple):
$ less /var/log/syslog.1                    pour lire le fichier de la veille
$ tail -n 15 -f /var/log/syslog             pour regarder les 15 dernières lignes du fichier actuel

L'option -f permet d'afficher en temps réel les dernières lignes.

  • Soit via un utilitaire graphique, comme le "Visionneur de journaux système" (gnome-system-log pour Gnome ou ksystemlog pour KDE).

Un message SYSLOG respecte généralement ce format : (Nota sans la modification expliquée ci-dessus modifiant les informations d'horodatage)

HORODATAGE        EMETTEUR        SERVICE CONCERNE       CORPS DU MESSAGE
Sep 2 16:27:47    144.12.6.19     Kernel : [1224.xxxxxx] [drm] Loading R300 Microcode

Explications : Le 02 septembre à 16h27 et 47 secondes, le NOYAU de la machine dont l'adresse IP est 144.12.6.19 a envoyé un message indiquant que le module DRM [Direct Rendering Manager = affichage et accélération matérielle] charge le microcode R300 (puce graphique ATI).

Coloration de l'affichage des messages SYSLOG par LWATCH

Si l'utilitaire lwatch (LogWATCHer) est installé (# apt-get install lwatch), il est possible de coloriser les logs afin de les rendre plus lisibles.
De base la commande $ tail -n 1 /var/log/syslog affiche :

$ Sep 2 16:27:47    144.12.6.19     Kernel : [1224.xxxxxx] [drm] Loading R300 Microcode

Tandis que la commande $ tail -n 1 /var/log/syslog | /usr/bin/lwatch -i- affichera :

$ Sep 2 16:27:47    144.12.6.19     Kernel : [1224.xxxxxx]   [drm] Loading R300 Microcode

lwatch colore différemment les 4 parties de chaque message (date, hôte, service et informations). Certaines chaines de caractères bénéficieront d'une colorisation particulière ; le fichier de configuration (particulièrement bien commenté) /etc/lwatch/lwatch.conf permet de modifier les couleurs par défaut et de désigner de nouvelles chaînes de caractères à coloriser.

$ Sep 2 16:27:47    144.12.6.19     Kernel : [1224.xxxxxx] [drm] Loading R300 Microcode
$ Sep 2 16:27:49    144.12.6.19     Cron : [18526]root    CMD (ntpdate -u server.ntp.org)
$ Sep 2 16:27:55    commutateur-2   %%10FIB/5/log_fib(1: 1) FIB.NOTICE  synchro state: 2011/09/02 16:27:55 begin FIB's refreshing
$ Sep 2 16:27:59    144.12.6.45     Process 125 [tunneling.WARN] Do Disconnect for unknow reason. Error code 732
$ .................    etc ..........................................................................................

On peut noter que le niveau de sévérité ne fait pas partie du message mais que certains programmeurs le reportent dans la 4ème partie (présence de NOTICE dans le 3ème et WARN dans le 4ème message ) et que de base lwatch colorise en rouge les mots kernel ou Disconnect, et en marron le mot root.

Alias de commande

Il est conseillé de créer un alias de commande dans le fichier de configuration de BASH (.bashrc)

$ vi /home/login/.bashrc
# some more ls aliases
alias ll='ls -alF'
alias la='ls -A'
alias syswat='tail -n 20 -f /var/log/syslog|/usr/bin/lwatch -i-     
wq!
$ syswat
$ Sep 2 16:27:47    144.12.6.19     Kernel : [1224.xxxxxx] [drm] Loading R300 Microcode
$ Sep 2 16:27:49    144.12.6.19     Cron : [18526]root    CMD (ntpdate -u server.ntp.org)
$ ......

Nota : bash doit relire sa configuration pour que ce nouvel ALIAS soit reconnu.

$ . .bashrc

Autres utilitaires associés à SYSLOG

  • GLOGG permet d’afficher, de coloriser et de rechercher parmi les logs d'un système au travers d'une interface simple et sobre.
  • CCZE est un autre programme de colorisation des journaux pour en favoriser la lecture :
$ ccze < /var/log/syslog                    
$ ccze -A < /var/log/syslog | less -R       
$ tail -n 15 -f /var/log/syslog |ccze

CCZE permet aussi de convertir un fichier journal au format html

$ ccze -h -o nolookups </var/log/auth.log >/var/www/logs/connexion.html

-o nolookups interdit à CCZE de rechercher et traduire les noms d'utilisateurs, les noms des services... Cette fonctionnalité peut être longue et gourmande sur des fichiers volumineux.

  • Le programme OCTOPUSSY disponible ici 8PUSSY associé à SYSLOG-NG (et bientôt à RSYSLOG) est une solution de supervision permettant de générer des rapports, des graphes ou des alertes à partir de logs : C'est le complément idéal d'une solution de supervision utilisant ICMP et SNMP.
Outils personnels
Espaces de noms

Variantes
Actions
Navigation
Outils