如何用PowerShell在Application Insights运行Query Pack查询并解决报错
在已连接Log Analytics的Application Insights中运行Default Query Pack查询的解决方法
问题原因
出现BadRequest错误,通常是因为直接复用Log Analytics Workspace的查询逻辑时,没有适配Application Insights的查询上下文,或是参数传递不符合要求导致的。
解决步骤
1. 确认资源连接状态
先确保你的Application Insights实例已正确关联目标Log Analytics Workspace,数据能正常同步到Workspace中。
2. 适配查询的AI上下文
Default Query Pack中的查询可能是针对Log Analytics通用表编写的,而Application Insights的数据在Workspace中以AppRequests、AppExceptions等专属表存储。需要确认原查询中的表名是否匹配AI的表结构,若不匹配需调整。
3. 调整PowerShell代码运行查询
有两种可靠的调用方式,可根据场景选择:
方式一:通过WorkspaceId限定AI范围查询
在原查询前添加app()函数指定Application Insights实例,再传入WorkspaceId执行:
# 获取Default Query Pack中的查询内容 $baseUrl = "https://management.azure.com" $RId = (Get-AzResource -ResourceGroupName LogAnalyticsDefaultResources -Name DefaultQueryPack).ResourceId $token = (Get-AzAccessToken -ResourceUrl $baseUrl).Token $response = Invoke-RestMethod -Uri "$baseUrl$RId/queries?api-version=2019-09-01" -Method Get -Headers @{Authorization = "Bearer $token"} # 替换为你的Application Insights实例ID和Workspace ID $aiAppId = "你的AI实例ID" $workspaceId = "你的LA工作区ID" # 给查询添加AI实例限定 $targetQuery = "app('$aiAppId') | " + ($response.value)[0].properties.body # 执行查询 Invoke-AzOperationalInsightsQuery -Query $targetQuery -WorkspaceId $workspaceId
方式二:直接指定AI资源ID查询
无需通过WorkspaceId,直接传入Application Insights的资源ID即可执行查询:
# 获取Default Query Pack中的查询内容 $baseUrl = "https://management.azure.com" $RId = (Get-AzResource -ResourceGroupName LogAnalyticsDefaultResources -Name DefaultQueryPack).ResourceId $token = (Get-AzAccessToken -ResourceUrl $baseUrl).Token $response = Invoke-RestMethod -Uri "$baseUrl$RId/queries?api-version=2019-09-01" -Method Get -Headers @{Authorization = "Bearer $token"} # 获取Application Insights的资源ID $aiResourceId = (Get-AzApplicationInsights -ResourceGroupName "AI资源组名称" -Name "AI实例名称").Id # 执行查询 Invoke-AzOperationalInsightsQuery -Query ($response.value)[0].properties.body -ResourceId $aiResourceId
4. 排查BadRequest的常见点
- 检查查询语法:确认原查询的表名、函数适配Application Insights的Kusto语法。
- 权限验证:确保当前PowerShell账号拥有AI实例和LA工作区的查询权限。
- 替换占位符:代码中所有
<>标记的位置,必须替换为实际的资源ID或名称。
内容的提问来源于stack exchange,提问作者Ayan Mullick
相关产品推荐
相关产品推荐

