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

如何在Splunk中正确统计数组字段restaurants的元素数量?

Splunk计算JSON数组字段元素数量的问题

问题描述

已将本地$SPLUNK_DATA目录下的JSON数据导入Splunk,数据内容如下:

{"level":"info","msg":"","restaurants":[{"name":"El Farolito","cuisine":"Mexican"}],"time":"2024-09-29T12:32:37-07:00"}
{"level":"info","msg":"","restaurants":[{"name":"Flour + Water","cuisine":"Italian"},{"name":"San Ho Won","cuisine":"Korean"}],"time":"2024-09-29T12:32:37-07:00"}

启动Splunk使用的Docker命令:

docker run -it -e SPLUNK_START_ARGS=--accept-license -e SPLUNK_PASSWORD=helloworld -p 8000:8000 -p 8089:8089 --volume $SPLUNK_DATA:/home/splunk splunk/splunk start

登录后通过Settings -> Data input -> File从/home/splunk目录导入文件,现在需要添加新字段n表示每条日志中restaurants数组的元素数量(第一条日志n=1,第二条n=2),尝试过以下查询但无效,字段n为空:

index=main | eval n=mvcount('restaurants{}')

解决方案

方法1:用spath解析数组后统计

Splunk默认不会自动将嵌套JSON数组转为多值字段,需要先通过spath提取数组元素,再用mvcount计算数量:

index=main 
| spath path=restaurants{} output=restaurants_list
| eval n=mvcount(restaurants_list)
| sort n

方法2:直接用spath获取数组长度

更简洁的方式是利用spath的count参数直接返回数组长度:

index=main 
| spath path=restaurants count=true output=n
| sort n

方法3:使用json命令(Splunk 8.1+适用)

如果是Splunk 8.1及以上版本,可直接用json命令提取数组后统计:

index=main 
| json restaurants as restaurants_array
| eval n=mvcount(restaurants_array)
| sort n

说明

最初的查询无效,是因为restaurants{}的写法需要Splunk已将数组解析为多值字段,但默认情况下嵌套JSON数组不会自动拆分,必须通过spath或json命令显式处理。执行上述任一查询后,字段n会正确显示每条日志的餐馆数量,再通过sort n即可按数量排序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 22:17:39