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

.NET 7 Azure Function OpenTelemetry追踪无法导出至New Relic

.NET 7 Azure Function 追踪数据无法导出到New Relic的修复方案

核心问题定位

  • Http触发器中Activity.Current返回null,说明Azure Functions的自动追踪上下文未正确初始化,导致OpenTelemetry无法捕获Span数据,进而无法导出到New Relic。
  • 日志与指标可正常导出,说明OTLP导出通道、New Relic API密钥配置有效,问题聚焦在追踪上下文初始化环节。

修复步骤

1. 安装必要的OpenTelemetry NuGet包

默认OTLP包不处理Azure Functions的追踪上下文,需添加专用扩展:

dotnet add package OpenTelemetry.Extensions.Hosting
dotnet add package OpenTelemetry.Instrumentation.AzureFunctions

2. 调整Program.cs的OpenTelemetry配置

明确添加Azure Functions instrumentation,并配置正确的追踪源:

var builder = new HostBuilder();
builder.ConfigureFunctionsWorkerDefaults();

builder.ConfigureServices(services =>
{
    services.AddOpenTelemetry()
        .WithTracing(tracing =>
        {
            // 关键:启用Azure Functions追踪 instrumentation
            tracing.AddAzureFunctionsInstrumentation();
            // 配置OTLP导出到New Relic
            tracing.AddOtlpExporter(options =>
            {
                options.Endpoint = new Uri(Environment.GetEnvironmentVariable("Telemetry:Otlp:Endpoint"));
                options.Headers = Environment.GetEnvironmentVariable("Telemetry:Otlp:Headers");
            });
            // 包含Functions内置追踪源
            tracing.AddSource("Microsoft.Azure.Functions.Worker");
        });
});

var host = builder.Build();
host.Run();

3. 确认local.settings.json配置有效性

确保OTLP相关配置正确,示例如下:

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated",
    "Telemetry:Otlp:Endpoint": "https://otlp.nr-data.net:4317",
    "Telemetry:Otlp:Headers": "api-key=你的New Relic API密钥"
  }
}

4. 在触发器中验证追踪上下文

修改Function1.cs,确保能获取并记录追踪信息:

[Function("Function1")]
public HttpResponseData Run([HttpTrigger(AuthorizationLevel.Function, "get", "post")] HttpRequestData req)
{
    var activity = Activity.Current;
    _logger.LogInformation("当前追踪信息 - TraceId: {TraceId}, SpanId: {SpanId}", activity?.TraceId, activity?.SpanId);

    var response = req.CreateResponse(HttpStatusCode.OK);
    response.Headers.Add("Content-Type", "text/plain; charset=utf-8");
    response.WriteString("Welcome to Azure Functions!");
    return response;
}

验证流程

  1. 重启本地Function应用
  2. 调用http://localhost:7256/api/Function1
  3. 查看控制台日志,确认TraceId和SpanId能正常输出
  4. 登录New Relic后台,在分布式追踪面板中检查是否生成对应的Span数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 20:05:29