在我的配置中,我有rsyslog负责使用imfile跟踪/home/user/my_app/shared/log/unicorn.stderr.log的更改.使用TCP将内容发送到另一个远程日志记录服务器.
当日志文件旋转时,rsyslog会停止向远程服务器发送数据.
我尝试重新加载rsyslog,发送HUP信号并完全重新启动它,但没有任何效果.
我发现实际工作的唯一方法是脏的:
>停止服务,删除rsyslog stat文件并再次启动rsyslog.所有这些都在我的logrotate文件中的postrotate钩子中.
> kill -9 rsyslog并重新启动它.
如果没有触及rsyslog内部,我有没有正确的方法呢?
Rsyslog文件
$ModLoad immark
$ModLoad imudp
$ModLoad imtcp
$ModLoad imuxsock
$ModLoad imklog
$ModLoad imfile
$template WithoutTimeFormat,"[environment] [%syslogtag%] -- %msg%"
$WorkDirectory /var/spool/rsyslog
$InputFileName /home/user/my_app/shared/log/unicorn.stderr.log
$InputFileTag unicorn-stderr
$InputFileStateFile stat-unicorn-stderr
$InputFileSeverity info
$InputFileFacility local8
$InputFilePollInterval 1
$InputFilePersistStateInterval 1
$InputRunFileMonitor
# Forward to remote server
if $syslogtag contains 'apache-' then @@my_server:5000;WithoutTimeFormat
:syslogtag,contains,"apache-" ~
*.* @@my_server:5000;SyslFormat
Logrotate文件
/home/user/my_app/shared/log/*.log {
daily
missingok
dateext
rotate 30
compress
notifempty
extension gz
copytruncate
create 640 user user
sharedscripts
post-rotate
(stop rsyslog && rm /var/spool/rsyslog/stat-* && start rsyslog 2>&1) || true
endscript
}
仅供参考,该文件对于rsyslog用户是可读的,我的服务器是可访问的,并且在同一周期内不旋转的其他日志文件继续被正确跟踪.
我正在运行Ubuntu 12.04.