如何设置Filebeat日志轮转
小樊
45
2025-12-30 11:38:07
Filebeat日志轮转设置指南
一 概念与总体思路
- 需要区分两类日志:
- Filebeat自身日志:由 Filebeat 进程写入,通常位于 /var/log/filebeat/。
- 被采集的业务日志:由应用写入,Filebeat 负责读取。
- 两类日志的轮转方式不同:
- Filebeat 自身日志:优先使用 内置文件日志轮转(logging.files);若使用 systemd,也可由 journald 接管,再由 logrotate 切割 journal 日志。
- 被采集日志:由操作系统 logrotate 或应用自身按策略切割;Filebeat 侧通过 filestream 输入 正确识别轮转文件,避免重复或丢失。
二 轮转 Filebeat 自身日志
- 内置文件日志轮转(推荐)
- 在 filebeat.yml 的 logging 段开启并按需配置:
- 关键参数:
- logging.to_files: true
- logging.files.path: 日志目录,如 /var/log/filebeat
- logging.files.name: 日志文件名,如 filebeat
- logging.files.rotateeverybytes: 单个日志文件大小上限,如 10 MB(默认)
- logging.files.keepfiles: 保留历史文件数,如 7
- logging.files.permissions: 文件权限,如 0644
- 示例:
- logging.to_files: true
- logging.files:
- path: /var/log/filebeat
- name: filebeat
- rotateeverybytes: 10485760 # 10MB
- keepfiles: 7
- permissions: 0644
- 说明:当达到大小阈值时会自动滚动生成新文件,旧文件按序号保留与清理。
- 使用 systemd + logrotate(可选)
- 若以 systemd 运行且希望用 logrotate 切割 Filebeat 自身日志,可在 /etc/logrotate.d/filebeat 中配置(示例):
- /var/log/filebeat/*.log {
daily
missingok
rotate 7
compress
notifempty
create 0640 root root
}
- 说明:此方式依赖 systemd 的 StandardOutput/StandardError 指向文件;若使用内置 logging.files,通常无需再用 logrotate 切割 Filebeat 自身日志。
三 轮转被采集的业务日志
- 使用 logrotate 切割应用日志
- 在 /etc/logrotate.d/ 下为业务日志创建配置,例如:
- /var/log/myapp/*.log {
daily
rotate 7
compress
missingok
notifempty
create 0640 app app
sharedscripts
postrotate
# 若应用支持 USR1 重开日志(如 nginx),可在此发送信号
# kill -USR1 $(cat /var/run/myapp.pid 2>/dev/null) || true
endscript
}
- 要点:
- 切割策略(大小/时间/保留份数)应与业务吞吐匹配。
- 切割后确保应用能继续写入新文件(信号通知或重新打开文件描述符)。
- Filebeat 侧正确读取轮转文件
- 使用 filestream 输入 并正确设置 paths 与 file_identity,避免重复或漏读:
- 示例:
- filebeat.inputs:
- type: filestream
id: app-logs
paths:
默认基于 inode+device 识别文件;多数本地旋转场景无需额外配置
- 特殊场景:
- 网络共享/云盘等环境下 inode 可能变化,可改用 path 方式识别文件,并配合 inode_marker(需谨慎评估重复风险)。
- 避免采集已轮转归档的旧文件,可通过 exclude_files 排除匹配模式(如 .gz、.zip)。
四 验证与常见问题
- 验证 Filebeat 自身日志轮转
- 查看轮转是否生效:ls -lh /var/log/filebeat/;观察是否出现多个按序号或时间命名的文件。
- 检查 Filebeat 运行状态:systemctl status filebeat;查看 /var/log/filebeat/filebeat 是否持续写入。
- 验证业务日志轮转
- 手动触发一次轮转并观察:logrotate -f /etc/logrotate.d/myapp;随后确认新日志继续写入且 Filebeat 无重复或报错。
- 查看 Filebeat 自身日志(/var/log/filebeat/filebeat)是否有 文件打开/关闭、旋转相关提示。
- 常见问题与处理
- 重复采集:多数为 file_identity 识别异常或 未排除归档文件;核对 filestream 配置与 exclude_files。
- 丢失事件:切割期间应用未正确重开文件或缓冲区未刷新;确保应用支持信号重开,或在切割后短暂等待再清理旧文件。
- 权限问题:被采集日志或 Filebeat 日志目录权限不足会导致无法读取/写入;核对 create 权限与属主属组。