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


17

我有一个程序,可以使用给定的标记/程序名称输出到syslog。我希望能够从该程序中过滤系统日志流量,并将其发送到远程系统日志服务器,而将所有其他系统日志流量保留在本地。

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

*.* @remote_server

我该如何过滤?


Answers:


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
我们可以修复断开的链接吗?
Mark Walsh

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.