Eu tenho um trecho de código Python simples gerenciado por um systemd
serviço que registra no rsysogd
daemon onde defini um arquivo de configuração para colocá-lo em um servidor syslog com um formato que defini. Isso está funcionando bem até agora.
No código abaixo, estou passando o argumento como a string que desejo logar no servidor. Estou usando este código abaixo como um módulo e usando-o apenas para registro, 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, ele está disponibilizando uma cópia do syslog quando visto do journalctl -xe
e o journalctl -u <my-service>
que não desejo que aconteça porque tenho outras informações críticas que estou registrando nos logs do 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 /etc/systemd/journald.conf
arquivo, não habilitei nenhuma das opções para ficar disponível. Procurei esta documentação do journald.conf para usar ForwardToSyslog=no
e reiniciei journald
o serviço como
systemctl restart systemd-journald
e também reiniciei minha unidade de serviço, mas vejo os logs no servidor syslog e também nos logs do diário. Qual opção estou perdendo aqui?
Não, você não tem.
O que você tem é um serviço que registra no diário do systemd. O servidor que escuta no soquete conhecido
/dev/log
com o qual seu programa Python está se comunicando não érsyslogd
. ésystemd-journald
.rsyslogd
está anexado ao outro lado desystemd-journald
, e seu programa Python não está se comunicando com ele.A partir disso, deve ficar claro que a única maneira de não enviar coisas
systemd-journald
é usar alguma outra rota pararsyslogd
, não o soquete conhecido que sua biblioteca Python usa por padrão. Isso tudo depende de como você configuroursyslogd
.imudp
módulo, caso em que você poderia dizer ao seu programa Python para usá-lo usando uma biblioteca Python diferente que fala com esse servidor UDP. (A biblioteca Python syslog é conectada para usar o conhecido soquete local.)rsyslogd
um segundo soquete, não muito conhecido,AF_LOCAL
para ouvir configurando isso na configuração doimuxsock
módulo. Novamente, você terá que dizer ao seu programa Python para usar isso e usar uma biblioteca Python diferente.O que exatamente você faz em seu programa Python está além do escopo desta resposta.
Leitura adicional