如何配置rsyslog将特定程序的日志发送到远程syslog服务器?

我有一个程序,它使用给定的标签/程序名称将输出发送到syslog。我想要能够过滤来自该程序的syslog流量并将其发送到远程syslog服务器,同时保留所有其他syslog流量在本地。

我可以使用以下方法将所有流量发送到远程服务器:

*.* @remote_server

我该如何筛选它?


1这回答了我的问题。http://stackoverflow.com/questions/4042115/ruby-syslog-custom-facility - Simmo
2个回答

Rsyslog的配置文件位于:/etc/rsyslog.d/*.conf Rsyslog按顺序读取配置文件,因此重要的是您命名配置文件以便在发生任何其他操作之前加载特定的配置。因此,请以前导零开始命名您的文件,例如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

2我们能修复这个损坏的链接吗? - Mark Walsh
$msg仍然被写入syslog/var/log/custom.log。如何只输出到custom.log - codywohlers

我们也可以试试这个。对我来说运行得很好。
$template Incoming-logs,"/var/log/testing_docker/%PROGRAMNAME%.log"
if $programname startswith 'docker' then -?Incoming-logs

注意:这里应该将testing_docker文件夹的所有权授予syslog用户。请按照以下命令设置权限。
chown syslog:syslog testing_docker