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

如何在Kibana中合并两个数据流的state字段实现聚合?

解决Kibana中两个Data Stream的State字段合并聚合问题

方法一:用Runtime Fields统一状态值(推荐,无需修改原始数据)

这种方式不用改动数据流的原始数据,直接在索引模式层面生成统一的状态字段:

  • 打开Kibana的Stack Management → Index Patterns,找到你包含两个Data Stream的目标索引模式。
  • 进入Fields页面,点击右上角的Add field,选择Runtime field。
  • 字段名设为unified_state,类型选Keyword(确保能用于聚合)。
  • 在脚本编辑器里粘贴以下Painless脚本,实现状态映射:
def raw_state = doc['state'].value;
if (raw_state == 'passed' || raw_state == 'Succeeded') {
  return 'Success';
} else if (raw_state == 'failed' || raw_state == 'Failed') {
  return 'Failure';
}
return raw_state; // 保留其他未知状态值
  • 保存字段后,在可视化组件里选择unified_state作为聚合字段,就能把passed/Succeeded、failed/Failed合并展示。

方法二:用Ingest Pipeline预处理数据(从源头统一)

如果希望所有数据的state字段值完全统一,后续不用再做转换,可以用Ingest Pipeline处理:

  • 进入Stack Management → Ingest Pipelines,新建一个管道。
  • 添加Script处理器,写入以下脚本,把其中一个数据流的状态值转换成和另一个一致的格式:
if (ctx.state == 'Succeeded') {
  ctx.state = 'passed';
} else if (ctx.state == 'Failed') {
  ctx.state = 'failed';
}
  • 把这个管道关联到对应的Data Stream(在Data Stream的设置页面指定Ingest Pipeline),之后新写入的数据会自动转换state值;旧数据可以通过Reindex API重新处理,让历史数据也统一状态。

为什么Lookup没生效?

Lookup组件的作用是关联外部索引的字段数据,不是用来做字段值的映射转换,所以用在这个场景里无法实现状态合并的需求,换用上面两种方法就能解决问题。

内容的提问来源于stack exchange,提问作者Math-fort

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 07:40:38