Amazon Kibana是否支持Datasweet Metric及百分比计算实现方案咨询
核心技术问题解答
一、Amazon托管Kibana对Datasweet Metric的支持能力
- AWS Elasticsearch Service/Amazon OpenSearch Service配套的托管Kibana,不支持安装任何第三方外部自定义插件,包括Datasweet Metric。
- 托管Kibana实例由AWS统一运维管控,未开放实例系统级权限、自定义插件安装的操作通道,无法通过官方支持的流程上传、加载Datasweet这类第三方插件。
- 若必须使用Datasweet Metric能力,可自行在EC2实例上部署独立的自托管Kibana,通过网络策略打通和AWS托管ES集群的访问链路,在自托管Kibana环境中自行安装所需插件,不依赖托管配套的Kibana实例。
二、托管Kibana环境无冗余列的百分比计算实现方案
Scripted Fields 使用常见误区
- 除法、if判断逻辑无法实现的本质原因是脚本类型选择错误:旧版Kibana的Scripted Fields默认可选
Lucene表达式作为脚本语言,该语言不支持条件判断、高精度除法逻辑;将脚本语言切换为Painless,即可完整支持除法运算、if条件分支逻辑。 - 集群生成冗余列的原因是将脚本字段保存为了持久化映射级字段,这类字段会被写入ES集群的索引元数据,永久留存冗余条目;仅在查询上下文内临时运行计算脚本,不会产生持久化冗余列。
可落地的零冗余列计算方案
- 查询级临时运行时字段(Runtime Field)
不将脚本字段保存到数据视图的持久化配置里,仅在当前查询、可视化面板的计算上下文内临时定义脚本。比如计算接口成功率的Painless示例:
这类临时字段不会写入集群索引元数据,不会生成冗余列,查询结束即自动释放计算资源。// 处理空值、除零异常 if (doc['total_req'].size() == 0 || doc['total_req'].value == 0) { return 0.0; } double success_cnt = doc['success_req'].size() == 0 ? 0.0 : doc['success_req'].value; // 返回百分比值 return (success_cnt / doc['total_req'].value) * 100; - 聚合层桶计算(Bucket Script Aggregation)
完全不需要创建任何字段,直接在可视化配置的聚合流程中,基于已经配置的两个基础指标聚合结果做二次计算:- 先分别对分子、分母对应的字段配置sum/count类的基础指标聚合
- 新增Bucket Script类型的管道聚合,直接引用两个基础聚合的结果值,通过除法、乘法计算百分比
该方案完全不操作索引的字段定义、元数据存储,无冗余列、计算性能更优。
- Discover页面临时字段计算
在数据探索页面需要临时计算单行百分比时,使用页面内置的临时字段编辑功能编写Painless计算逻辑,不保存到数据视图的持久化配置中,同样不会在集群元数据中生成冗余列。
内容的提问来源于stack exchange,提问作者pramodk
相关产品推荐
相关产品推荐

