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

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

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

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

*.* @remote_server

我该如何过滤它?

答案1

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

我们也可以试试这个。对我来说效果很好。

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

注意:此处testing_docker文件夹所有权应赋予 syslog 用户。按照以下命令设置权限。

chown syslog:syslog testing_docker

相关内容