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。