Splunk搜索中合并大小写不同的JSON路径以统一统计计数
解决Splunk中JSON大小写路径字段合并统计问题
你的问题核心是重复使用spath的output参数到同一字段时,要么因语法错误导致提取失败,要么因数组/空值覆盖问题无法正确合并两种路径的数据。以下是两种可靠的解决方法:
方法一:使用coalesce合并临时字段(推荐)
先将两个大小写路径的结果提取到不同临时字段,再用coalesce函数合并为一个字段(该函数会依次取第一个非空值),确保两种路径的数据都被纳入统计:
index="x" | spath MessageTemplate | search MessageTemplate="Input Message: {Body}" | spath input="Properties.Body" | spath input="Properties.Body" path="voormelden{}.colloData{}.voormeldBronCd.code" output=VoormeldBronCode_lower | spath input="Properties.Body" path="voormelden{}.ColloData{}.VoormeldBronCd.Code" output=VoormeldBronCode_upper | eval VoormeldBronCode = coalesce(VoormeldBronCode_lower, VoormeldBronCode_upper) | where isnotnull(VoormeldBronCode) // 过滤空值,避免无效统计 | stats count by VoormeldBronCode
方法二:批量提取后重命名合并
如果你的JSON结构中这类大小写差异字段较多,可以先一次性提取所有字段,再通过rename将大小写字段映射为同一名称,最后处理多值情况合并:
index="x" | spath MessageTemplate | search MessageTemplate="Input Message: {Body}" | spath input="Properties.Body" // 提取所有Body内的字段 | rename voormelden{}.colloData{}.voormeldBronCd.code as VoormeldBronCode_temp, voormelden{}.ColloData{}.VoormeldBronCd.Code as VoormeldBronCode_temp | eval VoormeldBronCode = mvjoin(mvfilter(isnotnull(VoormeldBronCode_temp)), ",") // 处理数组多值场景 | stats count by VoormeldBronCode
原搜索失效的原因
你提供的搜索中,第二次spath的output参数被换行拆分,属于Splunk语法错误——Splunk要求output关键字必须与spath命令在同一行,否则会被忽略,导致第二个路径的结果未写入VoormeldBronCode字段,自然无法合并统计。
内容的提问来源于stack exchange,提问作者Bram
相关产品推荐
相关产品推荐

