Evitar que logs do sistema sejam registrados em journalctl

1

Eu tenho um snippet Python simples gerenciado por um serviço systemd que registra no daemon rsysogd onde eu defini um arquivo de configuração para colocá-lo em um servidor syslog com um formato que eu defini. Isso está funcionando bem até agora.

No código abaixo, eu estou passando o argumento como a string que eu quero fazer no servidor. Eu estou usando este código abaixo como um módulo e usá-lo para o registro sozinho, o script real usa isso para fins de registro.

#!/usr/bin/env python

import syslog
import sys

syslog.openlog(facility=syslog.LOG_LOCAL0)
syslog.syslog(syslog.LOG_INFO, sys.argv[1])

Como o aplicativo é gerenciado por systemd , ele está disponibilizando uma cópia do syslog quando visto de journalctl -xe e journalctl -u <my-service> , o que não desejo que aconteça, pois tenho outras informações importantes. registro em logs de diário.

A definição de serviço é

[Unit]
Description=Computes device foobar availability status

[Service]
Type=simple

EnvironmentFile=/etc/sysconfig/db_EndPoint
ExecStart=/usr/bin/python /opt/foobar/foobar.py
WatchdogSec=60
RestartSec=10
Restart=always
LimitNOFILE=4096

[Install]
WantedBy=default.target

e no arquivo /etc/systemd/journald.conf , eu não habilitei qualquer das opções disponíveis. Eu procurei esta documentação journald.conf para usar ForwardToSyslog=no e reiniciei journald service como

systemctl restart systemd-journald

e também reiniciei minha unidade de serviço, mas vejo os logs para o servidor syslog e também para os logs de diário. Que opção estou sentindo falta aqui?

    
por Inian 08.01.2018 / 09:38

1 resposta

2

I have a simple Python snippet managed by a systemd service which logs to the rsys[l]ogd daemon […]

Não, você não tem.

O que você tem é um serviço que registra no diário do systemd. O servidor atendendo no soquete /dev/log conhecido com o qual seu programa Python está falando não é rsyslogd . É systemd-journald . rsyslogd está anexado ao outro lado de systemd-journald , e seu programa em Python não está falando com ele.

A partir disso, deve ficar claro que a única maneira de não enviar material via systemd-journald é usar alguma outra rota outra para rsyslogd , não socket conhecido que sua biblioteca Python usa por padrão. Tudo depende de como você configurou rsyslogd .

  • É possível que você tenha ativado um servidor UDP com o módulo imudp e, nesse caso, você poderia dizer ao seu programa Python para usá-lo usando uma biblioteca diferente do Python que fala com esse servidor UDP. (A biblioteca syslog do Python é programada para usar o soquete local conhecido.)
  • Ou (e melhor, dado que você precisa ter cuidado ao não abrir um serviço UDP para o mundo fora de sua máquina) você poderia ter dado rsyslogd um segundo, não bem conhecido, AF_LOCAL socket para ouvir por configurando isso na configuração do módulo imuxsock . Novamente, você terá que dizer ao seu programa em Python para usar isso e usar uma biblioteca Python diferente.

O que exatamente você faz no seu programa em Python está além do escopo desta resposta.

Leitura adicional

por 08.01.2018 / 17:00