systemd
デーモンにログを記録するrsysogd
サービスによって管理される単純なPythonスニペットがあります。ここで、構成ファイルを定義して、syslogに配置します。私が定義したフォーマットのサーバーこれは今のところうまくいきます.
以下のコードでは、サーバーにログオンする文字列として引数を渡します。以下のコードをモジュールとして使用し、ロギングのみに使用しています。実際のスクリプトでは、これをロギングの目的で使用しています。
#!/usr/bin/env python
import syslog
import sys
syslog.openlog(facility=syslog.LOG_LOCAL0)
syslog.syslog(syslog.LOG_INFO, sys.argv[1])
アプリケーションはsystemd
によって管理されているため、journalctl -xe
とjournalctl -u <my-service>
から見たときに、syslogのコピーを利用できるようにしています。ジャーナルログに記録している情報。
サービス定義は
[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
/etc/systemd/journald.conf
ファイルでは、使用できるオプションを有効にしていません。この journald.conf ドキュメントを調べてForwardToSyslog=no
を使用し、journald
サービスを再起動しました。
systemctl restart systemd-journald
また、サービスユニットを再起動しましたが、syslogサーバーおよびへのログアウトとジャーナルログが表示されます。ここにないオプションは何ですか?
Rsys [l] ogdデーモンにログを記録するsystemdサービスによって管理される単純なPythonスニペットがあります[…]
いいえ、していません。
あなたが持っているのは、systemdジャーナルにログを記録するサービスです。 Pythonプログラムが通信している既知の/dev/log
ソケットをリッスンしているサーバーはrsyslogd
ではありません。 systemd-journald
です。 rsyslogd
はsystemd-journald
の反対側に接続されており、Pythonプログラムはそれと通信していません。
このことから、systemd-journald
を介してデータを送信しない唯一の方法は、otherルートをrsyslogd
、/に使用することであることが明らかです。notPythonライブラリがデフォルトで使用するよく知られたソケット。それはすべて、rsyslogd
をどのように構成したかによって異なります。
imudp
モジュールでUDPサーバーをオンにしている可能性があります。その場合、別のPythonを使用して、Pythonプログラムにそれを使用するように指示できます。そのようなUDPサーバーと通信するライブラリ。 (Python syslogライブラリは、よく知られたローカルソケットを使用するように組み込まれています。)rsyslogd
秒のよく知られていないAF_LOCAL
ソケットをリッスンするように指定することもできます。 imuxsock
モジュールの構成でこれを構成することによって。繰り返しになりますが、Pythonプログラムにそれを使用し、別のPythonライブラリを使用するように指示する必要があります。Pythonプログラムで正確に行うことは、この回答の範囲を超えています。