【Application Insights】Application Insights存储的Function App的日志存在"Operation Link" 为空的情况

问题描述

将 Azure Functions 升级到 .NET 8 和 Isolated Worker 模式后,发现 Application Insights 中的请求(Request)日志的 operation_Link 字段为空,显示如下内容:

"operation_links": [
  {
    "operation_Id": "00000000000000000000000000000000",
    "id": "0000000000000000"
  }
]
 
这导致在 Application Insights 的端到端事务视图中,多个请求无法正确关联,影响了分布式追踪的可视化效果。

问题解答

该问题的根本原因在于 Azure Functions 使用 Isolated Worker 模式时,Application Insights 的默认配置未能正确设置分布式追踪上下文,尤其是在处理 Service Bus 等触发器时。

为了解决这个问题,需要确保以下几点:

一:使用正确的 Application Insights SDK 包

确保项目中引用了 Microsoft.Azure.Functions.Worker.ApplicationInsights 包(例如版本 1.4.0)以及 Microsoft.ApplicationInsights.WorkerService

二:配置 Application Insights 服务

在 Program.cs 中,使用如下方式配置服务:

builder.Services.AddApplicationInsightsTelemetryWorkerService();
builder.Services.ConfigureFunctionsApplicationInsights();

三:移除默认的日志过滤规则

Application Insights SDK 默认只记录 Warning 及以上级别的日志。需要手动移除该规则以启用更详细的日志记录:

builder.Services.Configure<LoggerFilterOptions>(options =>
{
    var ruleToRemove = options.Rules.FirstOrDefault(rule =>
        rule.ProviderName == "Microsoft.Extensions.Logging.ApplicationInsights.ApplicationInsightsLoggerProvider");

 

    if (ruleToRemove != null)
    {
        options.Rules.Remove(ruleToRemove);
    }
});

 

四:确保使用最新版本的相关依赖包

包括 Microsoft.Azure.Functions.Worker.Extensions.ServiceBus 等,以获得更好的分布式追踪支持。

 

 

参考资料

Azure Functions & Application Insights requests "Operation Link" empty : https://stackoverflow.com/questions/79061459/azure-functions-application-insights-requests-operation-link-empty

posted @ 2025-05-27 20:01  路边两盏灯  阅读(21)  评论(0)    收藏  举报