web-dev-qa-db-ja.com

syslogがjournalctlでログに記録されないようにする

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 -xejournalctl -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サーバーおよびへのログアウトとジャーナルログが表示されます。ここにないオプションは何ですか?

3
Inian

Rsys [l] ogdデーモンにログを記録するsystemdサービスによって管理される単純なPythonスニペットがあります[…]

いいえ、していません。

あなたが持っているのは、systemdジャーナルにログを記録するサービスです。 Pythonプログラムが通信している既知の/dev/logソケットをリッスンしているサーバーはrsyslogdではありません。 systemd-journaldです。 rsyslogdsystemd-journaldの反対側に接続されており、Pythonプログラムはそれと通信していません。

このことから、systemd-journaldを介してデータを送信しない唯一の方法は、otherルートをrsyslogd、/に使用することであることが明らかです。notPythonライブラリがデフォルトで使用するよく知られたソケット。それはすべて、rsyslogdをどのように構成したかによって異なります。

  • imudpモジュールでUDPサーバーをオンにしている可能性があります。その場合、別のPythonを使用して、Pythonプログラムにそれを使用するように指示できます。そのようなUDPサーバーと通信するライブラリ。 (Python syslogライブラリは、よく知られたローカルソケットを使用するように組み込まれています。)
  • または(そして、マシンの外でUDPサービスを世界に開かないように注意する必要があることを考えると)、rsyslogd秒のよく知られていないAF_LOCALソケットをリッスンするように指定することもできます。 imuxsockモジュールの構成でこれを構成することによって。繰り返しになりますが、Pythonプログラムにそれを使用し、別のPythonライブラリを使用するように指示する必要があります。

Pythonプログラムで正確に行うことは、この回答の範囲を超えています。

参考文献

3
JdeBP