特定のプログラムからリモートsyslogサーバーにログを送信するようにrsyslogを構成するにはどうすればよいですか?


17

特定のタグ/プログラム名でsyslogに出力するプログラムがあります。そのプログラムからのsyslogトラフィックをフィルタリングしてリモートsyslogサーバーに送信し、他のすべてのsyslogトラフィックをローカルに残したいのです。

すべてのトラフィックをリモートサーバーに送信できます

*.* @remote_server

どのようにフィルタリングしますか?


1
これで私の質問に答えました。 stackoverflow.com/questions/4042115/ruby-syslog-custom-facility
Simmo

回答:


37

Rsyslog構成ファイルは次の場所にあります。 /etc/rsyslog.d/*.conf

Rsyslogはconfファイルを順番に読み取ります。したがって、特定の構成が他の何かが起こる前にロードされるように、構成ファイルに名前を付けることが重要です。そのため、ファイル名の先頭にゼロを付けてファイル名を付けてください00-my-file.conf。更新などでローカル設定が上書きされないように、新しいファイルを作成することをお勧めします。

例:

if $programname == 'programname' and $msg contains 'a text string' and $syslogseverity <= '6' then /var/log/custom/bind.log

または、特定のエントリを単に破棄する場合:

if $programname == 'programname' then ~

あなたの場合:(UDP)

if $programname == 'programname' then @remote.syslog.server
& ~

または(TCP)

if $programname == 'programname' then @@remote.syslog.server
& ~

& ~マッチング(唯一の前の行を!)処理を停止するための手段は、さらにエントリー。

より一般的な情報:

また、フィルターが同じ行にあることを常に確認してください。

# Example: Log mail server control messages to mail-queue.log
if $hostname == 'titus'\
and $programname == 'smtp.queue.'\
and $syslogseverity <= '6' then /var/log/titus/mail-queue.log
& ~

便利なフィルター:

$hostname
$programname
$msg
$syslogseverity

演算子:

== (equals)
contains
and
or

詳細:http : //wiki.rsyslog.com/index.php/Configuration_Samples


1
壊れたリンクを修正できますか?
マークウォルシュ

1

これを試すこともできます。それは私のためにうまく機能しています。

$template Incoming-logs,"/var/log/testing_docker/%PROGRAMNAME%.log"
if $programname startswith 'docker' then -?Incoming-logs

注:ここでは、testing_dockerフォルダの所有権をsyslogユーザーに付与する必要があります。以下のコマンドに従って、許可を設定します。

chown syslog:syslog testing_docker
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.