Journalisation Systemd et Syslog
Les logs ou les fichiers de journaux du système Linux sont collectés par le démon syslog. Systemd nous offre une capacité de journalisation ponctuelle issue des fichiers de journaux. L’horodatage des journaux et leur format est d’une importance cruciale pour un traitement ultérieur. Le système Linux étant particulièrement loquace, c’est en consultant ces journaux qu’on identifiera des pannes et que leur résolution sera d’autant plus aisée.
1. Journalisation Systemd
1.1. Commande journalctl
Configuration de journalctl
…
Droits d’accès. Les utilisateurs peuvent seulement voir leurs journaux. Pour voir tous journaux du système, l’utilisateur doit faire partie du groupe adm
.
sudo usermod -a -G adm francois
Consulter le journal :
journalctl
1.2. Options
Option | Paramètre |
---|---|
-n, --lines= | nombre de lignes à affichier |
-f, --follow | comme tail -f |
-b | informations du boot |
-k, --dmesg | messages du noyau |
-e, --pager-end | va à la fin du pager |
-r, --reverse | affiche inverse |
-x, --catalog | ajoute une explication |
-p, --priority= | filtre sur base de la priorité |
-u, --unit= | filtre sur base du service |
--since=, --until= | "2012-10-30 18:17:16" , "yesterday" , "today" , "tomorrow" , "now" |
1.3. Exemples
Afficher les 5 dernières lignes du journal :
journalctl -n 5
Spécifier le format de sortie (voir man journalctl
) :
journalctl -n 1 -o verbose
Affichage en temps réel :
journalctl -f
Affichage des messages au démarrage :
journalctl -b
Affichage par niveau de sévérité err
:
journalctl -p err
2. Syslog
Syslog est un protocole définissant un service de journaux d’événements d’un système informatique. C’est aussi le nom du format qui permet ces échanges.
En tant que protocole, Syslog se compose d’une partie cliente et d’une partie serveur. La partie cliente émet les informations sur le réseau, via le port UDP 514. Il est possible d’utiliser TCP. Les serveurs collectent l’information et se chargent de créer les journaux.
L’intérêt de Syslog est donc de centraliser les journaux d’événements, permettant de repérer plus rapidement et efficacement les défaillances d’ordinateurs présents sur un réseau.
Il existe aussi un logiciel appelé Syslog, qui est responsable de la prise en charge des fichiers de journalisation du système.
Syslog est la solution de journalisation standard sur les systèmes Unix et Linux, il y a également une variété d’implémentations Syslog sur d’autres systèmes d’exploitation (Windows notamment) et est généralement trouvé dans les périphériques réseau tels que les commutateurs ou routeurs.
2.1. Format Syslog
Un journal au format Syslog comporte dans l’ordre les informations suivantes :
- la date à laquelle a été émis le log,
- le nom de l’équipement ayant généré le log (hostname),
- une information sur le processus qui a déclenché cette émission,
- le niveau de gravité du log,
- un identifiant du processus ayant généré le log
- et enfin un corps de message.
Certaines de ces informations sont optionnelles. Par exemple :
Sep 14 14:09:09 machine_de_test dhcp service[warning] 110 corps du message
Les origines peuvent être multiples et sont juxtaposées à l’aide d’un ‘;’.
Elles sont construites sous la forme :
facility.criticity
- La gravité (criticity) doit être comprise comme la criticité minimale, ainsi
user.critical
correspond au message d’origine utilisateur pour le niveau de gravitécritical
et les niveaux supérieurs, en l’occurrencealert
etemergency
. - Le mot-clef “
none
” peut lui aussi être utilisé afin de filtrer les messages, il est alors utilisé en lieu et place de la gravité.
2.2. Niveaux de gravité
N | Niveau | Signification |
---|---|---|
0 | Emerg | Système inutilisable |
1 | Alert | Une intervention immédiate est nécessaire |
2 | Crit | Erreur critique pour le système |
3 | Err | Erreur de fonctionnement |
4 | Warning | Avertissement |
5 | Notice | Événement normal méritant d’être signalé |
6 | Informational | Pour information seulement |
7 | Debug | Déboggage |
2.3. Origine
Outre les niveaux de gravité, les messages sont orientés au regard de leur origine, dont les codes sont regroupés suivant des types que l’on appelle des “facilités”, soit l’origine, de local0
à local7
à personnaliser. On peut trouver :
Facilité | Origine |
---|---|
AUTH | Message de sécurité/autorisation |
AUTHPRIV | Message de sécurité/autorisation (privé). |
CRON | Message d’un démon horaire |
DAEMON | Démon du système sans classification particulière. |
FTP | Démon ftp. |
KERN | Message du noyau. |
LOCAL0 à LOCAL7 | Réservé pour des utilisations locales. |
LPR | Message du sous-système d’impression. |
Message du sous-système de courrier. | |
NEWS | Message du sous-système des news USENET. |
SYSLOG | Message interne de syslogd |
USER (défaut) | Message utilisateur générique. |
UUCP | Message du sous-système UUCP. |
2.4. Journalisation Rsyslog
Configuration
cat -n /etc/rsyslog.conf
1 # rsyslog configuration file
2
3 # For more information see /usr/share/doc/rsyslog-*/rsyslog_conf.html
4 # If you experience problems, see https://www.rsyslog.com/doc/troubleshoot.html
5
6 #### MODULES ####
7
8 # The imjournal module bellow is now used as a message source instead of imuxsock.
9 $ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
10 $ModLoad imjournal # provides access to the systemd journal
11 #$ModLoad imklog # reads kernel messages (the same are read from journald)
12 #$ModLoad immark # provides --MARK-- message capability
13
Partie concernant le service réseau :
14 # Provides UDP Syslog reception
15 #$ModLoad imudp
16 #$UDPServerRun 514
17
18 # Provides TCP Syslog reception
19 #$ModLoad imtcp
20 #$InputTCPServerRun 514
21
22
23 #### GLOBAL DIRECTIVES ####
24
25 # Where to place auxiliary files
26 $WorkDirectory /var/lib/rsyslog
27
28 # Use default timestamp format
29 $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
30
31 # File syncing capability is disabled by default. This feature is usually not required,
32 # not useful and an extreme performance hit
33 #$ActionFileEnableSync on
34
35 # Include all config files in /etc/rsyslog.d/
36 $IncludeConfig /etc/rsyslog.d/*.conf
37
38 # Turn off message reception via local log socket;
39 # local messages are retrieved through imjournal now.
40 $OmitLocalLogging on
41
42 # File to store the position in the journal
43 $IMJournalStateFile imjournal.state
44
45
Règles de journalisation :
46 #### RULES ####
47
48 # Log all kernel messages to the console.
49 # Logging much else clutters up the screen.
50 #kern.* /dev/console
51
52 # Log anything (except mail) of level info or higher.
53 # Don't log private authentication messages!
54 *.info;mail.none;authpriv.none;cron.none /var/log/messages
55
56 # The authpriv file has restricted access.
57 authpriv.* /var/log/secure
58
59 # Log all the mail messages in one place.
60 mail.* -/var/log/maillog
61
62
63 # Log cron stuff
64 cron.* /var/log/cron
65
66 # Everybody gets emergency messages
67 *.emerg :omusrmsg:*
68
69 # Save news errors of level crit and higher in a special file.
70 uucp,news.crit /var/log/spooler
71
72 # Save boot messages also to boot.log
73 local7.* /var/log/boot.log
74
75
Règles de transfert :
76 # ### begin forwarding rule ###
77 # The statement between the begin ... end define a SINGLE forwarding
78 # rule. They belong together, do NOT split them. If you create multiple
79 # forwarding rules, duplicate the whole block!
80 # Remote Logging (we use TCP for reliable delivery)
81 #
82 # An on-disk queue is created for this action. If the remote host is
83 # down, messages are spooled to disk and sent when it is up again.
84 #$ActionQueueFileName fwdRule1 # unique name prefix for spool files
85 #$ActionQueueMaxDiskSpace 1g # 1gb space limit (use as much as possible)
86 #$ActionQueueSaveOnShutdown on # save messages to disk on shutdown
87 #$ActionQueueType LinkedList # run asynchronously
88 #$ActionResumeRetryCount -1 # infinite retries if host is down
89 # remote host is: name/ip:port, e.g. 192.168.0.1:514, port optional
90 #*.* @@remote-host:514
91 # ### end of the forwarding rule ###
Rotation
man logrotate
Fichier de configuration :
cat -n /etc/logrotate.conf
1 # see "man logrotate" for details
2 # rotate log files weekly
3 weekly
4
5 # keep 4 weeks worth of backlogs
6 rotate 4
7
8 # create new (empty) log files after rotating old ones
9 create
10
11 # use date as a suffix of the rotated file
12 dateext
13
14 # uncomment this if you want your log files compressed
15 #compress
16
17 # RPM packages drop log rotation information into this directory
18 include /etc/logrotate.d
19
20 # no packages own wtmp and btmp -- we'll rotate them here
21 /var/log/wtmp {
22 monthly
23 create 0664 root utmp
24 minsize 1M
25 rotate 1
26 }
27
28 /var/log/btmp {
29 missingok
30 monthly
31 create 0600 root utmp
32 rotate 1
33 }
34
35 # system-specific logs may be also be configured here.
Script de rotation :
cat -n /etc/cron.daily/logrotate
1 #!/bin/sh
2
3 /usr/sbin/logrotate /etc/logrotate.conf
4 EXITVALUE=$?
5 if [ $EXITVALUE != 0 ]; then
6 /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
7 fi
8 exit 0
2.5. Fichiers de logs
sudo ls /var/log/*
sudo tail /var/log/syslog
sudo ls /etc/init.d/syslog*