注册表是干什么的
Filebeat 用注册表记录每个被监控文件的读取偏移,是“重启后从哪里继续”的依据。采集器状态、文件轮转、inode 复用与清理策略都围绕这张表工作,理解它才能解释重启后重复采集、漏采或状态文件持续膨胀这类问题。
基本信息
| 默认位置 | data/registry,容器部署时要落在持久卷上 |
|---|---|
| 记录内容 | 文件路径、inode、读取偏移与最近更新时间 |
| 相关配置 | filebeat.registry.path、ignore_older、clean_removed |
| 生效方式 | 重启采集器后按注册表恢复各文件的读取位置 |
状态与清理配置
状态与清理配置
# 注册表位置(默认 data/registry)
filebeat.registry.path: /var/lib/filebeat/registry
# 长期不更新的文件停止监控
ignore_older: 168h
# 已删除文件的旧状态自动清理(默认 true)
clean_removed: true
# 容器部署:把注册表目录挂到持久卷
# docker run -v /data/filebeat:/usr/share/filebeat/data ...关键配置
| 配置 | 作用 | 注意点 |
|---|---|---|
| registry.path | 指定注册表存放目录 | 容器重建未挂卷会丢失状态 |
| ignore_older | 超过该时间未更新的文件不再采集 | 设置过小会让历史文件被跳过 |
| clean_removed | 清理已删除文件的状态记录 | 默认开启,长期不用要排查膨胀 |
| harvester_limit | 限制同时读取的文件数 | 文件数量大时防止句柄耗尽 |
典型使用场景
- 采集器重启后从上次偏移继续,避免日志重复或漏采
- 排查重启后重复采集:确认注册表是否被清空或路径发生改变
- 容器化部署时把状态目录挂到持久卷,保证升级不丢状态
- 文件数量巨大时清理无效状态,控制注册表文件体积
持久化目录不可放在临时空间:注册表丢失会导致全量重采或漏采,容器场景尤其要确认挂载路径在重建后仍然存在。
copytruncate 式轮转存在竞态窗口可能丢行,条件允许时优先用 rename 式轮转,让采集器跟随文件句柄继续读取。
排查要点
- 重启后日志重复,先确认注册表目录是否被清空或换到了新路径
- 出现漏采时对比文件实际大小与注册表记录的偏移,判断是否被跳过
- 状态文件持续变大说明存在大量历史或已删除文件的记录,检查清理配置