如何在C# Azure函数中用Azure.Monitor.Query查询Application Insights CustomEvents?
解决Azure.Monitor.Query查询Application Insights CustomEvents的问题
可以通过Azure.Monitor.Query包查询CustomEvents,你遇到的错误是因为Log Analytics工作区中存储Application Insights自定义事件的表名与AI原生查询的表名不同。
问题原因
当Application Insights实例关联到Log Analytics工作区后,自定义事件数据会被写入AppEvents表(而非AI原生查询时的customEvents表)。直接用customEvents作为表名查询工作区,自然会找不到对应的表。
两种解决方案
方案1:直接查询Log Analytics工作区的AppEvents表
修改Kusto查询语句,将customEvents替换为AppEvents,还可添加筛选条件指定目标Application Insights实例:
// 初始化LogsQueryClient(Azure函数中建议用DefaultAzureCredential) var logsQueryClient = new LogsQueryClient(new DefaultAzureCredential()); // 构造查询:筛选特定AI实例的自定义事件,时间范围5小时 var query = @"AppEvents | where AppName == ""你的AI实例名称"" | where TimeGenerated > ago(5h) | take 3"; var response = await logsQueryClient.QueryWorkspaceAsync( "<你的工作区ID>", query, new QueryTimeRange(TimeSpan.FromHours(5)));
方案2:使用app()函数定向查询特定Application Insights实例
如果更习惯用AI原生的customEvents表名,可通过app()函数指定目标AI实例,查询会直接针对该实例的自定义事件数据,无需切换表名:
var logsQueryClient = new LogsQueryClient(new DefaultAzureCredential()); // 构造查询:用app()函数指定AI实例,使用原生customEvents表名 var query = @"app('你的AI实例ID或名称').customEvents | where timestamp > ago(5h) | take 3"; var response = await logsQueryClient.QueryWorkspaceAsync( "<你的工作区ID>", query, new QueryTimeRange(TimeSpan.FromHours(5)));
注意事项
- 确保Azure函数的身份(如托管标识)拥有
Log Analytics Reader或Application Insights Reader权限,能够访问目标工作区和AI实例。 - 如果使用
DefaultAzureCredential,需要在Azure函数的配置中启用托管标识,并为其分配对应的权限。
内容的提问来源于stack exchange,提问作者Mudmayee Chaturvedi
相关产品推荐
相关产品推荐

