Splunk查询条件配置:根据user字段来源提取userid
Splunk查询:根据条件从不同位置提取userid
完整查询语句
<你的基础搜索语句> | spath path=user output=original_user | spath path=applicationTags output=applicationTags_list | rex field=applicationTags_list "userid=(?P<tag_userid>[^,\"]+)" | eval userid=if(original_user=="hive", tag_userid, original_user) | table userid original_user tag_userid # 可选,用于验证提取结果
步骤解释
- 解析JSON字段:
spath path=user output=original_user:将原事件中的user字段值保存到original_user,避免后续操作覆盖原始值。spath path=applicationTags output=applicationTags_list:把applicationTags数组提取为字符串格式的列表,方便后续正则匹配。
- 提取标签中的userid:
rex field=applicationTags_list "userid=(?P<tag_userid>[^,\"]+)":从applicationTags_list中匹配userid=后的内容,[^,\"]+确保只提取到标签内的用户ID(直到遇到数组元素的引号或分隔符为止)。
- 条件赋值最终userid:
eval userid=if(original_user=="hive", tag_userid, original_user):实现核心逻辑——当original_user为hive时,使用从标签提取的tag_userid;否则直接使用原始user字段的值。
注意事项
- 如果你的基础搜索已经包含JSON解析,可以省略重复的
spath命令,但保留output=original_user避免字段覆盖。 - 若
applicationTags中userid=的格式有变化(比如后面有空格),可以调整正则表达式,例如改为userid=\s*(?P<tag_userid>[^,\"]+)。
内容的提问来源于stack exchange,提问作者rajani
相关产品推荐
相关产品推荐

