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

如何通过Azure Functions将EventHub中的Azure资源流式诊断日志推送至Log Analytics工作区

实现Azure Functions将EventHub日志推送至Log Analytics工作区

1. 创建Azure Functions项目(以C#为例,其他语言逻辑通用)

  • 选择Event Hub Trigger模板,绑定目标Event Hub,配置从Event Hub的Access Keys获取的连接字符串
  • 安装必要依赖包:
    • Microsoft.Azure.WebJobs.Extensions.EventHubs(Event Hub触发器核心依赖)
    • Azure.Monitor.Ingestion(官方Log Analytics日志摄入SDK)

2. 配置Log Analytics连接信息

  • 从Log Analytics工作区的代理管理页面,获取工作区ID和主键
  • 在Function的应用配置(Configuration)中添加两个环境变量:LOG_ANALYTICS_WORKSPACE_ID和LOG_ANALYTICS_WORKSPACE_KEY,避免硬编码敏感信息

3. 编写核心推送逻辑

在Trigger方法中接收EventHub消息,解析并推送到Log Analytics:

using Azure.Monitor.Ingestion;
using Azure.Core;
using System.Text.Json;
using System.Text;

public static async Task Run([EventHubTrigger("your-eventhub-name", Connection = "EventHubConnectionString")] EventData[] events, ILogger log)
{
    var workspaceId = Environment.GetEnvironmentVariable("LOG_ANALYTICS_WORKSPACE_ID");
    var workspaceKey = Environment.GetEnvironmentVariable("LOG_ANALYTICS_WORKSPACE_KEY");
    var credential = new AzureKeyCredential(workspaceKey);
    var client = new LogsIngestionClient(new Uri($"https://{workspaceId}.ods.opinsights.azure.com"), credential);

    foreach (var eventData in events)
    {
        try
        {
            string messageBody = Encoding.UTF8.GetString(eventData.Body.ToArray());
            var logEntry = JsonDocument.Parse(messageBody);
            
            // 需提前创建数据收集规则(DCR),替换ruleId和streamName为实际值
            await client.UploadAsync(
                ruleId: "dcr-xxxxxx",
                streamName: "Custom-DiagnosticLogs",
                new[] { logEntry.RootElement });

            log.LogInformation($"处理完成事件: {messageBody}");
        }
        catch (Exception e)
        {
            log.LogError(e, $"处理事件失败,序列号: {eventData.SystemProperties.SequenceNumber}");
        }
    }
}

注意:必须先在Log Analytics中创建数据收集规则(DCR),定义日志字段映射关系和目标表,代码中的ruleId和streamName要与DCR配置一致

4. 部署与验证

  • 将Function部署到Azure Functions服务(支持VS Code、Azure CLI、Portal等方式)
  • 通过Function的Monitor选项卡查看运行日志,确认无报错
  • 在Log Analytics工作区中查询目标表(如自定义表CustomDiagnosticLogs_CL),验证日志是否成功入库

关键注意事项

  • 根据日志流量选择合适的Function服务计划,避免消息堆积
  • 添加重试逻辑(如用Polly库),处理网络波动或Log Analytics限流场景
  • 若要推送到Log Analytics内置表(如AzureDiagnostics),需确保日志结构完全匹配内置表字段要求,否则会自动归类到_CL后缀的自定义表

内容的提问来源于stack exchange,提问作者dev333

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 16:24:28