Kibana Watcher嵌套聚合条件脚本执行报错求助
问题分析
你的错误根源在于**buckets是数组(列表)结构**,直接通过buckets.metricAgg访问嵌套聚合是非法的——数组本身没有metricAgg属性,必须遍历数组中的每个桶元素,才能访问对应桶内的聚合结果。
解决方案
根据你的实际需求,分两种场景处理:
场景1:仅判断桶的数量是否≥1
如果你的目标是确认是否存在至少一个符合条件的主机桶,直接修改条件脚本为:
"condition": { "script": { "source": "ctx.payload.aggregations.modules.buckets.size() >= 1", "lang": "painless" } }
场景2:判断是否存在至少一个桶的平均值满足特定条件
如果需要基于metricAgg的平均值做判断(比如检查是否有主机的平均值≥2),需要遍历buckets数组并逐个验证桶内的聚合值:
"condition": { "script": { "source": "ctx.payload.aggregations.modules.buckets.stream().anyMatch(bucket -> bucket.metricAgg.value >= 2)", "lang": "painless" } }
逻辑验证
结合你提供的聚合结果示例:
- 场景1的脚本会返回
true(桶数量为5,满足≥1的条件) - 场景2的脚本也会返回
true(server2、server3的平均值均≥2)
内容的提问来源于stack exchange,提问作者John Harris
相关产品推荐
相关产品推荐

