温馨提示×

ubuntu filebeat怎么写自定义规则

小樊
41
2026-10-11 00:58:39
栏目: 智能运维

在 Ubuntu 上,Filebeat 本身不“写规则”做复杂判断,它的核心职责是采集日志 → 加工(可选) → 发送到目标(Elasticsearch / Logstash / Kafka 等)。
所谓“自定义规则”,通常分为 3 类场景,下面我一步步说清楚,并给你可直接用的配置示例。


一、Filebeat 常见“自定义规则”类型

类型 作用 配置位置
1. 采集规则 指定哪些日志文件、如何读取 filebeat.inputs
2. 过滤/加工规则 丢弃、修改、增加字段 processors
3. 条件路由规则 不同日志发不同地方 output + when

二、1️⃣ 自定义采集规则(input)

示例:只采集 nginx 错误日志

filebeat.inputs:
  - type: filestream
    enabled: true
    paths:
      - /var/log/nginx/error.log
    fields:
      log_type: nginx_error

✅ 可自定义:

  • 文件路径(支持通配符)
  • 标签 fields
  • 编码、多行日志(如 Java 堆栈)

多行日志示例(Java 异常)

multiline:
  type: pattern
  pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
  negate: true
  match: after

三、2️⃣ 自定义过滤 / 加工规则(processors)

✅ 丢弃不需要的日志

processors:
  - drop_event:
      when:
        contains:
          message: "health check"

✅ 给日志加自定义字段

processors:
  - add_fields:
      target: ''
      fields:
        env: production
        app: user-service

✅ 条件修改字段

processors:
  - if:
      contains:
        message: "ERROR"
    then:
      - add_fields:
          target: ''
          fields:
            level: error

✅ 使用正则提取字段(dissect / regex)

processors:
  - dissect:
      tokenizer: "%{ts} %{level} %{msg}"
      field: "message"
      target_prefix: "log"

结果:

{
  "log.ts": "...",
  "log.level": "ERROR",
  "log.msg": "..."
}

四、3️⃣ 自定义输出规则(条件发送)

✅ 不同日志发不同 Elasticsearch

output.elasticsearch:
  hosts: ["http://es1:9200"]
  indices:
    - index: "nginx-%{+yyyy.MM.dd}"
      when.contains:
        fields.log_type: nginx

output.elasticsearch:
  hosts: ["http://es2:9200"]
  indices:
    - index: "app-%{+yyyy.MM.dd}"
      when.contains:
        fields.log_type: app

⚠️ 注意:Filebeat 只能写多个 output 之一生效,复杂路由建议走 Logstash


五、推荐架构(真实生产)

Filebeat(采集 + 简单过滤)
        ↓
     Logstash(复杂规则 / 解析)
        ↓
   Elasticsearch

Logstash 示例规则:

filter {
  if [log_type] == "nginx" {
    grok { match => { "message" => "%{COMBINEDAPACHELOG}" } }
  }
}

六、配置文件位置(Ubuntu)

/etc/filebeat/filebeat.yml

检查配置:

filebeat test config
filebeat test output

七、你可以告诉我你的具体需求

我可以给你精准配置,例如:

  • ✅ 按日志级别发不同索引
  • ✅ 丢弃 DEBUG 日志
  • ✅ 解析 JSON 日志
  • ✅ 多服务日志隔离
  • ✅ Kubernetes / Docker 日志规则

你现在是 采集什么日志?想做什么规则?

0 踩