You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 00:26:30