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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 11:12:36