You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Elastic Search规则配置求助:排除特定IP的防火墙拒绝告警

排除特定IP的Elastic Search监控规则配置方法

你之前尝试用正则负向预查的思路是对的,但有几个细节需要调整,另外还有更高效的配置方式,我给你详细说明:

推荐方法:使用Bool查询的must_not(性能更优)

比起正则表达式,用bool查询的must_not来精确排除IP是更清晰、性能更好的选择,尤其适合精确匹配场景。假设你的监控规则是基于Elastic Alerting(比如Watcher),配置示例如下:

{
  "query": {
    "bool": {
      "must": [
        // 这里是你原本匹配firewall_rejects的条件
        { "match": { "event.action": "firewall_rejects" } }
      ],
      "must_not": [
        // 精确排除目标IP,注意用keyword字段确保精确匹配
        { "term": { "ip_address.keyword": "192.168.0.2" } }
      ]
    }
  }
}

关键点:

  • 确保使用ip_address.keyword而不是ip_address(如果你的字段有keyword子字段的话),因为term查询是精确匹配,而默认的text字段会分词,可能导致匹配异常。
  • 如果你的ip_address本身就是keyword类型(没有text子字段),直接用ip_address即可。

修正你的正则表达式配置

如果你坚持要用正则,需要修正两个问题:正则里的点号要转义,并且要确保匹配整个IP字符串,避免误排除类似192.168.0.20这样的IP。正确的配置如下:

{
  "filter": [
    {
      "regexp": {
        "ip_address.keyword": "^(?!192\\.168\\.0\\.2$).*$"
      }
    }
  ]
}

修正细节:

  • 正则中的.要转义成\\.(因为JSON里需要双重转义),否则.会匹配任意字符。
  • 结尾加上$,确保只有完全等于192.168.0.2的IP才会被排除,而不是开头匹配的IP。

额外思路:在Ingest Pipeline提前过滤

如果希望从源头就过滤掉这个IP的日志,可以在Ingest Pipeline中添加drop处理器,直接丢弃该IP的文档,这样后续监控规则就不会处理这些数据了:

{
  "processors": [
    {
      "drop": {
        "if": "ctx.ip_address == '192.168.0.2'"
      }
    }
  ]
}

内容的提问来源于stack exchange,提问作者Pellegrini

火山引擎 最新活动