在 CentOS 上使用 Filebeat 过滤日志,通常有以下几种常见方式,按使用频率和场景给你说明:
Filebeat 支持 processors,可以在采集阶段就过滤、丢弃或修改日志。
例如:丢弃包含 "DEBUG" 的日志
filebeat.inputs:
- type: log
paths:
- /var/log/app/*.log
processors:
- drop_event.when.contains:
message: "DEBUG"
例如:只保留包含 "ERROR" 或 "WARN"
processors:
- drop_event.when.not.contains:
message: ["ERROR", "WARN"]
processors:
- drop_event.when.equals:
level: "info"
filebeat.inputs:
- type: log
paths:
- /var/log/app/*.log
exclude_files: ['\.gz$']
exclude_lines: ['^DEBUG']
include_lines: ['^ERROR', '^WARN']
✅ 实际示例:
filebeat.inputs:
- type: log
paths:
- /var/log/nginx/access.log
exclude_lines: ['200']
比如 Java 异常堆栈:
multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
multiline.negate: true
multiline.match: after
如果你有 Logstash,推荐在 Logstash 里做复杂过滤。
output.logstash:
hosts: ["localhost:5044"]
filter {
if [message] =~ "DEBUG" {
drop {}
}
}
filebeat.inputs:
- type: log
paths:
- /var/log/app/error.log
fields:
log_type: error
fields_under_root: true
在 Elasticsearch / Kibana 中可按 log_type 过滤。
# 校验配置
filebeat test config
# 查看运行状态
systemctl status filebeat
# 重启
systemctl restart filebeat
filebeat.inputs:
- type: log
paths:
- /var/log/nginx/*.log
exclude_lines: ['^#']
exclude_files: ['.gz$']
processors:
- drop_event.when.contains:
message: "GET /health"
如果你是 具体某类日志(Nginx / Java / Docker / 系统日志),可以告诉我,我可以给你一份可直接用的配置。