尾文件处理器- Apache Nifi

TailFile Processor- Apache Nifi

我正在使用 Tailfile 处理器从计划为每分钟 运行 的集群(3 个节点)中获取日志。日志文件名每小时更改一次 我对应该使用哪种 Tailing 模式感到困惑。如果我使用单个文件,它不会获取 1 小时后生成的新文件。如果我使用多文件,它会在文件名更改第 3 分钟后获取文件,这会增加文件的大小。我的文件的滚动文件名应该是什么,我应该使用哪种模式。 你能告诉我吗?谢谢

我的文件名: retrieve-11.log(在 11:00 处生成)- 这已被删除,但单文件模式仍会检查此文件 1 小时后检索-12.log(生成于 12:00)

我的处理器配置:

拖尾模式:多个文件

尾部文件:retrieve-${now():format("HH")}.log

滚动文件名模式:${filename}.*.log

基本目录:/ext/logs

初始起始位置:文件开头

州位置:本地

递归查找:false

查找频率:10 分钟

最大年龄:24 小时

听起来您并没有真正进行正常的日志文件滚动。例如,在您写入 logfile.log 的地方,然后在 1 天后,将 logfile.log 移动到 logfile.log.1,然后将新日志写入新的空 logfile.log .

相反,听起来您只是根据小时将日志写入不同的文件。我假设这意味着您每 24 小时覆盖一次每个文件?

那么这样的东西可能有用吗?

编辑:

假设您正在执行以下操作:

At 10:00, `retrieve-10.log` is created. Logs are written here.
At 11:00, `retrieve-11.log` is created. Logs are now written here.
At 11:10, `retrieve-10.log` is moved.

TailFile is only run every 10 minutes.

那么根据小时定位文件将不起作用。在 10:00,您的 tailFile 读取 retrieve-10.log。在 11:00 你的 tailFile 只有 读取 retrieve-11.log。所以最坏的情况是,您会错过 10:50 和 11:00 之间的 10 分钟日志。

鉴于另一个进程正在清理旧文件,因此无需担心旧文件的积压日志。所以好像没必要专门设置小时

tailing mode: multiple files
files to tail: /path/retrieve-*.log

有了这个,在 10:00,tailFile 尾部 retrieve-9.logretrieve-10.log。在 10:10 处,retrieve-9.log 被删除,它尾部 retrieve-10.log。在 11:00,它尾随 retrieve-10.logretrieve-11.log。在 11:10 处,retrieve-10.log 被删除,它尾随 retrieve-11.log。等等