应用洞察 |如何在应用程序洞察中仅显示预期功能应用程序的日志?

Application Insights | How to show logs for only the intended function app in application insights?

我有几个函数应用程序(FunctionApp1 和 FunctionApp2)。 FunctionApp1 向 FunctionApp2 使用的服务总线队列发送消息。

执行流时,Application Insights 中的日志显示组合流的日志。当我在 Application Insights 的 Performance 选项卡中检查 FunctionApp1 的特定日志时,它也会显示 FunctionApp2 的日志,反之亦然。

我尝试在执行 FunctionApp1 时禁用 FunctionApp2 的日志记录,方法是在 host.json 文件中为 FunctionApp1 设置日志级别,如下所示:

{
    "logging": {
        "LogLevel": {
            "Function.FunctionApp2":"None",
            "default":"debug"
        }
    }
}

这将完全禁用 FunctionApp2 的日志。

我该如何设置,以便在请求 FunctionApp1 的日志时只显示它的日志,FunctionApp2 也一样?

更新

我尝试在 FunctionApp1 的 host.json 文件中将 EnableDependencyTracking 设置为 false,如下所示:

{
    "logging": {
        "LogLevel": {
            "default":"debug"
        },
        "applicationInsights": {
            "enableDependencyTracking": false
        },
        ....
    }
}

这个也没用。

TelemetryContext 有一个 属性 叫做 Parent operation Id。根据文档,它会跟踪遥测项目的直接父级。因此,我像这样使用自定义遥测更新了遥测的父级(以下代码在 FunctionApp2 中实现):

var dependency = new DependencyTelemetry();
// Appended UTC ticks to GUID to avoid conflicting Azure's generated GUIDs in case any future ParentId matches Azure's already generated GUID.
dependency.Context.Operation.ParentId = $"{Guid.NewGuid():N}{DateTimeOffset.UtcNow.Ticks}";
_telemetryClient.TrackDependency(dependency);

DependencyTelemetry 使用依赖注入注入到函数应用程序中,如下所示:

_telemetryClient = new TelemetryClient(telemetryConfiguration);

TelemetryConfiguration 已作为服务添加到 Startup.cs class:

services.Configure<TelemetryConfiguration>((x) =>
            {
                x.InstrumentationKey = Configuration["APPINSIGHTS_INSTRUMENTATIONKEY"];
                x.TelemetryInitializers.Add(new OperationCorrelationTelemetryInitializer());

            });

请参阅 ApplicationInsight 的问题 1152 以获取有关上述代码的更多详细信息。

回到更新遥测操作的父 ID,它确保 FunctionApp2 的遥测未链接到 FunctionApp1 的遥测。