如何知道 Rsyslog 何时读取了文件中的所有行以及读取了文件的 100%

如何知道 Rsyslog 何时读取了文件中的所有行以及读取了文件的 100%

我必须提取日志文件、静态文件。假设我的文件中有 100 个事件(100 行)。Rsyslog 必须将这些日志转发到服务器。一旦 Rsyslog 读取了最后一行,我想关闭正在运行 Rsyslog 的容器。

有没有办法知道 RSyslog 何时读取了整个文件,从而知道是否可以关闭容器?

非常感谢

答案1

似乎没有任何内置方式来知道 r​​syslogd 是否已到达模块文件的文件末尾imfile

一种简单的方法是轮询 rsyslogd 进程的相应打开文件描述符以找到当前读取位置,并将其与文件大小进行比较。lsof您可以列出进程或文件的此信息,或者您可以只读取文件,/proc/P/fdinfo/N其中 P 是相应的 pid,N 是文件描述符。当然,这并不意味着读取的数据已发送,因此您需要等待一段时间。

或者,在 rsyslog 中,您可以配置omprog模块,使其获得发送到服务器的所有相同的行,然后让模块将它们传递给一个程序,该程序对这些行进行计数,并将其与它必须首先从静态日志文件中读取的行数进行比较。

或者,您可以在启动 rsyslogd 之前,在日志文件末尾附加一个特殊标记行,并在 rsyslog 配置中匹配该行,再次使用它omprog来运行一个发出关闭信号而不是继续发送的程序。

还有一个impstats模块可以提供读取或写入的总行数统计信息,但它似乎不适用于imfile。但是,您可能能够在所使用的输出模块上使用它。由于我没有用过它,我不确定它有什么帮助。

相关内容