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

如何在Grafana中统计含列表的列内各值的出现次数?

问题描述

我有一个以Elasticsearch为数据源的Grafana面板,已经通过Extract Fields转换解析JSON日志,得到如下表格:

IDField1Field2
A[ "Value-1", "Value-2" ]示例1
B[ "Value-1" ]示例2
C[ "Value-2", "Value-3" ]示例3

我希望统计Field1列表中每个值的出现次数,期望得到如下结果:

Field1次数
"Value-1"2
"Value-2"2
"Value-3"1

我的初步思路是先把列表值拆分为单独行(拆分后表格如下),再通过Group By转换统计次数,但没找到对应的拆分转换方法,请问有没有实现该转换的方法或更优方案?

拆分后期望的中间表格:

IDField1Field2
A"Value-1"示例1
A"Value-2"示例1
B"Value-1"示例2
C"Value-2"示例3
C"Value-3"示例3

解决方案

方案1:Grafana内置转换实现拆分+统计

Grafana自带拆分数组字段的转换功能,步骤如下:

  1. 进入面板的Transform标签页,点击Add transformation,选择**Expand multi-value fields**(部分新版本Grafana中名为Unnest)。
  2. 在转换配置里,指定要拆分的字段为Field1,转换会自动将数组中的每个元素拆分为单独行,同时保留其他字段的对应值,生成你需要的中间表格。
  3. 继续添加Group By转换:
    • 选择Group by字段为Field1
    • 在Aggregations中选择Count,将结果列重命名为次数
  4. 调整表格展示列,仅保留Field1和次数即可得到目标结果。

方案2:Elasticsearch查询层面直接聚合(更高效)

如果数据量较大,在Elasticsearch层面做聚合比Grafana后处理更高效,直接修改查询语句:

  1. 打开面板的Query标签页,切换到Code模式(可视化查询可切换至JSON编辑器)。
  2. 在查询的aggregations部分添加terms聚合(注意如果Field1是数组类型,需用Field1.keyword确保聚合准确性):
{
  "aggs": {
    "field1_values": {
      "terms": {
        "field": "Field1.keyword",
        "size": 100 // 根据实际数据量调整返回数量
      }
    }
  },
  "size": 0 // 仅返回聚合结果,不返回原始数据
}
  1. 执行查询后,Grafana会直接返回Field1各值的计数,将表格展示的Key和Doc Count调整为Field1和次数即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 03:03:20