温馨提示×

Ubuntu上Filebeat如何设置报警规则

小樊
47
2026-01-05 12:42:16
栏目: 智能运维

在 Ubuntu 上,Filebeat 本身不提供内置告警,常见做法是将日志送入 Elasticsearch/KibanaLogstash,再基于这些组件配置规则与通知。下面给出 3 种常用方案与可直接套用的示例。

方案总览与选择

方案 组件依赖 适用场景 通知方式
Elasticsearch Watcher Elasticsearch(建议 7.x/8.x 基础版及以上)、Kibana(可选) 已在用 ES 做检索分析,需原生定时规则 Email、Webhook 等
ElastAlert ElastAlertElasticsearch 需要更灵活的匹配规则(频次、阈值、复合条件) Email钉钉、企业微信、Slack 等
Logstash 告警输出 Logstash 已在用 Logstash 做处理,想就近发信 Email(SMTP)

方案一 Elasticsearch Watcher 原生告警

  • 思路:Filebeat 将日志写入 filebeat-* 索引;在 Watcher 中定时查询匹配条件,触发 Email 等动作。
  • 步骤与示例:
    1. Filebeat 输出到 ES(示例):
      output.elasticsearch:
        hosts: ["localhost:9200"]
        index: "filebeat-%{+yyyy.MM.dd}"
      
    2. Kibana Dev Tools 创建规则(每分钟检查一次,命中 ERROR 即告警):
      PUT _watcher/watch/filebeat-error-alert
      {
        "trigger": { "schedule": { "interval": "1m" } },
        "input": {
          "search": {
            "request": {
              "indices": ["filebeat-*"],
              "body": {
                "query": { "match": { "message": "ERROR" } },
                "size": 0
              }
            }
          }
        },
        "condition": {
          "compare": { "ctx.payload.hits.total.value": { "gt": 0 } }
        },
        "actions": {
          "email_admin": {
            "email": {
              "to": "admin@example.com",
              "subject": "Filebeat Alert: ERROR detected",
              "body": "Found {{ctx.payload.hits.total.value}} ERROR logs in the last minute."
            }
          }
        }
      }
      
    3. 前提:确保 Watcher 可用并已配置邮件发送(如通过 SMTP 网关或云邮件服务)。
      说明:Watcher 适合“定时检索 + 阈值/比较”类告警,规则直观、维护成本低。

方案二 ElastAlert 第三方规则引擎

  • 思路:ElastAlert 持续查询 Elasticsearch,按自定义规则匹配并触发通知(支持 Email、钉钉、企业微信、Slack 等)。
  • 步骤与示例:
    1. 安装与最小配置(elastalert_config.yaml):
      rule_folder: /etc/elastalert/rules
      run_every:
        minutes: 1
      buffer_time:
        minutes: 15
      es_host: localhost
      es_port: 9200
      
    2. 创建规则(/etc/elastalert/rules/error_freq.yaml):
      name: Filebeat ERROR 1m
      type: frequency
      index: filebeat-*
      num_events: 1
      timeframe:
        minutes: 1
      filter:
      - query:
          query_string:
            query: "message:ERROR"
      alert:
      - email
      email:
      - "admin@example.com"
      
      如需钉钉,可改用 webhook 类型并配置钉钉机器人 access_token
    3. 启动:
      elastalert --config /etc/elastalert/elastalert_config.yaml
      
    说明:ElastAlert 规则类型丰富(如 frequency、spike、flatline),对复杂场景更友好。

方案三 Logstash 内嵌告警输出

  • 思路:Filebeat 将日志发到 Logstash,在 Logstash 的 output 阶段按条件触发 Email
  • 步骤与示例(/etc/logstash/conf.d/alert.conf):
    input {
      beats { port => 5044 }
    }
    filter {
      # 按需解析与丰富字段
    }
    output {
      if [message] =~ /ERROR/ {
        email {
          to      => "admin@example.com"
          subject => "Logstash Alert: ERROR found"
          body    => "Message: %{[message]}"
          via     => "smtp"
          smtp {
            host      => "smtp.example.com"
            port      => 587
            user      => "you@example.com"
            password  => "yourpass"
            authentication => "plain"
            enable_starttls_auto => true
          }
        }
      }
      elasticsearch {
        hosts => ["localhost:9200"]
        index => "filebeat-%{+YYYY.MM.dd}"
      }
    }
    
    说明:适合已在 Logstash 做处理的链路,就近利用 SMTP 发信。

关键注意事项

  • 索引与时间字段:Watcher/ElastAlert 查询建议使用 filebeat-* 索引;时间过滤优先用 @timestamp,避免仅用 message 做时间判断。
  • 邮件与账号安全:SMTP 建议使用专用账号与 应用专用密码/令牌,并开启 TLS;生产环境避免明文密码。
  • 版本匹配:若采用 Kibana 插件(如 Sentinl),务必保证插件版本与 Kibana 版本一致,避免兼容性问题。
  • 资源与噪声:合理设置查询窗口与阈值,必要时在 Filebeat/Logstash 先做 字段解析与去重,减少无效告警。

0