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

如何使用Elastic Search在文档datetime字段值距当前2天时获取告警

基于Elasticsearch Percolator实现工单到期前2天告警方案

1. 提前创建Percolate索引

首先保证Percolate索引的字段映射和业务工单索引完全对齐,核心需包含两个必填字段:

  • status:关键词类型,存储工单状态,未结工单统一取值为open
  • expected_close_time:日期类型,存储工单的预期关闭时间

示例创建索引DSL:

PUT /ticket-alert-percolate
{
  "mappings": {
    "properties": {
      "query": { "type": "percolator" },
      "status": { "type": "keyword" },
      "expected_close_time": { "type": "date" }
    }
  }
}

2. 注册到期告警匹配规则

往Percolate索引中插入告警触发规则,规则需同时满足两个条件:

  • 工单状态为未结
  • 预期关闭时间落在「当前时间+2天」的1天窗口期内,避免重复告警

示例规则写入DSL:

PUT /ticket-alert-percolate/_doc/2-day-close-alert
{
  "query": {
    "bool": {
      "filter": [
        { "term": { "status": "open" } },
        {
          "range": {
            "expected_close_time": {
              "gte": "now+2d/d",
              "lte": "now+3d/d",
              "format": "strict_date_optional_time"
            }
          }
        }
      ]
    }
  }
}

注意:range查询的时间范围要和业务工单的expected_close_time时区保持一致,避免时区差导致的规则匹配偏差。


3. 全场景触发规则匹配

Percolate默认仅在文档更新时触发匹配,而到期时间随系统时间动态变化,需要两种场景覆盖所有未结工单:

  • 工单新增/更新时实时触发:每次工单写入或更新到业务索引后,直接调用Percolate查询匹配规则,如果匹配到2-day-close-alert规则就直接触发告警。
    示例Percolate查询语句:
    GET /ticket-alert-percolate/_search
    {
      "query": {
        "percolate": {
          "field": "query",
          "document": {
            "status": "open",
            "expected_close_time": "2024-10-10T12:00:00Z"
          }
        }
      }
    }
    
  • 定时批量扫描触发:每天固定时间(比如凌晨1点)调用Percolate批量匹配全量未结工单,匹配到规则的工单统一触发告警,覆盖长时间没有更新的静态未结工单。

4. 重复告警优化

给工单索引新增alert_2d_sent布尔类型字段,默认值为false,匹配到规则后先判断该字段状态,发完告警后更新为true,避免同一个工单重复触发通知。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 06:06:04