如何使用C#从Azure Application Insights获取记录(无需额外Azure资源)
无需额外Azure资源的C#读取Application Insights记录方案
你提到的Azure.Monitor.Query NuGet包并非过时版本,它是微软官方维护的Azure Monitor查询SDK,属于当前Azure .NET SDK生态的一部分,一直在持续更新,完全可以放心使用。以下是无需创建额外Azure资源(如App Service)的实现步骤:
1. 安装必要的NuGet包
需要安装两个核心包:
Azure.Monitor.Query:用于执行Application Insights日志查询Azure.Identity:提供无密钥身份验证能力,支持多种本地/云端认证方式
通过NuGet命令行安装:
Install-Package Azure.Monitor.Query Install-Package Azure.Identity
2. 身份验证方式(无额外资源依赖)
本地开发场景
使用DefaultAzureCredential,它会自动从本地环境读取有效认证信息,比如:
- 你通过
az login登录的Azure CLI凭据 - Visual Studio中已登录的Azure账户
- Azure PowerShell的登录状态
这种方式不需要创建任何额外Azure资源,直接复用本地已有的认证状态即可。
生产环境场景
如果需要在非本地环境运行,推荐使用服务主体(Service Principal)——这是轻量级的Azure AD身份对象,不属于App Service范畴,仅需为其授予Application Insights的读取权限:
- 在Azure AD中创建服务主体(可通过Azure CLI或门户快速完成)
- 给该服务主体分配Application Insights资源的Reader角色
- 使用
ClientSecretCredential传入服务主体的客户端ID、租户ID和客户端密钥进行认证
3. 代码实现示例
以下是使用DefaultAzureCredential进行本地查询的完整代码:
using Azure.Monitor.Query; using Azure.Identity; using System; using System.Threading.Tasks; class Program { static async Task Main(string[] args) { // 替换为你的Application Insights资源ID string aiResourceId = "/subscriptions/{你的订阅ID}/resourceGroups/{资源组名称}/providers/microsoft.insights/components/{AI资源名称}"; // 初始化日志查询客户端 var logsClient = new LogsQueryClient(new DefaultAzureCredential()); // Kusto查询语句:获取最近24小时的前10条请求记录 string kustoQuery = @" requests | where timestamp >= ago(24h) | project id, name, duration, timestamp | take 10 "; // 执行查询 var queryResult = await logsClient.QueryAsync(aiResourceId, kustoQuery); // 遍历输出结果 foreach (var row in queryResult.Value) { Console.WriteLine($"请求ID: {row["id"]}, 名称: {row["name"]}, 耗时: {row["duration"]}ms, 时间: {row["timestamp"]}"); } } }
关键说明
- 资源ID获取:在Azure门户的Application Insights资源页面,进入「属性」选项卡即可找到完整的资源ID
- Kusto查询:可根据需求自定义查询语句,支持所有Application Insights日志表(如
requests、exceptions、traces等) - 权限要求:无论使用哪种认证方式,当前身份必须拥有Application Insights资源的读取权限(Reader角色即可)
内容的提问来源于stack exchange,提问作者Vivek Nuna
相关产品推荐
相关产品推荐

