rsyslog ルールの一貫性のない適用

rsyslog ルールの一貫性のない適用

/etc/rsyslog.d/40-filter.conf ファイルに {FILTER} を含むメッセージをリダイレクトするルールを作成しました。

:msg,contains,"{FILTER}" /var/log/filter.log
& ~

/etc/rsyslog.confファイルを編集して、その行のコメントを削除してリモートUDPメッセージを受け入れます。

$ModLoad imudp
$UDPServerRun 514

私のsyslogメッセージのソースは、次の単純なPythonスクリプトです。

#! /usr/bin/python

import logging
import logging.handlers

logger = logging.getLogger('LoggingTest')
logger.setLevel(logging.DEBUG)

formatter = logging.Formatter('{FILTER} %(message)s')
handler = logging.handlers.SysLogHandler()
handler.setFormatter(formatter)
logger.addHandler(handler)

logger.info("Test Message")

以下を使用してrsyslogを再起動します。

sudo service rsyslog restart

スクリプトを実行すると、/var/log/messages、/var/log/syslog、および/var/log/user.logに次の行が表示されますが、/var/log/filter.logには表示されません。ログは存在しますが空です。

Jun 23 17:18:29 {FILTER} Test Message

コマンドラインツール「ロガー」(以下のコマンドライン例)を使用すると、ルールが正しく適用されます。

$ logger "{FILTER} Test Message 2"
$ cat /var/log/filter.log
Jun 23 17:21:28 NDU1010 nick: {FILTER} Test Message 2

私のPythonスクリプトのメッセージにこのルールが適用されないのはなぜですか?私はこれを説明できません。

ベストアンサー1

あなたが提供した出力によると、Pythonスクリプトはrsyslogが期待するすべてのsyslogメッセージを送信しないようです。 「{FILTER}」部分にホスト名とアプリケーション名が必要なようです。 -d フラグを使用して rsyslogd を実行し、Python とロガーからメッセージを送信すると、これを簡単に証明できます。ソケットの生のメッセージを見ることができ、ロガーが「{FILTER}」部分の前でより多くのフィールドを送信するのを見ることができます。

おすすめ記事