Filebeat日志压缩与归档实践
总体思路
- Filebeat 主要负责采集与转发日志,不提供完整的本地“归档”能力。常见做法是:
- 本地使用 logrotate 对 Filebeat 自身日志(如 /var/log/filebeat/)进行按日/按大小轮转并压缩,避免磁盘被占满。
- 远端将日志写入 Elasticsearch 后,用 ILM(索引生命周期管理) 做热温冷分层、滚动与删除,实现长期“归档”。
本地日志压缩与轮转
- 使用系统自带的 logrotate 管理 Filebeat 自身日志,推荐配置如下(路径与用户可按实际调整):
# /etc/logrotate.d/filebeat /var/log/filebeat/*.log { daily rotate 7 compress delaycompress missingok notifempty create 0640 root adm sharedscripts postrotate /usr/bin/filebeat -c /etc/filebeat/filebeat.yml reload >/dev/null 2>&1 endscript }
- 要点说明:
- compress 启用 gzip 压缩旧日志;delaycompress 常用于避免刚轮转出的文件立即被压缩,便于排查。
- postrotate 通过 filebeat 的 reload 让进程重新打开日志文件句柄,防止继续写入已轮转的旧文件。
- 测试与生效:
- 语法/模拟:sudo logrotate -d /etc/logrotate.d/filebeat
- 强制执行:sudo logrotate -f /etc/logrotate.d/filebeat
- 验证:ls -lh /var/log/filebeat/ 应能看到类似 filebeat.log.1.gz 的压缩文件。
传输层压缩
- 若希望降低网络带宽占用,可在输出阶段开启压缩(不影响本地文件是否压缩):
output.elasticsearch: hosts: ["localhost:9200"] compress: true
output.logstash: hosts: ["localhost:5044"] compress: true
- 说明:上述压缩作用于“发送过程”,常用于跨机房/公网传输场景,代价是一定的 CPU 开销。
远端归档与生命周期管理
- 将日志写入 Elasticsearch 时,使用 ILM 自动滚动与归档:
- 创建 ILM 策略(示例:滚动条件为 50GB 或 7 天,超过 30 天删除):
PUT _ilm/policy/filebeat-ilm { "policy": { "phases": { "hot": { "actions": { "rollover": { "max_size": "50gb", "max_age": "7d" } } }, "delete": { "min_age": "30d", "actions": { "delete": {} } } } } }
- 在索引模板或 Filebeat 的 Elasticsearch 输出中绑定该策略,实现按策略自动归档与清理。
常见问题与排查
- 避免重复轮转:不要同时对同一日志路径既用 logrotate 又启用 Filebeat 内置文件日志(logging.files);路径与用途需区分。
- 权限与路径:确保 Filebeat 对 /var/log/filebeat/ 及压缩目录具备写权限;必要时在 logrotate 中使用 create 0640 root adm 等权限模板。
- 通知 Filebeat 重新打开日志:使用 reload 而非粗暴 kill,减少丢日志风险;验证命令:sudo filebeat test config 与 sudo journalctl -u filebeat -f。