如何将消息从特定日志文件(例如客户端)转发/www/myapp/log/test.log
到rsyslog
远程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 文档以了解更高级的过滤功能:
答案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