web-dev-qa-db-fra.com

Comment afficher les messages de journal des démarrages précédents sous CentOS 7?

L'exécution de journalctl sous un système CentOS 7 affiche simplement les messages générés après le dernier démarrage.

La commande

# journalctl --boot=-1

impressions

Failed to look up boot -1: Cannot assign requested address

et quitte avec le statut 1.

En le comparant à un système Fedora actuel, je remarque que le CentOS 7 n'a pas /var/log/journal (et journalctl ne fournit pas --list-boots).

Ainsi ma question comment afficher les messages du journal qui ont été écrits avant la dernière date de démarrage.

Ou, peut-être que cette fonctionnalité doit être activée sur CentOS 7?

(La page de manuel journalctl répertorie "systemd 208" comme numéro de version.)

83
maxschlepzig

tl; dr

Sur CentOS 7, vous devez activer le stockage persistant des messages de journal:

# mkdir /var/log/journal
# systemd-tmpfiles --create --prefix /var/log/journal
# systemctl restart systemd-journald

Sinon, les messages du journal ne sont pas conservés entre les démarrages.

Détails

Si journald conserve les messages de journal des démarrages précédents, est configuré via /etc/systemd/journald.conf. Le paramètre par défaut sous CentOS 7 est:

[Journal]
Storage=auto

Où la page de manuel journald.conf explique auto comme:

Un parmi "volatile", "persistant", "auto" et "aucun". Si elles sont "volatiles", les données du journal de journal seront stockées uniquement en mémoire, c'est-à-dire en dessous de la hiérarchie/run/log/journal (qui est créée si nécessaire). Si elles sont "persistantes", les données seront stockées de préférence sur disque, c'est-à-dire en dessous de la hiérarchie/var/log/journal (qui est créée si nécessaire), avec un retour à/run/log/journal (qui est créé si nécessaire), pendant démarrage précoce et si le disque n'est pas accessible en écriture. " auto " est similaire à "persistant" mais le répertoire /var/log/journal n'est pas créé si nécessaire, de sorte que son existence contrôle où vont les données du journal .

(souligner le mien)

La page de manuel systemd-journald.service indique donc que:

Par défaut, le journal stocke les données de journal dans/run/log/journal /. Étant donné que/run/est volatile, les données de journal sont perdues au redémarrage. Pour rendre les données persistantes, il suffit de créer/var/log/journal/où systemd-journald stockera ensuite les données.

Apparemment, la valeur par défaut était modifiée dans Fedora 19 (pour le stockage persistant) et puisque CentOS 7 est dérivé de Fedora 18 - il n'y est toujours pas persistant, par défaut. La persistance est implémentée par défaut en dehors de journald via /var/log/messages et les versions pivotées /var/log/messages-YYYYMMDD qui sont écrits par rsyslogd (qui s'exécute par défaut et obtient son entrée de journald).

Ainsi, pour permettre une journalisation persistante avec journald sous RHEL/CentOS 7, il faut

# mkdir /var/log/journal

puis fixer les autorisations et redémarrer journald, par exemple via

# systemd-tmpfiles --create --prefix /var/log/journal
# systemctl restart systemd-journald
108
maxschlepzig
systemctl restart systemd-journald

Vous pouvez perdre vos journaux: voir https://github.com/systemd/systemd/issues/2236

mkdir /var/log/journal

Il y a changer dans v208:

systemd-journald n'ajustera plus le groupe de fichiers journaux qu'il crée au groupe "systemd-journal". Au lieu de cela, nous nous appuyons sur le répertoire du journal appartenant au groupe "systemd-journal" et à son ensemble de bits setgid, de sorte que la couche du système de fichiers noyau applique automatiquement que les fichiers journaux héritent de cette affectation de groupe.

Un extrait de fichier tmpfiles.d (5) inclus dans systemd s'assurera que le bit et le groupe setgid sont correctement définis dans le répertoire journal s'il existe à chaque démarrage.

Vous devez donc exécuter quelque chose comme systemd-tmpfiles --create --prefix /var/log/journal après mkdir /var/log/journal

Voir aussi :

2
Evgeny Vereshchagin