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

OptionParamètre
-n, --lines=nombre de lignes à affichier
-f, --followcomme tail -f
-binformations du boot
-k, --dmesgmessages du noyau
-e, --pager-endva à la fin du pager
-r, --reverseaffiche inverse
-x, --catalogajoute 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 :

  1. la date à laquelle a été émis le log,
  2. le nom de l’équipement ayant généré le log (hostname),
  3. une information sur le processus qui a déclenché cette émission,
  4. le niveau de gravité du log,
  5. un identifiant du processus ayant généré le log
  6. 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’occurrence alert et emergency.
  • 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é

NNiveauSignification
0EmergSystème inutilisable
1AlertUne intervention immédiate est nécessaire
2CritErreur critique pour le système
3ErrErreur de fonctionnement
4WarningAvertissement
5NoticeÉvénement normal méritant d’être signalé
6InformationalPour information seulement
7DebugDé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
AUTHMessage de sécurité/autorisation
AUTHPRIVMessage de sécurité/autorisation (privé).
CRONMessage d’un démon horaire
DAEMONDémon du système sans classification particulière.
FTPDémon ftp.
KERNMessage du noyau.
LOCAL0 à LOCAL7Réservé pour des utilisations locales.
LPRMessage du sous-système d’impression.
MAILMessage du sous-système de courrier.
NEWSMessage du sous-système des news USENET.
SYSLOGMessage interne de syslogd
USER (défaut)Message utilisateur générique.
UUCPMessage 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*