在Azure共享仪表板中用KQL实现带筛选的Top25慢函数调用展示
解决Azure共享仪表板Top25最慢函数调用筛选问题
核心问题根源
- take 25顺序错误:原查询先取25条再筛选,导致筛选器只能从这25条里获取FileName/Name选项,无法看到全量值。
- 筛选未联动计算:原查询未基于筛选结果重新计算Top25,导致OperationId列表不更新。
解决方案步骤
1. 调整KQL查询逻辑(先筛选,再取Top25)
修改查询,确保先应用筛选参数,再排序取Top25。根据你的遥测存储位置选择对应查询:
基于customEvents的查询(适用于自定义持久化事件)
customEvents | where name == "FunctionPersistenceCompleted" // 替换为你的实际事件名称 | extend FileName = tostring(customDimensions.FileName) | extend Name = tostring(customDimensions.Name) | extend Duration = todouble(customMetrics.Duration) // 替换为你的实际耗时字段 // 绑定仪表板筛选参数,空值时不限制 | where FileName in ('{{FileName}}') or '{{FileName}}' == '' | where Name in ('{{Name}}') or '{{Name}}' == '' // 按耗时降序,取Top25 | sort by Duration desc | take 25 // 输出图表所需字段 | project OperationId = operation_Id, Duration, FileName, Name
基于requests的查询(适用于函数默认请求遥测)
requests | where cloud_RoleName == "你的函数应用名称" // 替换为实际应用名 | extend FileName = tostring(customDimensions.FileName) | extend Name = tostring(customDimensions.Name) | extend Duration = duration // 绑定筛选参数 | where FileName in ('{{FileName}}') or '{{FileName}}' == '' | where Name in ('{{Name}}') or '{{Name}}' == '' | sort by Duration desc | take 25 | project OperationId = operation_Id, Duration, FileName, Name
2. 配置共享仪表板的筛选器
在仪表板编辑模式下添加两个下拉筛选器,确保能获取全量的FileName/Name选项:
- FileName筛选器:
- 点击「添加筛选器」→ 选择「自定义」,类型设为「下拉列表」。
- 数据源选择你的Application Insights,输入以下KQL获取全量FileName:
customEvents // 若用requests则替换为requests表 | where name == "FunctionPersistenceCompleted" // 对应主查询的事件/应用条件 | extend FileName = tostring(customDimensions.FileName) | distinct FileName | sort by FileName asc - 保存筛选器,命名为「FileName」。
- Name筛选器:
重复上述步骤,把查询中的FileName替换为Name,命名为「Name」。
3. 绑定筛选器与图表查询
回到图表组件的编辑界面,将查询中的{{FileName}}和{{Name}}参数分别绑定到刚才创建的两个筛选器。这样每次选择筛选值时,主查询会先筛选全量数据,再计算Top25结果。
4. 调整图表展示设置
在图表的「可视化」选项中:
- 设置Y轴为
OperationId,X轴为Duration,图表类型选「柱状图」。 - 若需隐藏图例,找到「图例」设置,选择「隐藏」即可。
内容的提问来源于stack exchange,提问作者Tyler V
相关产品推荐
相关产品推荐

