特定のタグ/プログラム名でsyslogに出力するプログラムがあります。そのプログラムからのsyslogトラフィックをフィルタリングしてリモートsyslogサーバーに送信し、他のすべてのsyslogトラフィックをローカルに残したいのです。
すべてのトラフィックをリモートサーバーに送信できます
*.* @remote_server
どのようにフィルタリングしますか?
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
これを試すこともできます。それは私のためにうまく機能しています。
$template Incoming-logs,"/var/log/testing_docker/%PROGRAMNAME%.log"
if $programname startswith 'docker' then -?Incoming-logs
注:ここtesting_docker
フォルダーの所有権をsyslogユーザーに付与する必要があります。以下のコマンドに従って、許可を設定します。
chown syslog:syslog testing_docker