Como limpo entradas de diário de diário apenas para uma unidade específica?

18

Passei alguns dias escrevendo um script python e criando um arquivo de unidade systemd para ele. Durante o teste, o script registrou muitos erros no diário. Gostaria de limpar esses erros do journald agora que terminei.

Existem várias maneiras de limpar o diário inteiro, como descrito aqui: Como limpar o journalctl, incluindo o uso journalctl --vacuum-time=2d, o uso journalctl --vacuum-size=500Me a configuração temporária SystemMaxUse=no /etc/systemd/journald.conf com um valor muito baixo.

Tudo isso parece limpar o diário inteiro, afetando todas as unidades. Eu só preciso limpar as entradas para uma única unidade. Isso é possível?

Tal
fonte
Uma abordagem possível é escrever um programa usando as funções de diário do libsystemd para reescrever o arquivo de diário sem as entradas que você deseja remover.
Mathias Rav

Respostas:

6

Use meu programa Python 3 copy_journal.py nos arquivos de diário /var/log/journaldos quais você deseja remover as entradas.

Por exemplo, para fazer uma cópia system.journalsem entradas de log para 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
fonte
-1

Eu não acho que isso seja possível, porque de acordo com a página de manual do journalctl "A saída é intercalada de todos os arquivos de diário acessíveis, estejam eles rodados ou atualmente sendo gravados".

No entanto, você pode filtrá-lo por uma unidade - 'journalctl -u some.service' e tentar remover as entradas de log do diário com seu próprio script usando cron.

Recoba20
fonte
7
Parece que você está sugerindo que existe uma maneira de excluir entradas de log individuais do journald. Existe um? Isso seria muito útil.
Tal