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


24

我如何从一个特定的日志文件转发消息就像/www/myapp/log/test.logrsyslog客户端的远程rsyslog服务器?该日志文件不在目录中/var/log

Answers:


42

只需在/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. 筛选条件

这非常有帮助,谢谢Bryan。我唯一的挑战是将多余的日志保留在客户端/ var / log / syslog之外的行在Ubuntu 12.04上不起作用。可能是PEBKAC,但我想知道这是否是已知的挑战?
James T Snell 2014年

弄清楚了。我的问题是/etc/rsyslog.d/50-default.conf已经有一个以开头的语句; auth; authpriv.none ..该行似乎优先。因此,通过添加您给出的最后一行,它无效。相反,必须修改先前存在的类似内容。很有帮助。谢谢!
James T Snell 2014年

1

在ubuntu上,我还必须注释掉放置特权行,以使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
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.