如何使用 rsyslog 将 /var/log 之外的特定日志文件转发到远程服务器?

如何使用 rsyslog 将 /var/log 之外的特定日志文件转发到远程服务器?

如何将消息从特定日志文件(例如客户端)转发/www/myapp/log/test.logrsyslog远程rsyslog服务器?此日志文件位于目录之外/var/log

答案1

只需在 /etc/rsyslog.conf 中设置一个 imfile 规则

#/etc/rsyslog.conf
$ModLoad imfile
$InputFileName /data/mysql/error.log
$InputFileTag mysql-error
$InputFileStateFile stat-mysql-error
$InputFileSeverity error
$InputFileFacility local3
$InputRunFileMonitor
local3.* @@hostname:<portnumber>

这将监视文件并保存到 syslog 中的 local3 设施。然后,您可以将 local3 设施中的所有数据发送到远程服务器。您可能还想将以下内容添加到 rsyslog conf(在 Ubuntu 上通常是 /etc/rsyslog.d/50-default.conf)中,以免将 local3 设施保存到 /var/log/syslog:

#/etc/rsyslog.d/50-default.conf
*.*;auth,authpriv.none,local1.none,local2.none,local3.none,local4.none,local5.none,local6.none          -/var/log/syslog

此外,我鼓励您阅读以下 rsyslog 文档以了解更高级的过滤功能:

  1. 属性替换器
  2. 过滤条件

答案2

在 ubuntu 上,我还必须注释掉 drop permission 行,以便让 rsyslog 真正读取 /var/logs 之外的日志文件。

#/etc/rsyslog.conf
$ModLoad imfile
$InputFileName /data/mysql/error.log
$InputFileTag mysql-error
$InputFileStateFile stat-mysql-error
$InputFileSeverity error
$InputFileFacility local3
$InputRunFileMonitor
local3.* @@hostname:<portnumber>

# Set the default permissions for all log files.
#
#$FileOwner syslog
#$FileGroup adm
#$FileCreateMode 0640
#$DirCreateMode 0755
#$Umask 0022
#$PrivDropToUser syslog
#$PrivDropToGroup syslog

相关内容