Filebeat作为轻量级日志收集器,其自身日志管理及所监控日志的处理需结合系统工具与配置优化。以下从日志位置、自身日志管理、监控日志处理、归档策略、性能优化五大维度展开说明。
Filebeat自身运行日志默认存储路径取决于安装方式:
/var/log/filebeat/目录,文件名格式为filebeat-YYYY-MM-DD.log(如filebeat-2025-10-01.log)。/opt/filebeat/logs/,需根据安装时的自定义路径确认。查看方法:
tail -f /var/log/filebeat/filebeat.logless /var/log/filebeat/filebeat.logjournalctl -u filebeat -f(实时)或journalctl -u filebeat(历史)。Filebeat的自身日志行为可通过filebeat.yml中的logging模块调整:
logging:
level: info # 日志级别(debug/info/warning/error),生产环境建议用info
to_files: true # 是否将日志写入文件
files:
path: /var/log/filebeat # 日志存储目录
name: filebeat # 日志文件名前缀
keepfiles: 7 # 保留最近7天的日志文件
permissions: "640" # 文件权限(属主可读写,属组可读)
修改后需重启Filebeat使配置生效:sudo systemctl restart filebeat。
Filebeat不直接处理日志分割,需借助系统工具:
logrotate(推荐):创建/etc/logrotate.d/filebeat配置文件,内容如下:
/var/log/syslog { # 监控的目标日志文件(需替换为实际路径)
daily # 每天轮转
rotate 7 # 保留7份
compress # 压缩旧日志
delaycompress # 延迟压缩(避免压缩当天日志)
missingok # 文件不存在时不报错
notifempty # 文件为空时不轮转
create 640 root adm # 新日志文件权限与属主
sharedscripts # 所有日志轮转完成后执行脚本
postrotate
systemctl restart rsyslog # 重启日志服务(如rsyslog),确保新日志写入新文件
endscript
}
手动测试配置:sudo logrotate -f /etc/logrotate.d/filebeat。
rsyslog:通过配置rsyslog规则实现分割,再将分割后的日志交由Filebeat读取。
Filebeat将日志发送至Elasticsearch后,可通过**ILM(索引生命周期管理)**自动归档旧日志:
PUT _ilm/policy/log_policy {
"policy": {
"phases": {
"hot": { # 热阶段(活跃数据)
"actions": {
"rollover": { # 滚动索引(当索引大小达50GB或7天)
"max_size": "50gb",
"max_age": "7d"
}
}
},
"delete": { # 删除阶段
"min_age": "30d", # 数据保留30天
"actions": {
"delete": {}
}
}
}
}
}
PUT _template/filebeat_template {
"index_patterns": ["filebeat-*"], # 匹配Filebeat生成的索引
"policy": "log_policy" # 关联ILM策略
}
此配置会自动滚动旧索引并删除超过30天的数据。通过filebeat.yml中的参数控制旧日志的忽略与删除:
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/app/*.log
ignore_older: 48h # 忽略48小时前的日志(不读取)
clean_inactive: 72h # 72小时内无活动的日志文件将被删除(需大于ignore_older + scan_frequency)
close_removed: true # 文件被删除后关闭harvester(释放资源)
clean_removed: true # 从registry中清除已删除文件的状态
参数说明:
ignore_older:避免读取过时日志,减少资源消耗;clean_inactive:彻底清理长期不活动的日志文件;close_removed/clean_removed:保持registry文件简洁,避免无效状态累积。通过cron定期清理旧日志(补充方案):
/usr/local/bin/cleanup_filebeat_logs.sh:#!/bin/bash
find /var/log/filebeat/ -name "*.log" -mtime +30 -exec rm -f {} \; # 删除30天前的.log文件
find /var/log/syslog.* -mtime +7 -exec gzip {} \; # 压缩7天前的分割日志
0 2 * * * /usr/local/bin/cleanup_filebeat_logs.sh
通过max_bytes参数限制单条日志的最大大小(避免超大日志导致性能问题):
filebeat.inputs:
- type: log
paths:
- /var/log/large_app.log
max_bytes: 20480 # 单条日志最大20MB(超过则丢弃)
通过logrotate定期分割大日志文件(如按大小分割):
/var/log/big_app.log {
size 100M # 当文件大小达100MB时轮转
rotate 5 # 保留5份
compress # 压缩旧日志
missingok
notifempty
}
close_timeout:设置harvester关闭超时(如5分钟),避免长时间占用资源:filebeat.inputs:
- type: log
close_timeout: 5m # 5分钟后关闭harvester(即使文件未结束)
harvester_limit:控制并行harvester数量(默认无限制,根据CPU调整,如100):filebeat.inputs:
- type: log
harvester_limit: 100 # 最多100个并行harvester
通过Filebeat的stats API监控性能(如harvester数量、队列长度):
curl -XGET 'localhost:5066/stats?pretty'
重点关注:
filebeat.harvester.running:当前运行的harvester数量;filebeat.queue.memory.size:内存队列大小(避免队列溢出);output.elasticsearch.events.acked:成功发送至Elasticsearch的事件数(判断数据流转是否正常)。