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

如何通过Splunk SPL提取SQL日志中的搜索词并统计热门搜索?

这个需求挺常见的,我之前也处理过类似的日志提取场景。要从SQL语句里捕获search_term的值,核心是用Splunk的rex命令做正则提取,然后再用top统计就行,给你具体的解决方案:

基础版SPL查询

如果你的搜索词里没有转义的单引号(比如不会出现'don\'t'这种格式),用下面的查询就足够了:

index=my_app 
| rex "search_term = '(?<search_term>[^']+)'" 
| top search_term

各部分解释:

  • index=my_app:先定位到你的Web应用日志索引
  • rex "search_term = '(?<search_term>[^']+)'":这一步是关键,用正则表达式从事件文本里提取搜索词。(?<search_term>[^']+)是命名捕获组,[^']+会匹配单引号之间的所有非单引号字符,把结果存到search_term这个自定义字段里
  • top search_term:自动统计每个搜索词的出现次数,默认按频次降序显示前10个,如果想多看点结果,可以加limit参数,比如top limit=20 search_term

处理带转义单引号的情况

如果你的搜索词里可能包含转义的单引号(比如用户搜索了don't,日志里的SQL会写成search_term = 'don\'t'),上面的正则会提前截断,这时候需要调整正则来匹配转义的单引号:

index=my_app 
| rex "search_term = '(?<search_term>(?:[^']|\\\\')+)'" 
| top search_term

这里的(?:[^']|\\\\')+表示匹配「非单引号字符」或者「转义的单引号」,Splunk里反斜杠需要双重转义,所以写成\\\\'来匹配日志里的\'

小技巧

  • 可以先加| table _raw search_term来验证提取是否正确,确保每个事件的search_term字段都对应了你要的内容
  • 如果有些事件里没有这个SQL语句,可以加| where isnotnull(search_term)过滤掉无效事件,避免统计结果被干扰

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:42:18