一、为什么要做Filebeat日志过滤优化

很多团队用Filebeat收集服务器、容器里的日志,再推送到Elasticsearch、Kafka这类下游系统。但随着业务增长,日志量会爆炸,其中近三成甚至更多是无效内容:比如Nginx的健康检查请求日志、系统的心跳上报日志、重复的调试测试日志,这些内容对排查问题没帮助,反而会让下游系统存更多数据、处理更多请求,拖慢性能,还增加了存储成本。这时候优化过滤规则,就像给邮件开垃圾邮箱,能把没用的东西直接拦在半路上,少给下游添麻烦。

1.1 常见的无效日志类型

常见的无效日志有几类:第一类是健康检查类,比如容器给K8S的存活探针发的/health请求,每十秒一次,量级不小;第二类是系统心跳日志,比如中间件的定期状态上报;第三类是开发测试产生的临时日志,测完没删就留在线上;第四类是重复日志,同一个请求打了两次相同内容。

二、Filebeat过滤无效日志的核心逻辑

Filebeat自带了几个简单好用的过滤配置,不需要写复杂脚本,只要在配置文件里加几行规则,就能精准筛选。核心配置项有三个:exclude_lines(匹配到就丢弃)、include_lines(只保留匹配到的)、drop_event(满足条件直接丢整个事件),这三个组合起来足够处理大部分场景。

2.1 核心配置项的作用

  • exclude_lines:相当于黑名单,只要日志内容匹配列表里的规则,就直接不收集;
  • include_lines:相当于白名单,只有匹配的才留,其他都丢;
  • drop_event:比exclude_lines更灵活,可以结合条件,比如包含某个关键字、来自某个输入源,直接丢弃整个日志事件,适合需要组合判断的场景,比如既含[DEBUG],又来自特定路径的日志。

三、完整的优化配置示例(带注释)

这里给一个Nginx日志过滤的完整配置,技术栈明确为Filebeat,用稳定的7.17版本,覆盖常见无效日志过滤:

# 技术栈:Filebeat 7.17.0(开源日志收集工具,统一收集转发各类日志)
filebeat.inputs:
# 收集Nginx访问日志
- type: log
  enabled: true
  paths:
    - /var/log/nginx/access.log  # Nginx日志路径,根据实际服务器调整
  # 过滤1:排除健康检查日志(K8S探针请求)
  exclude_lines:
    - 'GET /health HTTP/1.1'  # 匹配GET方法的健康检查请求
    - 'HEAD /health'          # 匹配HEAD方法的健康检查请求
    - 'HTTP/1.1 200'          # 健康检查响应多为200,追加避免误杀
  # 过滤2:排除空行或仅含空白符的日志
  exclude_lines: ['^\s*$']
  # 过滤3:丢弃带DEBUG标记的调试日志(线上一般无需调试日志)
  drop_event:
    when:
      contains:
        message: "[DEBUG]"  # 日志含[DEBUG]的直接丢弃
# 输出配置,此处用Elasticsearch做下游,Kafka等其他下游逻辑一致
output.elasticsearch:
  hosts: ["es-node1:9200", "es-node2:9200"]  # Elasticsearch地址列表

3.1 配置的测试方法

改完配置后,先在测试环境用filebeat test config检查配置是否正确,再用filebeat test logs模拟收集日志,看过滤结果是否正常。比如找几行Nginx日志,运行后确认是否被过滤,没问题再上线,避免误删有用日志。

四、优化后的效果和注意事项

4.1 优化后的实际收益

我接触的一个客户用这个方法,过滤了约35%的Nginx无效日志,下游Elasticsearch的CPU使用率直接降了22%,磁盘写入量少了30%,每月存储成本省了近五千元(按云对象存储价格计算)。另外日志噪音减少后,排查线上问题时,不用翻一堆垃圾内容,效率提升了不少。

4.2 方法的优缺点

优点:不用改业务代码,只调整Filebeat配置,轻量灵活,适合快速落地;规则简单易懂,运维同学就能修改;效果直接,能快速看到负载下降。缺点:规则写得太松会漏过滤无效内容,写得太紧可能误杀有用日志;日志格式变化时,需及时更新规则,否则会失效。

4.3 必须注意的细节

第一,上线前一定要测试,之前有团队直接上线未测试,过滤掉了业务的/health接口日志,排查健康问题时找不到数据差点出故障;第二,规则要分批次加,先加最明显的无效日志(比如探针日志),过一周看效果后再加其他规则;第三,保留原始日志备份至少七天,万一过滤错了可回滚;第四,不要写太泛的规则,比如别用排除所有/health,最好加请求方法限定,避免误杀业务接口。

五、总结

Filebeat日志过滤优化是“四两拨千斤”的操作,不用搞复杂架构,只要调对现有配置里的几条规则,就能给下游系统减轻负载,还能省成本、提效率。核心是先明确业务里的无效日志类型,用自带配置项筛选,上线前务必测试,别踩误删的坑。这个优化适合所有用Filebeat的团队,不管大小都能快速看到效果。