Classic Application Insights退役后,如何不依赖过时技术向Log Analytics Workspace写入日志?
向Log Analytics Workspace写入日志(无弃用依赖方案)
方案概述
直接使用Azure官方维护的Azure.Monitor.Ingestion NuGet包,通过Azure AD身份验证完成日志上传,彻底避开instrumentation key、Classic AI等已退役/即将淘汰的技术,是长期可靠的解决方案。
前置准备
- 拥有一个Azure Log Analytics Workspace,记录其Workspace ID
- 创建Azure AD服务主体(或使用托管身份),并为其分配
Monitoring Metrics Publisher权限(或更精细的日志写入权限),记录服务主体的租户ID、客户端ID、客户端密钥 - 在Log Analytics中创建自定义表(例如
AppEvents_CL,自定义表需以_CL结尾)
C# 实现步骤
1. 安装必需的NuGet包
Install-Package Azure.Monitor.Ingestion Install-Package Azure.Identity
2. 完整代码示例
using Azure.Identity; using Azure.Monitor.Ingestion; using System.Text.Json; // 替换为你的实际配置 var workspaceId = "YOUR_WORKSPACE_ID"; var tenantId = "YOUR_TENANT_ID"; var clientId = "YOUR_SERVICE_PRINCIPAL_CLIENT_ID"; var clientSecret = "YOUR_SERVICE_PRINCIPAL_CLIENT_SECRET"; var targetTableName = "AppEvents_CL"; // 自定义表名 // 初始化日志 ingestion 客户端 var credential = new ClientSecretCredential(tenantId, clientId, clientSecret); var ingestionClient = new LogsIngestionClient( new Uri($"https://{workspaceId}.ods.opinsights.azure.com"), credential); // 构造日志条目(字段需与自定义表结构匹配) var logEntries = new List<object> { new { TimeGenerated = DateTime.UtcNow, // 必填字段,必须为UTC时间 EventType = "UserLogin", UserId = "john_doe_123", Status = "Success", IpAddress = "192.168.1.100" }, new { TimeGenerated = DateTime.UtcNow, EventType = "Error", Message = "Failed to connect to payment gateway", ErrorCode = "PAY001", Severity = "Critical" } }; // 序列化日志并上传 var serializedLogs = logEntries.Select(entry => JsonSerializer.SerializeToElement(entry)).ToList(); try { await ingestionClient.UploadAsync(targetTableName, serializedLogs); Console.WriteLine("日志已成功上传至Log Analytics"); } catch (Exception ex) { Console.WriteLine($"日志上传失败: {ex.Message}"); // 可根据需求添加错误重试、日志记录等逻辑 }
重要提示
- 自定义表的字段需与日志条目字段一一对应,否则数据可能无法被正确解析存储
- 生产环境优先使用托管身份(如Azure App Service的系统分配托管身份)替代服务主体,无需管理密钥,更安全
- 若使用.NET依赖注入,可将
LogsIngestionClient注册为单例,减少重复创建客户端的开销 TimeGenerated是必填字段,必须使用UTC时间,否则Log Analytics会拒绝数据
内容的提问来源于stack exchange,提问作者Daan
相关产品推荐
相关产品推荐

