Fluent Bit 的 tail 输入插件丢失日志行怎么办?

Fluent Bit tail 漏行需检查轮转、长行限制、偏移状态、缓冲和输出。支持 inotify 的 Linux 构建通常已默认开启,文件事件不保证端到端无丢失。本文说明原因和配置。

最佳实践
Fluent Bit 的 tail 输入插件丢失日志行怎么办?封面

排查应覆盖读取、轮转、缓冲和输出确认。支持 inotify 的 Linux 构建通常默认已开启 Inotify_Watcher On;inotify 通知文件变化,不逐行通知,也不保证端到端无丢失。

配置方法

[INPUT]
    Name          tail
    Path          /var/log/myapp/*.log
    Tag           myapp.*
    Inotify_Watcher On

[OUTPUT]
    Name          stdout
    Match         myapp.*

原理解释

机制 工作原理 缺点
轮询 定时扫描文件大小变化 写入快本身不等于跳行;文件在发现前轮转/删除等会导致遗漏
inotify 内核主动通知文件变化 响应较及时,仍可能队列溢出、轮转或下游丢失

开启 Inotify_Watcher 后,Fluent Bit 可用文件事件触发读取,但不代表每次写入都即时完成消费,也仍需文件发现和状态管理。

其他可能导致漏读的原因

  1. Buffer 大小:超过 Buffer_Max_Size 时默认可能停止监控该文件;显式 Skip_Long_Lines On 才是跳过长行并继续;
  2. 文件轮转:轮转瞬间可能有遗漏,核对 Rotate_Wait、源文件保留时间及轮转方式,不能只靠等待配置保证无丢失;
  3. DB 文件:DB 参数用于记录读取偏移,确保配置正确:
[INPUT]
    Name          tail
    Path          /var/log/myapp/*.log
    DB            /var/log/flb_myapp.db
    Inotify_Watcher On

常见问题(FAQ)

Q:Inotify_Watcher 有什么缺点吗?
A:inotify 的监控描述符数量有限(/proc/sys/fs/inotify/max_user_watches),监控大量文件时可能需要调大。

Q:Windows 上也能用 inotify 吗?
A:不能。inotify 是 Linux 特有机制。Windows 上 Fluent Bit 的 tail 插件使用轮询。

Q:开启后还是有日志丢失?
A:检查 Fluent Bit 的内存/文件缓冲配置(storage.type filesystem),内存缓冲在进程崩溃时会丢失数据;文件系统缓冲需配置持久路径、容量和同步策略;Tail DB 仅保存读取位置,不保证记录已被下游持久接收。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台