Comment afficher les journaux journalctl plus anciens (après une rotation peut-être?)

23

J'utilise docker sur ubuntu 16.04 et je souhaite afficher les journaux. Cependant, je ne suis pas en mesure d'afficher les journaux après ce que je suppose être une sorte de rotation ou les journaux atteignent une certaine taille.

Je n'ai apporté aucune modification à mon journald.conf, j'y utilise donc des valeurs par défaut.

Exemples de ce que je vois:

systemctl docker statusconfirme que le service est actif since Thu 2016-10-13 18:56:28 UTC.

Cependant, lorsque j'exécute quelque chose comme journalctl -u docker.service --until "2016-10-13 22:00"- la seule sortie que j'obtiens est que -- Logs begin at Fri 2016-10-14 01:18:49 UTC, end at Fri 2016-10-14 16:18:25 UTC. --je peux afficher les journaux de cette plage comme prévu.

Ma question est la suivante: pourquoi ne puis-je pas afficher les journaux plus anciens avec journalctl et comment puis-je résoudre ce problème afin de pouvoir afficher les journaux?

jdf
la source

Réponses:

15

Cela peut être dû au fait que vous essayez de réviser le journal depuis le dernier démarrage, ce qui semble être le cas dans une image docker.

Sur Ubuntu 16.04, le stockage du journal est par défaut en mémoire. Vous pouvez modifier la valeur par défaut pour qu'elle soit persistante en ouvrant /etc/systemd/journald.confet en changeant la Storage=ligne de autoà persistent. Vous devrez peut-être redémarrer journald systemctl restart systemd-journaldaprès la modification du fichier de configuration.

Je pense que le journal devrait être persistant par défaut , j'ai donc ouvert un bug à ce sujet.

Mark Stosberg
la source
Je suis d'accord avec vous, il devrait être persistant par défaut (et changera ce paramètre), mais je suis certain que cette machine n'a pas été redémarrée, donc je ne suis pas convaincu à 100% que seul résoudra mon problème. Je suis toujours content d'avoir déposé ce problème.
jdf
Dans certaines conditions, les journaux peuvent atterrir dans le journal avec des métadonnées incomplètes, de sorte qu'ils peuvent être trouvés lors de l'examen de la journalctlsortie complète, mais pas des journaux d'unité. Cela est connu pour arriver aux problèmes de journaux juste avant l'arrêt d'une unité. Les journaux sont envoyés à journald, puis journald émet une requête pour les métadonnées. Parfois, en attendant, le processus existe. Cependant, cela ne semble pas non plus être un ajustement parfait pour votre cas.
Mark Stosberg
3

La raison pour laquelle cela se produit est en raison de valeurs par défaut sur la taille des fichiers journald stockés. Il y a plus de détails à ce sujet dans les documents . Cela vaut la peine de lire toute la section à laquelle j'ai lié, mais les valeurs par défaut fonctionnent comme suit:

journald will use 10% of the disk or 4G, whichever is smaller.

journald will leave free 15% of the disk or 4G, whichever is larger.

Pour afficher les journaux du dernier démarrage, en supposant que vous en avez Storage=persistentdans votre journalald.conf, comme les autres notes de réponse, vous pouvez utiliser l' --boot=-1indicateur sur les journalctlcommandes pour obtenir les journaux du seul démarrage précédent.

Dans le cas de l'OP où ils étaient sûrs que l'hôte n'avait pas été redémarré, la perte de journaux était simplement causée par le SystemMaxUseet / ou par SystemKeepFreedéfaut.

Remarque: je suis l'OP et cette question a encore des votes positifs, donc depuis que j'ai acquis plus d'expérience avec journald (et rtfm), je poste ceci ici dans l'espoir que cela aide les autres.

jdf
la source