古いjournalctlログをどのように表示しますか(ローテーション後でしょうか?)


23

ubuntu 16.04でdockerを実行していますが、ログを表示したいと思います。ただし、何らかのローテーションまたはログが特定のサイズに拡大したと推測した後、ログを表示できません。

journald.confに変更を加えていないため、デフォルトを使用しています。

私が見ているものの例:

systemctl docker statusサービスがアクティブであることを確認しsince Thu 2016-10-13 18:56:28 UTCます。

ただし、次のようなものを実行するとjournalctl -u docker.service --until "2016-10-13 22:00"-唯一の出力は-- Logs begin at Fri 2016-10-14 01:18:49 UTC, end at Fri 2016-10-14 16:18:25 UTC. --、その範囲のログを期待どおりに表示できることです。

私の質問は、journalctlを使用して古いログを表示できないのはなぜですか?この問題を修正してログを表示するにはどうすればよいですか?

回答:


15

これは、最後のブート以降にジャーナルをレビューしようとしていることが原因である可能性があります。これは、Dockerイメージ内のケースのようです。

Ubuntu 16.04では、ジャーナルストレージはデフォルトでインメモリになります。あなたは開くことで、永続的であることを、デフォルトを変更することができ/etc/systemd/journald.conf、変化するStorage=から行をautoしますpersistent。構成systemctl restart systemd-journaldファイルの編集後、journaldを再起動する必要がある場合があります。

ジャーナルはデフォルト永続的であるべきだと思うので、それに関するバグをオープンしました。


デフォルトで永続的であることに同意します(そしてその設定を変更します)が、このマシンが再起動されていないことを確信しています。それでも、あなたがその問題を提出してくれてうれしいです。
jdf

特定の条件下では、ログは不完全なメタデータでジャーナルに記録される可能性journalctlがあるため、ユニットログではなく、完全な出力を確認するときにログを見つけることができます。これは、ユニットがシャットダウンする直前にログの問題が発生することがわかっています。ログはjournaldに送信され、その後journaldはメタデータのクエリを発行します。その間にプロセスが存在することもあります。しかし、それはあなたのケースに完璧に合っているようにも思えません。
マークストースバーグ

3

これが発生する理由は、保存されたジャーナルファイルのサイズのデフォルトのためです。詳細については、ドキュメントを参照してください。リンクしたセクション全体を読む価値はありますが、デフォルトは次のように機能します。

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.

前回のブートのログを表示するには、Storage=persistentjournald.confに他の回答のメモがあると仮定して、コマンドの--boot=-1フラグを使用しjournalctlて前回のブートからのみログを取得できます。

ホストがリブートされていないと確信しているOPの場合、ログの損失はSystemMaxUseSystemKeepFreeデフォルトおよび/またはデフォルトが原因で発生しました。

注:私はOPであり、この質問にはまだ賛成票があります。そのため、journald(およびrtfm)でより多くの経験を積んだので、他の人に役立つことを期待してここに投稿しています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.