You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何设置Elasticsearch告警规则仅在指定时段生效?

实现Elasticsearch告警规则仅在指定时段触发的方法

你使用Elasticsearch的「Rules and connectors」功能时,遇到规则仅支持全天启用/禁用,但需要让告警仅在白天(如8:00-17:00)触发的需求,当前的脚本查询过滤@timestamp小时段后,夜间仍会触发告警,问题根源需要结合你的规则类型分析:

当前查询代码

{
   "query" : {
       "bool":{
           "must":[
               {"match":{"fields.Operation":"EndPaymentActivity"}},
               {"match":{"level":"Information"}}
           ],
           "filter": [
               {
                   "script": {
                       "script": {
                           "source": "doc['@timestamp'].value.hourOfDay >= params.startHour && doc['@timestamp'].value.hourOfDay <= params.endHour",
                           "params": {
                               "startHour": 7,
                               "endHour": 9
                           }
                       }
                   }
               }
           ]
       }
   }
}

问题分析

如果夜间仍触发告警,大概率你的规则是监控「缺失匹配文档」(比如预期白天有支付操作,未出现则告警)。此时仅靠查询过滤时段无效:因为规则全天运行,夜间查询返回0条匹配结果时,会触发缺失告警。

解决方案

方案1:调整查询逻辑,夜间返回占位结果(适配缺失告警场景)

修改查询,让夜间时段强制返回至少1条结果,避免规则判定为“缺失”:

{
  "query": {
    "bool": {
      "should": [
        // 白天的正常监控条件:匹配支付操作且在目标时段内
        {
          "bool": {
            "must": [
              {"match": {"fields.Operation": "EndPaymentActivity"}},
              {"match": {"level": "Information"}}
            ],
            "filter": [
              {
                "script": {
                  "script": {
                    // 注意:若需指定时区,替换为带时区转换的脚本(示例为东八区)
                    "source": "ZonedDateTime.ofInstant(doc['@timestamp'].value.toInstant(), ZoneId.of('Asia/Shanghai')).getHour() >= params.startHour && ZonedDateTime.ofInstant(doc['@timestamp'].value.toInstant(), ZoneId.of('Asia/Shanghai')).getHour() <= params.endHour",
                    "params": {
                      "startHour": 8,
                      "endHour": 17
                    }
                  }
                }
              }
            ]
          }
        },
        // 夜间时段:匹配任意文档,确保查询有结果,避免缺失告警
        {
          "bool": {
            "filter": [
              {
                "script": {
                  "script": {
                    "source": "ZonedDateTime.ofInstant(doc['@timestamp'].value.toInstant(), ZoneId.of('Asia/Shanghai')).getHour() < params.startHour || ZonedDateTime.ofInstant(doc['@timestamp'].value.toInstant(), ZoneId.of('Asia/Shanghai')).getHour() > params.endHour",
                    "params": {
                      "startHour": 8,
                      "endHour": 17
                    }
                  }
                }
              },
              {"match_all": {}}
            ]
          }
        }
      ],
      "minimum_should_match": 1
    }
  }
}

方案2:调整规则触发条件(适配存在匹配文档时告警的场景)

如果你的规则是监控「存在匹配文档时告警」(比如异常支付操作),只需确保规则的触发条件设置为**「匹配文档数 > 0」**,当前的时段过滤查询即可生效:夜间无符合时段的支付操作文档,规则不会触发。

方案3:利用Cron调度(若版本支持)

若你的Elasticsearch版本允许为规则设置Cron调度(而非仅全天运行),直接配置规则仅在目标时段执行,比如Cron表达式0 * 8-17 * * ?(每天8:00-17:00,每小时执行一次),从根源避免夜间触发。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 01:36:01