如何用Azure Application Insights捕获ASP.NET MVC的用户搜索查询
零代码提取搜索词的Kusto查询方案
你不需要修改任何应用代码,直接用App Insights内置的parse_urlquery函数就能从请求URL中拆分出搜索参数,对应查询如下:
明细查询(查看所有用户提交的搜索词列表)
requests // 筛选所有包含搜索参数的请求,兼容你代码里两种传参方式 | where url has "search" or url has "searchen" // 解析URL查询字符串为结构化动态对象 | extend query_params = parse_urlquery(url) // 取第一个非空的搜索参数:页面跳转用search,AJAX请求用searchen | extend search_term = coalesce( query_params["query"]["search"], query_params["query"]["searchen"], "" ) // 过滤空搜索词 | where search_term != "" // 输出需要的字段 | project 记录时间 = timestamp, 用户ID = user_Id, 搜索内容 = search_term, 原始URL = url // 按时间倒序,最新搜索排在最前 | order by 记录时间 desc
- 自动处理URL编码的搜索内容(比如中文、空格等特殊字符)
- 如果你统一了搜索参数名(比如把AJAX的
searchen改成search),删掉查询里关于searchen的两行即可 - 原来的查询
where url contains "search"会误匹配路径里带search的页面,这个查询通过解析查询参数彻底避免了这个问题
聚合查询(统计每个搜索词的出现次数)
如果要做搜索词排行,用这个查询:
requests | where url has "search" or url has "searchen" | extend query_params = parse_urlquery(url) | extend search_term = coalesce( query_params["query"]["search"], query_params["query"]["searchen"], "" ) | where search_term != "" | summarize 搜索次数 = count() by 搜索内容 = search_term | order by 搜索次数 desc
把查询固定到Application Insights仪表盘
- 在Log查询窗口跑通上面的语句,确认输出符合预期
- 点击查询窗口顶部的固定到仪表盘按钮
- 选择要存放的仪表盘,磁贴类型选「表格」,就能直接在仪表盘看到所有搜索词的明细或者排行
可选的稳定化优化(无需复杂改动)
目前的方案依赖URL参数提取,如果后续你把搜索改成POST请求、或者修改参数名,查询会失效。如果想要更稳定的采集,可以在接收搜索参数的Controller Action里加2行自定义遥测代码:
' VB.NET MVC 写法 Dim telemetry As New Microsoft.ApplicationInsights.TelemetryClient() telemetry.TrackEvent("用户搜索", New Dictionary(Of String, String) From {{"搜索内容", 你的搜索变量名}})
加完之后直接查询customEvents表就能拿到结构化的搜索数据,不需要再解析URL。这个属于可选优化,零代码方案已经能满足你当前的需求。
内容的提问来源于stack exchange,提问作者PineCone
相关产品推荐
相关产品推荐

