在我的configuration中,我有imfile负责使用imfile对/home/user/my_app/shared/log/unicorn.stderr.log进行imfile 。 内容使用TCP发送到另一个远程日志logging服务器。
当日志文件旋转时,rsyslog停止发送数据到远程服务器。
我尝试重新加载rsyslog,发送一个HUP信号,并重新启动它,但没有任何工作。
我能find的实际工作的唯一方法是肮脏的:
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信息 $ InputFileFacility local8 $ InputFilePollInterval 1 $ InputFilePersistStateInterval 1 $ InputRunFileMonitor #转发到远程服务器 如果$ syslogtag包含“apache-”,那么@@ my_server:5000; WithoutTimeFormat :syslogtag,包含“apache-”〜 *。* @@ my_server:5000; SyslFormat
Logrotate文件
/home/user/my_app/shared/log/*.log {
日常
missingok
dateext
旋转30
压缩
notifempty
扩展gz
copytruncate
创build640个用户用户
sharedscripts
后旋转
(stop rsyslog && rm / var / spool / rsyslog / stat- * && start rsyslog 2>&1)|| 真正
endscript
}
仅供参考,该文件对于rsyslog用户是可读的,我的服务器是可访问的,并且在同一循环中不旋转的其他日志文件继续被正确地跟踪。
我正在运行Ubuntu 12.04。
问题实际上来自于logrotate。
基本上与我的configuration,运行独angular兽,我不需要使用copytruncate指令。 (这是什么原因导致问题)
USR1 – 重新打开工作进程拥有的所有日志。 请参阅Unicorn :: Util.reopen_logs了解什么是日志。 日志文件在完成处理当前请求之前不会重新打开,因此一个请求的多个日志行(由Rails完成)不会被分割到多个日志中。
在更新到此configuration后,这开始正常工作:
/home/user/my_app/shared/log/*.log { daily missingok dateext rotate 30 compress notifempty extension gz create 640 user user sharedscripts post-rotate # Telling Unicorn to reload files test -s /home/user/my_app/shared/pids/unicorn.pid && kill -USR1 "$(cat /home/user/my_app/shared/pids/unicorn.pid)" # Reloading rsyslog telling it that files have been rotated reload rsyslog 2>&1 || true endscript }
您的logrotate文件包含/home/user/shared/log/*.log条目,该条目与/home/user/shared/log/*.log中的日志文件不匹配。 您需要为该目录添加一个logrotate条目,并确保它包含copytruncate – copytruncate正在重命名当前文件并创build一个新文件,imfile继续遵循现在重命名的文件的文件句柄。