在 CentOS 上使用 Filebeat 过滤日志,常见做法是在 filebeat.yml 中通过 processors 或结合 Logstash / Elasticsearch Ingest Pipeline 来实现。下面按「使用场景」给你讲清楚。
Filebeat 支持 processors,可以在采集阶段就过滤、修改字段。
示例:丢弃包含 DEBUG 的日志
filebeat.inputs:
- type: log
paths:
- /var/log/app/*.log
processors:
- drop_event:
when:
contains:
message: "DEBUG"
✅ 适合:不要某些日志
❌ 不建议做复杂解析
processors:
- drop_event:
when:
not:
contains:
message: "ERROR"
只保留 ERROR 日志。
如果日志是 JSON:
{"level":"info","msg":"hello"}
processors:
- drop_event:
when:
equals:
level: "debug"
processors:
- drop_fields:
fields: ["agent.version", "ecs.version"]
processors:
- add_fields:
target: ''
fields:
env: production
multiline.pattern: '^\['
multiline.negate: true
multiline.match: after
CentOS 常见服务:
filebeat modules enable nginx
filebeat modules enable system
然后编辑:
/etc/filebeat/modules.d/nginx.yml
✅ 官方已内置过滤规则
如果过滤逻辑复杂(正则、拆分、条件分支):
output.logstash:
hosts: ["localhost:5044"]
Logstash 示例:
filter {
if [message] =~ "ERROR" {
mutate { add_field => { "level" => "error" } }
} else {
drop {}
}
}
output.elasticsearch:
hosts: ["http://localhost:9200"]
pipeline: my_pipeline
/etc/filebeat/filebeat.yml
重启:
systemctl restart filebeat
测试配置:
filebeat test config
filebeat test output
❌ Filebeat 不能做复杂 SQL 类过滤
❌ 正则太复杂会影响性能
✅ 简单过滤用 processors
✅ 复杂用 Logstash
如果你愿意,可以告诉我:
我可以直接帮你写一份 可用的 filebeat.yml。