Splunk如何提取JSON结构中tags元素的键值对为独立可搜索字段
失效原因
你原有的SPL语句无法生效,是因为示例JSON中data.tags为对象数组结构,每个数组元素仅包含key和value两个固定属性,并非直接以标签名作为键的嵌套结构,因此指定data.tags.EmailAddress这类路径无法匹配到对应值。
可用SPL脚本
<替换为你的基础搜索语句> | spath path=data.tags{} output=tags | mvexpand tags | spath input=tags path=key output=tag_key | spath input=tags path=value output=tag_value | eval {tag_key}=tag_value | fields - tags, tag_key, tag_value | stats values(*) as * by timestamp, field1, field2
步骤说明
spath path=data.tags{} output=tags:提取JSON中tags数组的所有元素,存入多值字段tagsmvexpand tags:将多值的tags字段拆分为单行,每行对应一组标签键值对对象- 两次spath操作:分别从每个标签对象中提取键名存入
tag_key,提取值存入tag_value eval {tag_key}=tag_value:动态生成字段,以tag_key的内容作为新字段名,tag_value作为对应字段的取值fields - tags, tag_key, tag_value:删除处理过程中生成的临时字段,避免冗余stats values(*) as * by 公共字段:将拆分出的多行同一原始事件合并回单行,所有标签会自动成为独立列;by后参数可替换为你实际业务中不需要聚合的原始公共字段
若tags中存在重复的key,可将
values(*)替换为first(*)或last(*)调整聚合逻辑,符合你的业务需求即可。
内容的提问来源于stack exchange,提问作者Ashish Gupta
相关产品推荐
相关产品推荐

