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

Sim*_*mmo 18 rsyslog syslog

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

我可以将所有流量发送到远程服务器

*.* @remote_server
Run Code Online (Sandbox Code Playgroud)

我如何过滤它?

obl*_*ian 43

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
Run Code Online (Sandbox Code Playgroud)

或者,如果您只想丢弃某些条目:

if $programname == 'programname' then ~
Run Code Online (Sandbox Code Playgroud)

在你的情况下:(UDP)

if $programname == 'programname' then @remote.syslog.server
& ~
Run Code Online (Sandbox Code Playgroud)

或 (TCP)

if $programname == 'programname' then @@remote.syslog.server
& ~
Run Code Online (Sandbox Code Playgroud)

该& ~方式停止处理匹配(前行而已!)项进一步。

一些更一般的信息:

此外,始终确保过滤器位于同一行:

# 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
& ~
Run Code Online (Sandbox Code Playgroud)

有用的过滤器:

$hostname
$programname
$msg
$syslogseverity
Run Code Online (Sandbox Code Playgroud)

运营商:

== (equals)
contains
and
or
Run Code Online (Sandbox Code Playgroud)

更多信息:http : //wiki.rsyslog.com/index.php/Configuration_Samples

  • 我们可以修复断开的链接吗? (2认同)