温馨提示×

CentOS中Filebeat的日志存储策略有哪些

小樊
37
2026-01-10 06:29:59
栏目: 云计算

Filebeat 在 CentOS 的日志存储策略

一 自身日志轮转与保留

  • 通过 filebeat.yml 的 logging 段控制 Filebeat 自身日志的写入、轮转与保留,常用参数如下:
    • logging.to_files: true:将日志写入文件(默认路径 /var/log/filebeat)。
    • logging.files.path / logging.files.name:日志目录与文件名(如 filebeat)。
    • logging.files.rotateeverybytes:单个日志文件大小上限,默认 10 MB
    • logging.files.keepfiles:保留的历史轮转文件数,默认 7(取值范围 2–1024)。
    • logging.files.permissions:日志文件权限,默认 0600
    • logging.json:设为 true 以 JSON 格式写入日志。
    • 示例片段:
      logging:
        level: info
        to_files: true
        files:
          path: /var/log/filebeat
          name: filebeat
          rotateeverybytes: 10485760   # 10 MB
          keepfiles: 7
          permissions: 0644
      
    以上配置可实现按大小滚动与按数量保留,避免 Filebeat 自身日志无限增长。

二 采集端对应用日志的留存与清理

  • 通过输入配置控制哪些日志进入处理、哪些被忽略,从源头减少本地与传输压力:
    • ignore_older:忽略超过指定时间未修改的旧文件(如 240h)。注意:该设置对“已打开”的文件不生效,通常需配合关闭策略使用。
    • close_inactive:文件在指定时间内无新内容则关闭句柄(如 5m),释放文件描述符。
    • close_renamed / close_removed:文件被重命名或删除时关闭句柄,避免句柄泄漏与“已删文件空间不释放”的问题。
    • clean_inactive:清理 registry 中长时间不活跃的文件状态,建议取值大于 ignore_older + scan_frequency,以减少状态膨胀。
    • 示例片段:
      filebeat.inputs:
      - type: filestream
        paths:
          - /var/log/nginx/*.log
        ignore_older: 240h
        close_inactive: 5m
        close_renamed: true
        close_removed: true
        clean_inactive: 744h   # 31 天,需 > ignore_older + scan_frequency
      
    这些策略可显著减少 Filebeat 对历史文件的占用与重复采集风险。

三 系统级 logrotate 对 Filebeat 自身日志的轮转

  • 使用 logrotate 管理 /var/log/filebeat/*.log,实现按天轮转、压缩与保留:
    • 典型配置(/etc/logrotate.d/filebeat):
      /var/log/filebeat/*.log {
          daily
          missingok
          rotate 7
          compress
          notifempty
          create 0640 root root
          postrotate
              # 通知 Filebeat 重新打开日志文件
              kill -USR1 $(cat /var/run/filebeat/filebeat.pid 2>/dev/null) 2>/dev/null || true
          endscript
      }
      
    • 说明:
      • daily / rotate 7 / compress:按天轮转并保留 7 份压缩归档。
      • postrotate + kill -USR1:让 Filebeat 重新打开日志文件,确保写入新文件。
      • 测试与生效:logrotate -f /etc/logrotate.d/filebeat;Filebeat 通常通过 PID 文件systemd 管理,发送 USR1 是常见做法。 该策略与 filebeat.yml 的 logging 轮转互补:前者管理“Filebeat 自身日志”,后者管理“被采集的日志”。

四 输出侧存储控制(Elasticsearch 索引生命周期)

  • 若输出到 Elasticsearch,建议配合 ILM(Index Lifecycle Management) 或定时任务按日期索引与删除,控制后端存储:
    • 按日期索引示例:index: "nginx_json_log_%{+yyyy-MM-dd}"
    • 定期删除过期索引(示例保留近 7 天):
      KEEP_DAYS=7
      for day in $(seq 1 $(($KEEP_DAYS+10))); do
        DATE=$(date -d "$((-day)) day ago" +%Y.%m.%d)
        curl -XDELETE "http://127.0.0.1:9200/filebeat-7.17.0-$DATE"
      done
      
    通过索引生命周期或脚本删除,可避免后端存储无限增长。

0