環境
Ubuntu20.4
はじめに
OSのログはjournaldとrsyslogdの両方で取得されます。ログを参照したい場合、どっちで見てもいいのですが、rsyslogdは古株でjournaldが新参者であることから、journaldの方を見た方がいいでしょう。
rsyslogdはSysVinitの時代に採用していた仕組みでしたが、systemdが出てきてからjournaldが登場しました。
systemdが登場したのは、CentOSは7からで、Ubuntuは15.04からです。
デーモンの確認
journaldのデーモンを確認しようとして、次のコマンドを実行しても出てきません。
$service --status-all | grep journald
次のコマンドを実行すると動いていることが分かります。
$systemctl status systemd-journald
journaldといった独立したデーモンとして存在しているのではなく、systemd-journaldsystemdのコンポーネントとして組み込まれているようです。systemdが起動すれば、journaldもバックで動作しているということです。
journaldのコンフィグファイルは下記になります。
/etc/systemd/journal.conf
中身を見ると全ての設定がコメントになっています。コメント値がデフォルト値として有効になっています。
コンフィグの設定(その1)
次の設定を行うと、journaldのログは全てrsyslogdに転送されるようになります。つまり、journaldのログがrsyslogdでも見れるようになります。
ForwardToSyslog=yes
コンフィグの設定(その2)
journaldのログの保存場所を指定する設定です。autoになっていれば、保存場所は自動的に決定されます。/var/log/journalがあれば、ここに保存し、なければ、/run/log/journalに保存されます。
両方のディレクトリが存在すれば、両方に保存されるということはありません。
Strage=auto
/runは特殊なディレクトリです。次のコマンドを実行すると、/runのファイルシステムがtmpfsとなっていることが確認できます。tmpfsは揮発性なメモリ上に作成されるファイルシステムです。OSがシャットダウンされると消えてしまいます。
つまり、/run/log/journalにログを保存すると、次回起動したときに、前回のログが消えてしまうことになります。ログを残しておきたい場合は、/var/log/journalに保存することになります。
$df -T
コンフィグの設定(その3)
rsyslogdはlogrotateでログローテされますが、journaldにはログローテする仕組みがありません。では、ログがずっと肥大化し続けるのかといえば、そんなことはありません。次の設定でログの容量が一定の大きさになれば、古いログを削除してくれます。デフォルトでは空白になっています。デフォルトの場合、ディスク容量の10%に達したら、古いログを削除されるといった仕組みになっています。ただし、上限4GBという制限があります。10%で4GBであればディスク容量が40GB以上の場合は、4GB以上のログを貯めることはできないということになります。
SystemMaxUse=