Elastic Cloud 7.5.2中Kibana Transform实现terms聚合方法咨询
解决方案:用Transform API实现自定义聚合转换
首先明确:你遇到的问题是Elastic Cloud 7.5.2版本的Kibana Transform UI(Define Pivot)确实不支持直接将terms聚合结果映射为独立字段,但完全可以通过Transform API来实现你需要的转换逻辑,这是版本特性限制而非功能缺失。
下面是针对你的需求的具体实现步骤:
1. 编写Transform API请求
我们需要创建一个转换任务,按jobId分组,分别统计每个jobId下三种eventType的文档数量,最终生成包含jobId、task_started_count、task_completed_count、task_inprogress_count字段的新索引。
执行以下API请求(替换<原索引名>和<新索引名>为你的实际索引名称):
PUT _transform/job_task_agg_transform { "source": { "index": "<原索引名>" }, "dest": { "index": "<新索引名>" }, "pivot": { "group_by": { "jobId": { "terms": { "field": "jobId" } } }, "aggregations": { "task_started_count": { "value_count": { "field": "_id" }, "meta": { "description": "Count of task-started events" }, "filter": { "term": { "eventType": "task-started" } } }, "task_completed_count": { "value_count": { "field": "_id" }, "meta": { "description": "Count of task-completed events" }, "filter": { "term": { "eventType": "task-completed" } } }, "task_inprogress_count": { "value_count": { "field": "_id" }, "meta": { "description": "Count of task-inprogress events" }, "filter": { "term": { "eventType": "task-inprogress" } } } } }, "sync": { "time": { "field": "@timestamp", "delay": "60s" } } }
关键说明:
group_by.jobId:按jobId进行分组,确保每个jobId对应一条聚合结果- 每个
xxx_count聚合:通过filter限定对应的eventType,用value_count统计该类型的文档数量(用_id字段是因为每个文档的_id唯一,统计结果就是该类型的文档数) sync配置:如果你的原索引是增量写入的,这个配置可以让转换任务自动同步新增数据(根据@timestamp字段,延迟60s避免处理未完全写入的文档)
2. 启动转换任务
创建完成后,执行以下命令启动转换:
POST _transform/job_task_agg_transform/_start
你可以通过以下命令查看任务状态:
GET _transform/job_task_agg_transform/_stats
3. 在Kibana中展示百分比与比率
转换完成后,在Kibana中为新索引创建数据视图,然后通过以下方式实现百分比/比率计算:
方式1:创建脚本字段
在数据视图的「脚本字段」中添加自定义字段,比如:
- completed_percentage:脚本内容为
doc['task_completed_count'].value / (doc['task_started_count'].value + doc['task_completed_count'].value + doc['task_inprogress_count'].value) * 100,格式设置为「百分比」 - started_to_completed_ratio:脚本内容为
doc['task_started_count'].value / doc['task_completed_count'].value
方式2:在可视化中使用计算指标
如果不想修改数据视图,可以在创建可视化(比如数据表格、横向柱状图)时,添加「计算指标」:
- 选择「自定义公式」,输入类似上述的比率/百分比公式,设置合适的格式(如百分比、小数)
这样就能在Kibana中直观展示每个jobId对应的任务状态分布百分比和比率了。
内容的提问来源于stack exchange,提问作者Ganesh M
相关产品推荐
相关产品推荐

