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

如何在Elastalert频率规则的Slack告警中单独展示多查询的命中计数

实现Elastalert单独展示多类查询的命中计数

绝对可以搞定!这里有两个实用的方案,你可以根据自己的场景灵活选择:

方案一:利用聚合(Aggregation)统计(推荐,高效)

这个方法借助Elasticsearch的聚合功能直接统计每个API的404命中数,适合数据量较大的场景,性能更优。

步骤1:优化查询语句

把原来的query_string改成更精准的bool查询,同时过滤出目标API和404状态:

query:
  bool:
    filter:
      - term: { status: 404 }
      - terms: { url: ["api1", "api2", "api3"] }

步骤2:配置聚合规则

在你的Elastalert规则里添加聚合配置,指定按url字段分组统计:

# 聚合配置,统计每个url的命中数
aggregation:
  type: terms
  field: url
  size: 3  # 刚好覆盖你的3个API
aggregation_window:
  minutes: 5  # 这里要和frequency规则的timeframe保持一致,确保统计同时间窗口的数据

步骤3:在Alert Text中展示聚合结果

Elastalert支持Jinja2模板,你可以遍历聚合结果动态展示每个API的计数:

🚨 404 Error Alert 🚨
Timeframe: {timeframe}
API Error Counts:
{% for bucket in aggs %}
- *{{ bucket.key }}*: {{ bucket.doc_count }} hits
{% endfor %}

这种遍历方式会自动匹配每个url的实际计数,不用担心API顺序变动导致的统计错误。

方案二:通过Jinja2过滤器手动统计(简单快捷)

如果不想修改查询和聚合配置,直接利用Elastalert提供的hits变量(所有命中的文档),用Jinja2的过滤器统计每个API的数量:

在alert_text里直接写:

🚨 404 Error Alert 🚨
Timeframe: {timeframe}
API Error Counts:
- *api1*: {{ hits | selectattr('_source.url', 'equalto', 'api1') | list | length }} hits
- *api2*: {{ hits | selectattr('_source.url', 'equalto', 'api2') | list | length }} hits
- *api3*: {{ hits | selectattr('_source.url', 'equalto', 'api3') | list | length }} hits

这个方法的原理是遍历所有命中文档,筛选出对应url的条目后统计数量,实现起来非常简单,适合数据量不大的场景。

注意事项

  • 如果用方案一,确保你的Elasticsearch版本支持terms聚合(大部分版本都支持),且aggregation_window必须和frequency规则的timeframe完全一致,否则统计的时间范围会不匹配。
  • 两种方案都需要确保你的Elastalert规则启用了Jinja2模板支持(默认是开启的,如果没开可以在rule里加use_jinja: true)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 03:47:40