Analyse et stockage des logs

Le noyau du système et les processus écrivent dans les logs tous les événements se produisant sur le système. Le protocole utilisé est Syslog et les messages qu’il produit sont utilisés par les services systemd-logd et rsyslog.

Par défaut les logs ne persistent pas après les redémarrages.

Emplacement des logs

Les emplacements des logs de syslog :

  • /var/log/messages : authentification, courriers, exécution de tâches planifiées, débogage
  • /var/log/secure : sécurité, authentification
  • /var/log/maillog : serveur de messagerie
  • /var/log/cron : exécution des tâches planifiées
  • /var/log/boot.log : console, démarrage du système

Exemples

Fichier /var/log/messages :

[root@SERVER02 ~]# tail n10 /var/log/messages
Sep 18 12:18:51 SERVER02 systemd[32309]: Listening on D-Bus User Message Bus Socket.
Sep 18 12:18:51 SERVER02 systemd[32309]: Reached target Sockets.
Sep 18 12:18:51 SERVER02 systemd[32309]: Reached target Basic System.
Sep 18 12:18:51 SERVER02 systemd[1]: Started User Manager for UID 0.
Sep 18 12:18:51 SERVER02 systemd[32309]: Reached target Main User Target.
Sep 18 12:18:51 SERVER02 systemd[32309]: Startup finished in 95ms.
Sep 18 12:18:51 SERVER02 systemd[1]: Started Session 27 of User root.
Sep 18 12:18:51 SERVER02 systemd[1]: Starting Hostname Service...
Sep 18 12:18:51 SERVER02 systemd[1]: Started Hostname Service.
Sep 18 12:19:21 SERVER02 systemd[1]: systemd-hostnamed.service: Deactivated successfully.

Fichier /var/log/secure :

[root@SERVER02 ~]# tail n10 /var/log/secure
==> /var/log/secure <==
Sep 15 12:16:10 SERVER02 sshd[29766]: pam_unix(sshd:session): session closed for user root
Sep 18 04:22:27 SERVER02 sshd[32021]: Accepted password for root from 192.168.1.105 port 42254 ssh2
Sep 18 04:22:27 SERVER02 systemd[32026]: pam_unix(systemd-user:session): session opened for user root(uid=0) by (uid=0)
Sep 18 04:22:27 SERVER02 sshd[32021]: pam_unix(sshd:session): session opened for user root(uid=0) by (uid=0)
Sep 18 09:22:25 SERVER02 sshd[32041]: Received disconnect from 192.168.1.105 port 42254:11: disconnected by user
Sep 18 09:22:25 SERVER02 sshd[32041]: Disconnected from user root 192.168.1.105 port 42254
Sep 18 09:22:25 SERVER02 sshd[32021]: pam_unix(sshd:session): session closed for user root
Sep 18 12:18:51 SERVER02 sshd[32304]: Accepted password for root from 192.168.1.105 port 42998 ssh2
Sep 18 12:18:51 SERVER02 systemd[32309]: pam_unix(systemd-user:session): session opened for user root(uid=0) by (uid=0)
Sep 18 12:18:51 SERVER02 sshd[32304]: pam_unix(sshd:session): session opened for user root(uid=0) by (uid=0)

Fichier /var/log/cron :

[root@SERVER02 ~]# tail n10 /var/log/cron
==> /var/log/cron <==
Sep 18 10:01:01 SERVER02 run-parts[32234]: (/etc/cron.hourly) finished 0anacron
Sep 18 10:01:01 SERVER02 CROND[32224]: (root) CMDEND (run-parts /etc/cron.hourly)
Sep 18 11:01:01 SERVER02 CROND[32256]: (root) CMD (run-parts /etc/cron.hourly)
Sep 18 11:01:01 SERVER02 run-parts[32259]: (/etc/cron.hourly) starting 0anacron
Sep 18 11:01:01 SERVER02 run-parts[32265]: (/etc/cron.hourly) finished 0anacron
Sep 18 11:01:01 SERVER02 CROND[32255]: (root) CMDEND (run-parts /etc/cron.hourly)
Sep 18 12:01:01 SERVER02 CROND[32282]: (root) CMD (run-parts /etc/cron.hourly)
Sep 18 12:01:01 SERVER02 run-parts[32285]: (/etc/cron.hourly) starting 0anacron
Sep 18 12:01:01 SERVER02 run-parts[32291]: (/etc/cron.hourly) finished 0anacron
Sep 18 12:01:01 SERVER02 CROND[32281]: (root) CMDEND (run-parts /etc/cron.hourly)

Règles des fichiers Syslog

Les logs sont classés par fonction et par priorité et rsyslog traite les logs en fonction de règles situées dans /etc/rsyslog.conf et dans /etc/rsyslog.d/.

Exemples de règles du service rsyslog, l’astérisque (*) correspond à toutes les valeurs de priorité (emerg, alert, crit):

[...]
#### RULES ####

# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.* /dev/console

# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none /var/log/messages

# The authpriv file has restricted access.
authpriv.* /var/log/secure

# Log all the mail messages in one place.
mail.* -/var/log/maillog

# Log cron stuff
cron.* /var/log/cron

# Everybody gets emergency messages
*.emerg :omusrmsg:*

# Save news errors of level crit and higher in a special file.
uucp,news.crit /var/log/spooler

# Save boot messages also to boot.log
local7.* /var/log/boot.log
[...]

Par exemple, les lignes :

  • cron.* /var/log/cron :
    • enregistre les messages avec un niveau de priorité quelconque envoyés à la fonction cron.*
    • dans le fichier /var/log/cron
  • *.emerg :omusrmsg:* :
    • peut afficher sur le terminal de tous les utilisateurs connecté les messages syslog ayant la priorité emerg
    • le paramètre :omusrmsg: : imprimer tous les messages syslog

Créer ses propres règles Syslog

@TODO

Rotation du fichier log

La commande logrotate effectue une rotation des fichiers logs pour économiser de la place dans /var/log.

Lors de la rotation, le fichier est renommé avec une extension indiquant sa date de rotation : /var/log/messages deviendra /var/log/messages-20240918 et l’action sera loguée.

Les fichiers logs les plus anciens seront ensuite supprimés pour libérer de l’espace au bout de généralement 1 mois.

Envoi manuel de messages Syslog

La commande logger envoie des messages au service rsyslog avec la priorité notice par default, pour changer la priotité (emerg, alert, crit) il faut préciser l’option -p.

Pour envoyer au service rsyslog un message à enregistrer dans les fichiers /var/log/messagea, /var/log/boot.log et /var/log/user.log :

# logger "Hello ceci est un test de log !"
# logger -p local0.notice "Hello ceci est AUSSI un test de log !"
# logger -p user.crit "Hello je t'ai à l'oeil !"

Exemples :

[root@SERVER02 ~]# tail -n5 /var/log/messages
Sep 18 12:24:15 SERVER02 systemd[32309]: Starting Cleanup of User's Temporary Files and Directories...
Sep 18 12:24:15 SERVER02 systemd[32309]: Finished Cleanup of User's Temporary Files and Directories.
Sep 18 12:36:17 SERVER02 root[32382]: Hello ceci est un test de log !
Sep 18 12:36:25 SERVER02 root[32383]: Hello ceci est AUSSI un test de log !
Sep 18 12:36:32 SERVER02 root[32384]: Hello je t'ai à l'oeil !

Extrait du manuel de logger

Les services possibles sont :

auth      // security is now obsolete
authpriv // pour les informations de sécurité de nature sensible
cron
daemon
ftp
kern // ne peut pas être créé depuis un processus d’espace utilisateur, convertit automatiquement en utilisateur
lpr
mail
news
syslog
user
uucp
local0-7

Les niveaux possibles sont :

emerg     // panic is now obsolete
alert
crit
err // error is now obsolete
warning // warn is now obsolete
notice
info
debug

/!\ Résumé des commandes

Commandes :

// Ecrit des logs dans les fichiers correspondant aux services
# logger "Hello ceci est un test de log !"
# logger -p local0.notice "Hello ceci est AUSSI un test de log !"
# logger -p user.crit "Hello je t'ai à l'oeil !"

Fichiers :

/var/log/messages     // authentification, courriers, exécution de tâches planifiées, débogage
/var/log/secure // sécurité, authentification
/var/log/maillog // serveur de messagerie
/var/log/cron // exécution des tâches planifiées
/var/log/boot.log // console, démarrage du système

// Règles utilisées par rsyslog pour traiter les logs
/etc/rsyslog.conf
/etc/rsyslog.d/*.conf

Cas pratique

Création d’un fichier /etc/rsyslog.d/my_debug.conf pour rediriger les logs de priorité debug ou supérieure présents dans /var/log/messages-debug :

[root@SERVER02 ~]# touch /etc/rsyslog.d/my_debug.conf

Pour récupérer dans le fichier my_debug.conf les messages syslog de toute installation avec un niveau de priorité debug ou supérieur :

  • * : installation quelconque de messages de logs
  • /var/log/messages-debug : fichier où les informations sont écrites
[root@SERVER02 ~]# cat /etc/rsyslog.d/my_debug.conf
*.debug     /var/log/messages-debug

Redémarrage du service rsyslog :

[root@SERVER02 ~]# systemctl restart rsyslog

Vérification, tous les messages de logs avec la priorité debug apparaissent bien dans les logs de /var/log/messages-debug:

[root@SERVER02 ~]# tail -n10 /var/log/messages-debug
Sep 18 12:47:24 SERVER02 systemd[1]: Stopping System Logging Service...
Sep 18 12:47:25 SERVER02 rsyslogd[1247]: [origin software="rsyslogd" swVersion="8.2102.0-117.el9" x-pid="1247" x-info="https://www.rsyslog.com"] exiting on signal 15.
Sep 18 12:47:25 SERVER02 systemd[1]: rsyslog.service: Deactivated successfully.
Sep 18 12:47:25 SERVER02 systemd[1]: Stopped System Logging Service.
Sep 18 12:47:25 SERVER02 systemd[1]: rsyslog.service: Consumed 2min 46.879s CPU time.
Sep 18 12:47:25 SERVER02 systemd[1]: Starting System Logging Service...
Sep 18 12:47:25 SERVER02 rsyslogd[32409]: [origin software="rsyslogd" swVersion="8.2102.0-117.el9" x-pid="32409" x-info="https://www.rsyslog.com"] start
Sep 18 12:47:25 SERVER02 systemd[1]: Started System Logging Service.
Sep 18 12:47:25 SERVER02 rsyslogd[32409]: imjournal: journal files changed, reloading... [v8.2102.0-117.el9 try https://www.rsyslog.com/e/0 ]

Création d’un message de log avec le type user et la priorité debug :

[root@SERVER02 ~]# logger -p user.debug "Debug User Message Test"
[root@SERVER02 ~]# logger -p user.debug "$(date) - User: $USER - Debug user Message Test"

Vérification des messages de logs de /var/log/messages-debug :

[root@SERVER02 ~]# tail /var/log/messages-debug
Sep 18 12:55:15 SERVER02 dnf[32457]: Updating Subscription Management repositories.
Sep 18 12:55:15 SERVER02 dnf[32457]: Unable to read consumer identity
Sep 18 12:55:15 SERVER02 dnf[32457]: This system is not registered with an entitlement server. You can use subscription-manager to register.
Sep 18 12:55:15 SERVER02 dnf[32457]: Failed determining last makecache time.
Sep 18 12:55:15 SERVER02 dnf[32457]: There are no enabled repositories in "/etc/yum.repos.d", "/etc/yum/repos.d", "/etc/distro.repos.d".
Sep 18 12:55:15 SERVER02 systemd[1]: dnf-makecache.service: Deactivated successfully.
Sep 18 12:55:15 SERVER02 systemd[1]: Finished dnf makecache.
Sep 18 12:56:52 SERVER02 root[32463]: Debug user Message Test
Sep 18 12:56:59 SERVER02 root[32465]: Wed Sep 18 12:56:59 PM EDT 2024 - User: root - Debug user Message Test

Détermination d’un période :

[aline@SERVER02 ~]$ date
Sun Sep 22 11:02:31 AM +02 2024
[aline@SERVER02 ~]$ date -d "-30 min"
Sun Sep 22 10:32:55 AM +02 2024

Afficher les logs enregistrés au cours des 30 dernières minutes :

[aline@SERVER02 ~]$ journalctl --since 10:30:00 --until 11:00:30
Sep 22 10:53:05 Redhat1-Test1 systemd[1]: Starting Time & Date Service...
Sep 22 10:53:05 Redhat1-Test1 systemd[1]: Started Time & Date Service.
Sep 22 10:53:05 Redhat1-Test1 systemd-timedated[132780]: Set NTP to enabled (chronyd.service).
Sep 22 10:53:58 Redhat1-Test1 systemd[1]: systemd-timedated.service: Deactivated successfully.

Création du fichier /etc/rsyslog.d/auth-errors.conf avec /var/log/auth-errors comme destination des messages authpriv.alert:

[root@SERVER02 ~]# vim /etc/rsyslog.d/auth-errors.conf
authpriv.alert      /var/log/auth-errors

Restart de rsyslog :

[root@SERVER02 ~]# systemctl restart rsyslog

Ecriture d’un message de test avec priorité alert dans /var/log/auth-errors avec logger -p :

[root@SERVER02 ~]# logger -p authpriv.alert "Logging TEST ALERTE ROUGE"

Vérification que /var/log/auth-errors contient le log :

[root@SERVER02 ~]# tail /var/log/auth-errors
Sep 22 12:32:10 Redhat1-Test1 root[133142]: Logging
Sep 22 12:32:18 Redhat1-Test1 root[133143]: Logging test
Sep 22 12:32:25 Redhat1-Test1 root[133144]: anaconda-ks.cfg test test05.txt test.txt
Sep 22 12:33:09 Redhat1-Test1 root[133148]: Logging TEST ALERTE ROUGE

Documentation

MAN systemd-logd.service(8)
MAN rsyslogd(8)
MAN rsyslog.conf(5)

https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/htmlsingle/configuring_basic_system_settings/index

Doc dans /usr/share/doc/rsyslog/

> Partager <