特定のユニットのみのjournalctlエントリをクリアするにはどうすればよいですか?


18

Pythonスクリプトを作成し、そのためのsystemdユニットファイルを作成するのに数日費やしました。テスト中、スクリプトは多くのエラーをjournaldに記録しました。完了したら、これらのエラーをjournaldからクリアしたいと思います。

ここで説明するように、ジャーナル全体をクリアする方法はいくつかあります: using journalctl --vacuum-time=2d、using journalctl --vacuum-size=500M、およびSystemMaxUse=/etc/systemd/journald.confを非常に低い値に一時的に設定するなど、journalctlクリアする方法

これらはすべて、ジャーナル全体をクリアするように見え、すべてのユニットに影響します。単一のユニットのエントリをクリアするだけです。これは可能ですか?


可能なアプローチは、libsystemdのジャーナル関数を使用してプログラムを記述し、削除したいエントリなしでジャーナルファイルを書き換えることです。
マティアスRav

回答:


6

エントリを削除するジャーナルファイルでPython 3プログラムcopy_journal.pyを使用し/var/log/journalます。

例えば、のコピーを作成するsystem.journalためのログエントリなしNetworkManager.service

$ journalctl --file=system.journal | wc
    167    1934   18825
$ journalctl --file=system.journal | grep -v NetworkManager | wc
     77     881    8421
$ python3 copy_journal.py --remove-unit=NetworkManager.service system.journal system-without-nm.journal
$ journalctl --file=system-without-nm.journal | wc
     77     881    8421

-1

journalctlのmanページによると、「出力は、ローテーションされているか、現在書き込まれているかに関係なく、アクセス可能なすべてのジャーナルファイルからインターリーブされている」ためです。

ただし、「journalctl -u some.service」という単位でフィルタリングしてから、cronを使用して独自のスクリプトでジャーナルからログエントリを削除してみてください。


7
journaldから個々のログエントリを削除する方法があることを暗示しているようです。あるの?それは非常に役立つでしょう。
タル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.