J'ai un simple extrait Python géré par un systemd
service qui se connecte au rsysogd
démon où j'ai défini un fichier de configuration pour le mettre sur un serveur syslog avec un format que j'ai défini. Cela fonctionne bien jusqu'à présent.
Dans le code ci-dessous, je passe l'argument en tant que chaîne que je veux connecter au serveur. J'utilise ce code ci-dessous en tant que module et je l'utilise pour la journalisation seule, le script réel l'utilise à des fins de journalisation.
#!/usr/bin/env python
import syslog
import sys
syslog.openlog(facility=syslog.LOG_LOCAL0)
syslog.syslog(syslog.LOG_INFO, sys.argv[1])
Puisque l'application est gérée par systemd
il rend une copie du syslog disponible lorsqu'il est vu depuis le journalctl -xe
et le journalctl -u <my-service>
ce que je ne souhaite pas qu'il se produise car j'ai d'autres informations critiques que je consigne dans les journaux de journal.
La définition du service est
[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
et dans le /etc/systemd/journald.conf
fichier, je n'en ai activé aucun des options disponibles. J'ai recherché cette documentation journald.conf pour utiliser ForwardToSyslog=no
et a redémarré journald
service en tant que
systemctl restart systemd-journald
et également redémarré mon unité de service, mais je vois les journaux vers le serveur syslog et également aux journaux de bord. Quelle option me manque ici ?
Réponse acceptée :
J'ai un extrait Python simple géré par un service systemd qui se connecte au démon rsys[l]ogd […]
Non, vous ne l'avez pas fait.
Ce que vous avez est un service qui se connecte au journal systemd. Le serveur écoutant sur le bien connu /dev/log
socket auquel votre programme Python parle n'est pas rsyslogd
. C'est systemd-journald
. rsyslogd
est attaché à l'autre côté de systemd-journald
, et votre programme Python ne lui parle pas.
À partir de là, il devrait être évident que le seul moyen de ne pas envoyer de contenu via systemd-journald
est d'utiliser un autre route vers rsyslogd
, pas le socket bien connu que votre bibliothèque Python utilise par défaut. Tout dépend de la façon dont vous avez configuré rsyslogd
.
- Il est possible que vous ayez activé un serveur UDP avec le
imudp
module, auquel cas vous pouvez dire à votre programme Python de l'utiliser en utilisant une bibliothèque Python différente qui parle à un tel serveur UDP. (La bibliothèque Python syslog est câblée pour utiliser le socket local bien connu.) - Ou (et mieux, étant donné que vous devez faire attention à ne pas ouvrir un service UDP au monde en dehors de votre machine) vous auriez pu donner
rsyslogd
un second, peu connu,AF_LOCAL
socket à écouter en le configurant dansimuxsock
configuration du module. Encore une fois, vous devrez dire à votre programme Python de l'utiliser et d'utiliser une autre bibliothèque Python.
Ce que vous faites exactement dans votre programme Python dépasse le cadre de cette réponse.
Autres lectures
- https://unix.stackexchange.com/a/294206/5132