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 的工作原理。
我正在使用 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 的工作原理。