rsyslog 在写入本地日志文件时有 "great" 延迟

rsyslog has "great" latency when writing to local log file

我正在使用 rsyslog 在 Raspberry Pi 上使用标准 /etc/rsyslog.conf 文件写入日志。 我使用 logger 命令从 Bash 脚本编写日志,使用 syslog 库从 Python 脚本编写日志。

Bash 示例:

logger --tag=currentFile.sh --priority=local0.warn "Some error message"

Python 示例:

syslog.openlog(ident="currentFile.py", facility=syslog.LOG_LOCAL0)      # create syslog handle
syslog.syslog(syslog.LOG_WARNING, "Some error message"                  # write error message

为将来记录到远程 rsyslog 服务器做准备,“local0.log”文件用作中央日志文件。

日志记录工作正常,但我不明白为什么日志总是有 1-5 分钟的延迟。当我在 python 脚本中进行错误处理然后将日志写入“local0.log”时尤其如此。

我问是因为我想不出为什么本地日志记录会有这么大的延迟。也许这与我使用的 syslog python 库有关?

任何感兴趣的人... 我设法解决了这个问题。

观察


问题不在于 python syslog 库,也不在于 bash logger命令。

Rsyslog gathers log messages and adds them to the main queue. A worker thread then pulls messages off the main queue and delivers them to their desinations and/or adds the message to an action queue. If a worker is unable to deliver messages to a destination, all progress of that queue will block until that delivery is able to succeed (or hits the retry limit and permanently fails).

所以消息有几分钟没有写入或被完全“删除”,因为 rsyslog 试图与没有响应的服务器建立连接。

解决方案


这是我的 /etc/rsyslog.conf 之前的片段:

# local file:
local0.*          /var/log/local0.log

# Syslog over TCP:
local0.*          @@192.100.100.100

/etc/rsyslog.conf 现在:

action(name="someName" type="omfwd" Target="192.100.100.100" Port="50514" 
    Protocol="tcp" queue.type="FixedArray"

# local file:
local0.*          /var/log/local0.log

这将创建一个操作队列,如果连接失败,它不会阻止所有日志处理。当然还有更多的东西,然后将它传送到服务器,但是我必须进入 modules 这对于这个 post 来说太大了.

备注


如果您对 rsyslog、它的队列和工作程序还有其他问题,请查看 David Lang 的这篇“guide”,它确实帮助我理解了 rsyslog 的工作原理。