Bagaimana cara menghapus entri jurnalctl hanya untuk unit tertentu?

18

Saya menghabiskan beberapa hari menulis skrip python, dan membuat file unit systemd untuk itu. Selama pengujian, skrip mencatat banyak kesalahan ke journald. Saya ingin menghapus kesalahan-kesalahan dari journald sekarang setelah saya selesai.

Ada beberapa cara untuk menghapus seluruh jurnal, seperti dijelaskan di sini: Cara menghapus journalctl termasuk menggunakan journalctl --vacuum-time=2d, menggunakan journalctl --vacuum-size=500M, dan sementara pengaturan SystemMaxUse=di /etc/systemd/journald.conf ke nilai yang sangat rendah.

Semua ini tampaknya menghapus seluruh jurnal, mempengaruhi semua unit. Saya hanya perlu menghapus entri untuk satu unit. Apakah ini mungkin?

Tal
sumber
Pendekatan yang mungkin adalah menulis program menggunakan fungsi jurnal libsystemd untuk menulis ulang file jurnal tanpa entri yang ingin Anda hapus.
Mathias Rav

Jawaban:

6

Gunakan program Python 3 saya copy_journal.py pada file jurnal /var/log/journaltempat Anda ingin menghapus entri.

Misalnya, untuk membuat salinan system.journaltanpa entri log untuk 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
Mathias Rav
sumber
-1

Saya tidak berpikir itu mungkin, karena menurut halaman manual journalctl "Output disisipkan dari semua file jurnal yang dapat diakses, apakah mereka diputar atau sedang ditulis".

Namun Anda dapat memfilternya dengan unit - 'jurnalctl -u some.service' dan kemudian mencoba untuk menghapus entri log dari jurnal dengan skrip Anda sendiri menggunakan cron.

Recoba20
sumber
7
Sepertinya Anda menyiratkan bahwa ada cara untuk menghapus entri log individual dari journald. Apakah ada satu? Itu akan sangat membantu.
Tal