温馨提示×

Filebeat如何进行日志文件轮转

小樊
35
2025-11-30 02:50:41
栏目: 编程语言

Filebeat日志轮转实践

一 核心概念与适用场景

  • 需要区分两类日志:
    • Filebeat自身日志:Filebeat进程输出的运行日志,建议用系统的 logrotate 管理,或在 filebeat.yml 的 logging.files 中配置保留策略。
    • 被采集的业务日志:应用/系统产生的日志文件,由应用或系统按时间/大小轮转(如按天或按大小切割)。Filebeat通过 inode 与文件名 跟踪文件,配合 ignore_olderclose_inactiveclean_inactive 等参数优雅处理轮转与过期文件。

二 轮转Filebeat自身日志的两种方式

  • 方式A 使用 logrotate(推荐)

    • 典型配置 /etc/logrotate.d/filebeat(路径以实际安装为准,常见为 /var/log/filebeat/filebeat/var/log/filebeat/filebeat.log):
      /var/log/filebeat/*.log {
          daily
          missingok
          rotate 7
          compress
          notifempty
          create 0640 root root
          sharedscripts
          postrotate
              # 优先使用 kill -HUP,若PID文件不存在则忽略
              kill -HUP $(cat /var/run/filebeat/filebeat.pid 2>/dev/null) 2>/dev/null || true
          endscript
      }
      
    • 说明:
      • 使用 kill -HUP 通知 Filebeat 重新打开日志文件描述符,避免继续写入已轮转的旧文件。
      • 若使用 systemd 且以 -e 前台方式运行,可改为重启服务:systemctl restart filebeat(注意短暂中断)。
    • 测试与验证:
      • 手动触发:sudo logrotate -f /etc/logrotate.d/filebeat
      • 查看轮转结果:ls -l /var/log/filebeat/
      • 查看调度:cat /etc/cron.daily/logrotate(logrotate 通常由每日 cron 自动运行)。
  • 方式B 使用 Filebeat 内置日志保留(仅影响 filebeat 自身日志)

    • 在 filebeat.yml 中配置:
      logging:
        to_files: true
        files:
          path: /var/log/filebeat
          name: filebeat
          keepfiles: 7
        level: info
      
    • 修改后重启 Filebeat 生效:sudo systemctl restart filebeat。该方式不涉及信号或外部轮转工具,由 Filebeat 按数量保留旧日志。

三 采集端对业务日志轮转的推荐配置

  • 识别策略
    • 保持默认基于 inode 的跟踪,避免漏采或重复采集。
    • 合理设置:
      • ignore_older:忽略超过 N 天的历史文件(如 168h)。
      • close_inactive:文件在 N 时间内无新事件则关闭句柄(如 5m),便于轮转后释放资源。
      • clean_inactive:超过 N 时间未更新的被跟踪文件将被清理(如 24h),避免句柄泄漏。
  • 示例(filebeat.yml 片段)
    filebeat.inputs:
    - type: log
      enabled: true
      paths:
        - /var/log/*.log
      ignore_older: 168h
      close_inactive: 5m
      clean_inactive: 24h
    
    output.elasticsearch:
      hosts: ["localhost:9200"]
    
  • 提示
    • 若应用按大小切割(如 100MB),无需在 Filebeat 侧做特殊轮转配置,只要确保轮转后的新文件具备可被采集的 可读权限正确路径 即可。

四 常见问题与排查

  • 轮转后仍向旧文件写入
    • 原因:未通知 Filebeat 重新打开日志文件描述符。
    • 处理:在 logrotate 的 postrotate 中使用 kill -HUP 或按需重启服务;确认 PID 文件路径 与权限正确。
  • 误删或移动导致重复采集
    • 处理:避免移动/删除仍被 Filebeat 跟踪的文件;必要时先停止 Filebeat,完成轮转后再启动,或调整 ignore_older/clean_inactive 减少影响窗口。
  • 权限问题
    • 处理:确保 Filebeat 对日志目录与文件具备 读取权限,对写入目录具备 写入权限;logrotate 的 create 模式应与运行用户匹配(如 0640 root root0640 root adm)。
  • 验证与观测
    • 手动触发轮转:sudo logrotate -f /etc/logrotate.d/filebeat
    • 查看轮转与 Filebeat 自身日志:tail -f /var/log/filebeat/filebeatjournalctl -u filebeat -f
    • 检查 logrotate 调度:cat /etc/cron.daily/logrotate

0