我已经设置了一个 rsyslog 服务器,它接受来自客户端的日志信息。
我可以成功接收系统日志消息,但是我也对记录许多文件感兴趣。
这是我的客户的样子:
$ModLoad imfile
$InputFileName /var/log/drew-error.log
$InputFileTag drew:
$InputFileStateFile stat-drew-error
$InputFileSeverity error
$InputRunFileMonitor
$InputFilePollInterval 1
我不确定要在我的服务器配置中放入什么。理想情况下,我希望服务器输出如下内容:
/var/log/remote/$HOSTNAME/drew-error.log
我会以正确的方式解决这个问题吗?这是合理的尝试实现吗?
最佳案例场景:我希望能够更新我在客户端上观看的文件,而无需重新配置服务器。如果这不可能,或者太难,我可能可以解决一个硬编码的解决方案。
我试过的
到目前为止,我已经为服务器尝试了一些配置(尽管我觉得它们不是正确的解决方案/方法):
$template syslog, "/var/log/remote/%hostname%/%programname%/%$year%%$month%%$day%/syslog"
*.*;auth,authpriv.none ?syslog
和
$template DrewTemplate,"/var/log/remote-DREWAPP-%HOSTNAME%.log"
if $programname == 'drew:' then -?DrewTemplate
& ~
$template PerHostLog,"/var/log/remote-%HOSTNAME%.log"
if $fromhost-ip startswith '1.2.' then -?PerHostLog
& ~
一种解决方案是检查 $programname(它使用来自您监视的每个文件的客户端上的 $InputFileTag 的值填充)。
客户端配置
在客户端上,创建文件监视器,并确保 $InputFileTag 以“file-”开头。以下是日志文件 foo 和 bar 的示例:
服务器配置
然后在服务器上,检查 $programname 是否以 'file-' 开头(所有文件监视器都应如此,但任何标准 syslog 消息都不应如此)。这是一个例子: