温馨提示×

如何设置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.ymllogging 段开启并按需配置:
      • 关键参数:
        • 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 输入 并正确设置 pathsfile_identity,避免重复或漏读:
      • 示例:
        • filebeat.inputs:
          • type: filestream id: app-logs paths:
            • /var/log/myapp/*.log

            默认基于 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 权限与属主属组。

0