如何有效地使用 iNotify 和 rSyslog 缓存?

Posted

技术标签:

【中文标题】如何有效地使用 iNotify 和 rSyslog 缓存?【英文标题】:How to effectively use iNotify with rSyslog caching? 【发布时间】:2011-11-30 15:28:59 【问题描述】:

出于性能原因,默认情况下,rsyslog 不会立即将数据同步到日志文件。 参考Output File Syncing部分

这是否意味着如果我在 syslog 文件上使用 iNotify,我可能会错过一个事件?

到目前为止,我正在使用 tail -f 监视文件,它似乎正在捕获所有事件。但我很怀疑 syslog 缓存可能会导致 inotify 事件丢失。

【问题讨论】:

【参考方案1】:

我想这取决于您在收到 inotify 事件时正在做什么。如果您正在跟踪最后一个偏移量,在新事件上读取 EOF 并更新偏移量,那么您应该没问题(这就是 tail 所做的,除了它使用计时器而不是 inotify (好吧,新的可能使用 inotify ))。

【讨论】:

我担心的是,如果我首先会错过任何活动。如果 syslog 正在缓存,它可能根本不会触及日志文件——如果发生这种情况,inotify 将看不到任何事件。 当然,可能会有延迟,具体取决于 rsyslogd 缓冲行的时间长短,但我不认为延迟会很长。只是不能保证写入日志文件的每一行都有一个 inotify 事件。 关于如何实现它的任何建议?我需要有保证的事件处理。我现在正在考虑探索 syslog 插件 您可以使用$ActionFileEnableSync on 关闭rsyslog 缓存。这样就够了吗? 您可能会研究的另一件事是编写可以通过某种套接字接受系统日志事件的东西,这样您就不必触摸磁盘。看起来 rsyslog 将支持转发到各种 TCP、Unix 和 UDP 套接字。由于可能丢失事件,我会避免使用 UDP。【参考方案2】:

我继续按照@cpugeniusmv 的建议创建了这个-http://code.google.com/p/logmon/

【讨论】:

以上是关于如何有效地使用 iNotify 和 rSyslog 缓存?的主要内容,如果未能解决你的问题,请参考以下文章

如何将rsyslog消息重定向到其他路径而不是/ var / log

如何识别运行 Rsyslog 的端口?

bash & inotify - 监控和移动文件

零是 IN_MOVED_TO/FROM inotify 事件的有效 cookie 值吗?

使用 INotify 监视具有多个符号链接的文件

如何将 rsyslog 消息配置到特定端口?