如何在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
相关产品推荐
相关产品推荐

