如何在Splunk中移除URL指定参数并对URL进行分组?
在Splunk中清理URL参数并分组的实现方案
针对你的URL /app/account-headless#state=FD=reqdoc&PN=952949&accessMode=Internet&accessType=MOBILE,要移除指定参数(如PN、accessType)后进行分组,可通过以下两种方式实现:
方法一:直接用正则替换清理参数
这种方式适合快速移除已知参数,步骤简洁:
提取URL锚点中的state参数内容
先从原始URL中分离出#state=后面的所有参数字符串:rex field=_raw "(?<url_prefix>[^#]+)\#state=(?<state_params>.*)"执行后会生成两个字段:
url_prefix:URL中#之前的部分(即/app/account-headless)state_params:state参数的完整值(即FD=reqdoc&PN=952949&accessMode=Internet&accessType=MOBILE)
移除指定参数
用正则替换掉PN和accessType相关的键值对,覆盖参数在开头、中间、结尾的所有情况:rex field=state_params "(^|&)PN=[^&]*" "" rex field=state_params "(^|&)accessType=[^&]*" ""额外处理可能残留的首尾
&符号:rex field=state_params "^&|&$" ""拼接清理后的完整URL并分组
将前缀和清理后的state参数重新拼接,再按清理后的URL分组统计:eval cleaned_url = url_prefix . "#state=" . state_params stats count by cleaned_url
方法二:拆分参数后过滤(更灵活)
如果需要动态过滤参数或处理更复杂的参数结构,可先拆分参数再过滤:
提取并拆分state参数
先提取前缀和state参数,再将参数拆分为多值字段:rex field=_raw "(?<url_prefix>[^#]+)\#state=(?<state_params>.*)" spath input=state_params delim="&" output=param_listparam_list会变成多值字段,每个元素是单个键值对(如FD=reqdoc、PN=952949)过滤不需要的参数
使用mvfilter匹配并排除指定参数:eval filtered_params = mvfilter(not match(param_list, "^PN=") AND not match(param_list, "^accessType="))拼接参数并生成清理后的URL
将过滤后的参数重新拼接为字符串,再生成完整URL并分组:eval cleaned_state = mvjoin(filtered_params, "&") rex field=cleaned_state "^&|&$" "" // 处理空参数或首尾& eval cleaned_url = url_prefix . "#state=" . cleaned_state stats count by cleaned_url
注意事项
- 如果原始日志中的URL字段不是
_raw,请将field=_raw替换为实际的URL字段名(如field=url) - 若需要移除更多参数,只需在正则或
mvfilter中添加对应的匹配规则即可
内容的提问来源于stack exchange,提问作者donet prof
相关产品推荐
相关产品推荐

