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

ElasticStack:如何在Kibana数据表中拆分字符串并聚合?

当然可以实现!我来给你拆解两种方案:一种是针对你现有数据的处理方法,另一种是更推荐的日志格式规范,让后续聚合分析更顺畅~

方案一:处理现有非结构化数据(Logstash阶段)

假设你的原始数据存在message字段中,内容是k1:v1 10 k1:v2 8 k2:v3 5 k2:v4 1,我们可以通过Logstash的Filter插件把它拆分成结构化字段,方便后续在Kibana中聚合:

  1. 第一步:拆分字符串为数组
    先用mutate插件把整段文本按空格拆分成数组,方便后续分组处理:
filter {
  mutate {
    split => { "message" => " " }
    add_field => { "temp_array" => "%{message}" }
  }
}
  1. 第二步:分组拆分并生成独立事件
    用ruby插件遍历数组,每两个元素为一组(键值对+数值),拆分出分类(k1/k2)、项(v1/v2等)和计数,同时生成独立事件(这样每个条目单独一条数据,Kibana聚合更直观):
ruby {
  code => '
    arr = event.get("temp_array")
    # 按每2个元素为一组遍历
    arr.each_slice(2) do |kv_pair, count|
      # 拆分k:v为分类和项
      k, v = kv_pair.split(":", 2)
      # 创建新事件
      new_event = LogStash::Event.new(
        "category" => k,
        "item" => v,
        "count" => count.to_i
      )
      # 输出新事件
      event.spawn(new_event)
    end
    # 取消原事件,只保留拆分后的独立事件
    event.cancel
  '
}

处理完成后,每个原事件会拆分成4条独立数据,每条数据包含category(k1/k2)、item(v1/v2等)、count(数值)字段。导入Kibana后,你就可以直接按category分组,对count做求和、平均值等聚合操作了。

方案二:推荐的结构化日志格式

如果可以修改原始日志的格式,强烈建议使用结构化JSON,这会让数据处理更高效、维护更简单,避免复杂的字符串拆分逻辑。

推荐格式示例

可以用数组包裹每个键值-计数条目:

{"myvals": [
  {"category": "k1", "item": "v1", "count": 10},
  {"category": "k1", "item": "v2", "count": 8},
  {"category": "k2", "item": "v3", "count": 5},
  {"category": "k2", "item": "v4", "count": 1}
]}

或者更简洁的单行结构化日志(每条数据单独一行):

{"category": "k1", "item": "v1", "count": 10}
{"category": "k1", "item": "v2", "count": 8}
{"category": "k2", "item": "v3", "count": 5}
{"category": "k2", "item": "v4", "count": 1}

Logstash处理配置

对于这种结构化日志,只需要简单的json和split插件就能完成解析:

filter {
  # 解析JSON格式
  json {
    source => "message"
  }
  # 如果是数组格式,拆分每个元素为独立事件
  split {
    field => "myvals"
  }
  # 重命名字段并清理冗余
  mutate {
    rename => { "[myvals][category]" => "category" }
    rename => { "[myvals][item]" => "item" }
    rename => { "[myvals][count]" => "count" }
    remove_field => ["myvals"]
  }
}

处理后同样得到结构化的独立事件,在Kibana中做聚合分析会非常轻松——比如创建柱状图,用category作为X轴,count的总和作为Y轴,就能直观看到k1、k2的统计结果。

内容的提问来源于stack exchange,提问作者user3174311

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:26:02