web-dev-qa-db-ja.com

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

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

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

*.* @remote_server

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

16
Simmo

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

35
oblivian

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

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

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

chown syslog:syslog testing_docker
1
Nagaraj