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

如何在Elasticsearch与Kibana中设置汇率大幅波动告警

基于Elasticsearch和Kibana配置汇率波动超10%的告警

一、完善Elasticsearch查询(计算波动幅度)

你已经能获取每个sourceId的最近两次汇率数据,接下来通过脚本计算波动百分比,直接筛选出异常项。这里用top_hits聚合拿到最近两条数据,再通过scripted_metric聚合计算波动幅度:

{
  "size": 0,
  "aggs": {
    "group_by_source": {
      "terms": {
        "field": "sourceId.keyword"
      },
      "aggs": {
        "latest_two_rates": {
          "top_hits": {
            "size": 2,
            "sort": [{"modified": "desc"}]
          }
        },
        "rate_fluctuation": {
          "scripted_metric": {
            "init_script": "state.rates = []",
            "map_script": """
              def hits = params._agg.latest_two_rates.hits.hits;
              for (hit in hits) {
                state.rates.add(hit._source.rate);
              }
            """,
            "combine_script": """
              if (state.rates.size() < 2) {
                return null;
              }
              def latest_rate = state.rates[0];
              def previous_rate = state.rates[1];
              def fluctuation = Math.abs(latest_rate - previous_rate) / previous_rate * 100;
              return fluctuation > 10 ? [
                "sourceId": params._agg.group_by_source.key,
                "latest_rate": latest_rate,
                "previous_rate": previous_rate,
                "fluctuation_percent": Math.round(fluctuation * 100) / 100
              ] : null;
            """,
            "reduce_script": "return states.stream().filter(v -> v != null).collect(Collectors.toList())"
          }
        }
      }
    }
  }
}

这个查询会直接返回所有波动幅度超过10%的sourceId及其汇率数据。

二、Kibana告警配置步骤

1. 创建告警规则

  • 打开Kibana,进入Stack Management > Alerts and Insights > Rules,点击Create rule
  • 选择Index threshold类型的告警(适配基于索引数据的阈值判断场景)

2. 配置数据源与查询

  • 在Index pattern中选择你的汇率日志索引
  • Time field选择modified字段
  • 展开Custom query,将上述Elasticsearch查询粘贴进去(确保只返回波动超10%的结果)
  • 配置聚合规则:选择Aggregation为Unique count,Field为sourceId.keyword

3. 设置触发条件

  • 在When区域,设置时间窗口(比如Last 5 minutes,根据你的数据更新频率调整)
  • 设置Check every的检测频率(比如1 minute)
  • 阈值设置为is greater than 0,即当存在异常数据时触发告警

4. 添加通知动作

  • 在Actions部分,点击Add action,选择你需要的通知方式(Email、Slack、Webhook等)
  • 自定义通知内容,示例模板:
    汇率异常告警:
    SourceId: {{context.group_by_source.key}}
    上次汇率: {{context.previous_rate}}
    当前汇率: {{context.latest_rate}}
    波动幅度: {{context.fluctuation_percent}}%
    

三、可选优化:直接在查询阶段过滤异常

如果想简化聚合逻辑,也可以用script查询结合terms聚合,提前过滤出波动超10%的文档,但需要确保能关联到同一sourceId的上一条数据,上述聚合方式更直观可靠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 15:35:21