自分は、昭和生まれのおじさんなので思い込みが激しい。そんな思い込みを破壊するような出来事がいろいろあった。。。
閑話休題
Linuxのトラブルは、大抵/var/logにあるファイルを持ってくればわかるはずなんだが、実はそうではない。最近だと、結構 journalctlでログを見ろと言われるケースもある。
journalファイルの情報は、アプリ自体が自身のログを吐き出す前に起きる障害もわかったりするので、ぜひ確認したいところでもある。
このjournalファイルの情報は、もちろん/var/logにあるかと思いきや。。。
journalファイルの場所と永続化
journalctlが参照しているファイルは、RHEL系だとメモリファイルシステム内で、Ubuntuだと/var/logにある。つまり、journalctlが参照しているファイルは、永続化、非永続化が選択できる。
永続化していない場合
/run/log/journal/
に保存され、再起動すると消えてしまい、新しく作り直されてしまう。
RHEL7.9/8.8/9.1はデフォルトでは永続化していない。
永続化している場合
/var/log/journal/
に保存され、再起動してもjournalは残る。
Ubuntu Server 22.04.3はデフォルトで永続化されていた。
journalを永続化する方法
mkdir -p /var/log/journal/
chown root:systemd-journal /var/log/journal
chmod u=rwx,g=rx+s,o=rx l /var/log/journal
systemctl restart systemd-journald
ls -ld /var/log/journal
永続化しておくと
journalctl --list-boots
でブートIDが見れて、過去の情報が見える。
また、デフォルトだと、journalは、
- SystemMaxUse ジャーナルのサイズがファイルシステムの容量の10%もしくは4GBの小さいほうに到達すれば削除
- SystemKeepFree ファイルシステムの空き容量が15%もしくは4GBの小さいほうに到達すれば削除
で設定される。また、削除されるデータは、塊ごとに削除されていくので、きっちりこのサイズでjournalのサイズになるとは限らない。
大容量のボリュームでやる場合は、最大で4GBのログが貯まることになる。
journalを非永続化する方法
rm -rf /var/log/journal
systemctl restart systemd-journald
ls -ld /run/log/journal
別の環境でjournalファイルを確認する方法
ちなみに、journalファイル(/run/log/journalあるいはを/var/log/journal) をscpなどで別の環境にコピーをして、他のホストで参照したい場合は、journalフォルダごともってきて、以下のコマンドでjournalctlを参照できる。
journalctl --directory <コピーしてきたフォルダ> -xe