日志旋转后,Rsyslog停止向远程服务器发送数据

在我的configuration中,我有imfile负责使用imfile/home/user/my_app/shared/log/unicorn.stderr.log进行imfile 。 内容使用TCP发送到另一个远程日志logging服务器。

当日志文件旋转时,rsyslog停止发送数据到远程服务器。

我尝试重新加载rsyslog,发送一个HUP信号,并重新启动它,但没有任何工作。

我能find的实际工作的唯一方法是肮脏的:

  • 停止服务,删除rsyslog stat文件并重新启动rsyslog。 所有在postrotate钩在我的logrotate文件。
  • 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条目,并确保它包含copytruncatecopytruncate正在重命名当前文件并创build一个新文件,imfile继续遵循现在重命名的文件的文件句柄。