问题描述
将 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
当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之徐生。 云中,恰是如此!