Comment puis-je afficher les messages du journal des bottes précédentes sous CentOS 7?

78

L'exécution journalctlsous un système CentOS 7 n'imprime que les messages générés après le dernier démarrage.

La commande

# journalctl --boot=-1

empreintes

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 journalctlne fournit pas --list-boots).

C’est pourquoi ma question est de savoir comment afficher les messages de journal écrits avant la dernière date de démarrage.

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

(La journalctlpage de manuel répertorie «systemd 208» comme numéro de version.)

maxschlepzig
la source

Réponses:

99

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

La journaldconservation des messages de journal des démarrages précédents est configurée 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 s’explique autocomme suit :

Un de "volatile", "persistant", "auto" et "aucun". Si "volatile", les données du journal du journal seront uniquement stockées 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 le disque, c'est-à-dire sous la hiérarchie / var / log / journal (créée le cas échéant), avec un repli sur / run / log / journal (créé le cas échéant), pendant démarrage anticipé 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 l'emplacement où les données du journal vont .

(souligne le mien)

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

Par défaut, le journal stocke les données de journal dans / run / log / journal /. Depuis / run / est volatile, les données du 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 a été modifiée dans Fedora 19 (en stockage persitent) et, étant donné que CentOS 7 est dérivé de Fedora 18, il n'y est toujours pas conservé, par défaut. La persistance est implémentée par défaut en dehors de journald via /var/log/messageset les versions /var/log/messages-YYYYMMDDpivotées qui sont écrites par rsyslogd (qui s'exécute par défaut et reçoit son entrée de journald).

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

# mkdir /var/log/journal

puis corrigez les autorisations et redémarrez journald, par exemple via

# systemd-tmpfiles --create --prefix /var/log/journal
# systemctl restart systemd-journald
maxschlepzig
la source
6
A systemctl restart systemd-journalddevrait le faire. Donc, aucun redémarrage requis.
xx4h
@ xx4h, a mis à jour la réponse
maxschlepzig le
9
Dans debian cela est documenté à /usr/share/doc/systemd/README.Debian: install -d -g systemd-journal /var/log/journal.
Pevik
@pevik, j'ai examiné un système CentOS 7 (où je viens d'utiliser mkdir) et les autorisations actuelles sont drwxr-sr-x. 3 root systemd-journal- peut-être que journal corrigera les autorisations / la propriété lors de l'initialisation.
maxschlepzig
8
Apprenez une astuce: si vous envoyez un USR1signal au lieu de redémarrer, vous ne perdez pas le contenu actuel du journal. killall -USR1 systemd-journald
James B
1
systemctl restart systemd-journald

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

mkdir /var/log/journal

Il y a un changement dans v208:

systemd-journald ne modifiera plus le groupe de fichiers journaux créé avec le groupe "systemd-journal". Au lieu de cela, nous nous basons sur le fait que le répertoire du journal appartient au groupe "systemd-journal" et à son bit setgid, de sorte que la couche du système de fichiers du noyau applique automatiquement que les fichiers journaux héritent de cette affectation de groupe.

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

Donc, vous devriez courir quelque chose comme systemd-tmpfiles --create --prefix /var/log/journalaprèsmkdir /var/log/journal

Voir aussi :

Evgeny Vereshchagin
la source
Hm, ou faire un `chmod 4755 / var / log / journal; racine chown: systemd-journal!: 2 '- ou faites simplement un redémarrage. Je mettrai à jour ma réponse.
maxschlepzig
@maxschlepzig, le redémarrage ne fonctionne pas: github.com/systemd/systemd/pull/1398#issuecomment-144247498
Evgeny Vereshchagin le
chmod 4755 /var/log/journal; chown root:systemd-journal !:2fonctionne bien. mais tmpfiles: utilisez la magie ACL sur les annuaires de journaux
Evgeny Vereshchagin
ok, un autre bug :) - J'ai mis à jour ma réponse.
maxschlepzig