我已经设置了一个rsyslog服务器,它接受来自客户端的日志信息。
我可以成功接收syslog消息,但是我也有兴趣logging一些文件 。
这是我的客户的样子:
$ModLoad imfile $InputFileName /var/log/drew-error.log $InputFileTag drew: $InputFileStateFile stat-drew-error $InputFileSeverity error $InputRunFileMonitor $InputFilePollInterval 1
我不确定要在我的服务器configuration。 理想情况下,我想要服务器输出这样的东西:
/var/log/remote/$HOSTNAME/drew-error.log
我正在以正确的方式进行吗? 这是合理的尝试实现?
最佳案例场景: 我希望能够更新我在客户端上观看的文件,而不必重新configuration服务器。 如果这不可能,或者太难,我可以围绕一个硬编码的解决scheme工作。
到目前为止,我已经尝试了一些服务器configuration(虽然我觉得他们不是正确的解决scheme/方法):
$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 & ~
一个解决scheme是检查$ programname(在每个你监视的文件上,在客户端上用$ InputFileTag的值填充)。
在客户端上,创build文件监视器,并确保$ InputFileTag以'file-'开头。 这里是日志文件foo和bar的例子:
######################### START /var/log/foo.log $InputFileName /var/log/foo.log $InputFileTag file-foo: $InputFileStateFile stat-foo $InputFileSeverity info $InputRunFileMonitor ######################### END /var/log/foo.log ######################### START /var/log/bar.log $InputFileName /var/log/bar.log $InputFileTag file-bar: $InputFileStateFile stat-bar $InputFileSeverity info $InputRunFileMonitor ######################### END /var/log/bar.log
然后在服务器上,检查$ programname是否以'file-'开头(对于所有的文件监视器应该是这样,而不是任何标准的系统日志消息)。 这里是一个例子:
$template FileTemplate,"/var/log/remote-%HOSTNAME%-%programname%.log" if $programname startswith 'file-' then -?FileTemplate & ~