日志轮换后,Rsyslog停止将数据发送到远程服务器


9

在我的配置中,我有rsyslog负责以下对/home/user/my_app/shared/log/unicorn.stderr.logusing的更改imfile。使用TCP将内容发送到另一个远程日志记录服务器。

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

我尝试重新加载rsyslog,发送HUP信号并完全重新启动它,但是没有任何效果。

我发现真正可行的唯一方法是肮脏的:

  • 停止服务,删除rsyslog统计文件,然后再次启动rsyslog。我的logrotate文件中的postrotate挂钩中的所有内容。
  • kill -9 rsyslog并重新开始。

有没有一种不接触rsyslog内部的正确方法?

Rsyslog文件

$ ModLoad标记
$ ModLoad imudp
$ ModLoad imtcp
$ ModLoad imuxsock
$ ModLoad imklog
$ ModLoad档案

$ template WithoutTimeFormat,“ [环境] [%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
  压缩
  无可辩驳的
  扩展名gz
  复制截断
  创建640位用户
  共享脚本
  旋转后
    (停止rsyslog && rm / var / spool / rsyslog / stat- * &&启动rsyslog 2>&1)|| 真正
  尾标
}

仅供参考,rsyslog用户可以读取该文件,我的服务器可以访问,并且不会继续跟踪在同一周期内不循环的其他日志文件。

我正在运行Ubuntu 12.04。

Answers:


8

问题实际上来自logrotate。

基本上,使用我的配置(运行独角兽),我不需要使用copytruncate指令。(这就是导致问题的原因)

USR1-重新打开工作进程拥有的所有日志。有关被视为日志的信息,请参见Unicorn :: Util.reopen_logs。在处理完当前请求之前,不会重新打开日志文件,因此一个请求的多个日志行(由Rails完成)不会在多个日志之间分配。

在更新到以下配置后,它开始正常工作:

/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
}

如果这些是文件的直接副本,我认为您的问题实际上是您在使用post-rotate(不是问题)而不是postrotate,因为您使用的原始logrotate脚本应该可以与rsyslog一起正常工作(如果postrotate脚本正在运行) )...?
mltsy 2014年

2
我不记得什么时候,但是我确实改变post-rotatelastaction。您的评论仍然非常明智,并且可能在当时解决了我的问题:)。不过,为了便于记录,copytruncate将来无论如何我都将避免使用它,因为它速度慢并且可以使用文件句柄。
Vincent B.

2

您的logrotate文件包含的条目/home/user/shared/log/*.log,该条目与中的日志文件不匹配/home/user/my_app/shared/log/unicorn.stderr.log。您需要为该目录​​添加一个logrotate条目,并确保它包含copytruncate-照原样,rsyslog正在重命名当前文件并创建一个新文件,并且imfile始终遵循现在重命名的文件的文件句柄。


抱歉,文件名只是一个错字。但是copytruncate可能是个好主意。让我看看那一个:)。
Vincent B.
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.