温馨提示×

centos filebeat如何过滤

小樊
45
2026-09-21 05:47:42
栏目: 智能运维

在 CentOS 上使用 Filebeat 过滤日志,常见做法是在 filebeat.yml 中通过 processors 或结合 Logstash / Elasticsearch Ingest Pipeline 来实现。下面按「使用场景」给你讲清楚。


一、Filebeat 自身过滤(最常用)

Filebeat 支持 processors,可以在采集阶段就过滤、修改字段。

1️⃣ 丢弃某些日志(drop_event)

示例:丢弃包含 DEBUG 的日志

filebeat.inputs:
- type: log
  paths:
    - /var/log/app/*.log
  processors:
    - drop_event:
        when:
          contains:
            message: "DEBUG"

✅ 适合:不要某些日志
❌ 不建议做复杂解析


2️⃣ 只保留某些日志(drop_event + not)

processors:
  - drop_event:
      when:
        not:
          contains:
            message: "ERROR"

只保留 ERROR 日志。


3️⃣ 按字段过滤(如日志级别)

如果日志是 JSON:

{"level":"info","msg":"hello"}
processors:
  - drop_event:
      when:
        equals:
          level: "debug"

4️⃣ 删除无用字段(drop_fields)

processors:
  - drop_fields:
      fields: ["agent.version", "ecs.version"]

5️⃣ 添加 / 修改字段

processors:
  - add_fields:
      target: ''
      fields:
        env: production

二、使用多行合并(常见日志过滤)

multiline.pattern: '^\['
multiline.negate: true
multiline.match: after

三、使用 modules(推荐方式)

CentOS 常见服务:

filebeat modules enable nginx
filebeat modules enable system

然后编辑:

/etc/filebeat/modules.d/nginx.yml

✅ 官方已内置过滤规则


四、复杂过滤(推荐 Logstash)

如果过滤逻辑复杂(正则、拆分、条件分支):

Filebeat → Logstash

output.logstash:
  hosts: ["localhost:5044"]

Logstash 示例:

filter {
  if [message] =~ "ERROR" {
    mutate { add_field => { "level" => "error" } }
  } else {
    drop {}
  }
}

五、Elasticsearch Ingest Pipeline(轻量过滤)

output.elasticsearch:
  hosts: ["http://localhost:9200"]
  pipeline: my_pipeline

六、配置文件位置(CentOS)

/etc/filebeat/filebeat.yml

重启:

systemctl restart filebeat

测试配置:

filebeat test config
filebeat test output

七、常见坑

❌ Filebeat 不能做复杂 SQL 类过滤
❌ 正则太复杂会影响性能
✅ 简单过滤用 processors
✅ 复杂用 Logstash


如果你愿意,可以告诉我:

  • 日志类型(nginx / java / 自定义)
  • 想「丢弃 / 保留 / 拆分 / 加字段」
  • 是否用了 ES / Logstash

我可以直接帮你写一份 可用的 filebeat.yml。

0 踩