Linux Filebeat日志压缩配置指南
Filebeat支持多种方式的日志压缩,主要涵盖输入阶段预压缩、输出阶段传输压缩及配合外部工具压缩三类场景,以下是具体配置方法:
在Filebeat读取日志文件时,可通过processors模块添加compress处理器,直接对日志内容进行压缩(如Gzip),适用于需要减少传输数据量的场景。
配置示例:
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/*.log
processors:
- compress:
codec: gzip # 压缩编解码器,支持gzip(默认)
说明:
/var/log/*.log下的日志文件内容进行Gzip压缩,再发送至输出目标(如Elasticsearch、Logstash)。通过在输出模块(如Elasticsearch、Logstash、Kafka)中启用compression选项,让Filebeat在发送数据前进行压缩,适用于大多数传输场景(无需修改输入配置)。
output.elasticsearch:
hosts: ["localhost:9200"]
compression: gzip # 启用Gzip压缩
# 可选:调整压缩级别(1-9,默认3),级别越高压缩率越高,但CPU消耗越大
compression_level: 6
output.logstash:
hosts: ["localhost:5044"]
compression: gzip # 启用Gzip压缩
# 可选:调整压缩级别
compression_level: 3
output.kafka:
hosts: ["localhost:9092"]
topic: "filebeat_logs"
compression: gzip # 启用Gzip压缩
# 可选:压缩级别(0-9,默认0,即不压缩)
compression_level: 6
说明:
若需压缩历史日志文件(而非实时传输的日志),可使用Linux自带的logrotate工具,配置定期轮转并压缩旧日志,避免Filebeat重复处理。
配置示例(/etc/logrotate.d/nginx):
/usr/local/nginx/logs/*.log {
daily
rotate 30
compress # 启用压缩(默认使用gzip)
delaycompress # 延迟压缩(如保留最近1天的未压缩日志)
missingok
notifempty
sharedscripts
postrotate
[ -f /usr/local/nginx/nginx.pid ] && kill -USR1 `cat /usr/local/nginx/nginx.pid`
endscript
}
说明:
compress选项会自动将轮转后的旧日志(如access.log.1)压缩为access.log.1.gz。exclude_files选项(如下),可避免Filebeat处理已压缩的日志:filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/*.log
exclude_files: ["*.gz"] # 排除.gz结尾的文件
这样能提升Filebeat处理效率,减少不必要的资源消耗。filebeat test config -e命令测试配置有效性,再重启Filebeat服务(sudo systemctl restart filebeat)。