使用 Azure Function v2 的自定义 Application Insight TelemetryInitializer

Rir*_*iri 6 .net c# azure azure-application-insights azure-functions

在 Azure 函数中,我们使用 .NET HttpClient 类、Azure Servicebus SDK 和 Azure Storage SDK 发出许多请求 - 所有内容都通过 Application Insight 日志记录中的构建完美记录,显示依赖关系等等!

然而,现在我们想添加一个实现来ITelemetryInitializerEventTelemetry上面提到的 SDK 编写的内容添加一些维度。

我们首先创建一个实现ITelemetryInitializer接口的类。

public class ReferrerTelemetryInitializer : ITelemetryInitializer
{
    public void Initialize(ITelemetry telemetry)
    {
        if (telemetry is EventTelemetry)
        {
            // Add some code
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我创建一个实现IWebJobsStartup接口的类来 DI 注入我的初始化程序。

[assembly: WebJobsStartup(typeof(Startup))]

namespace LoggingTest
{
    public class Startup : IWebJobsStartup
    {
        public void Configure(IWebJobsBuilder builder)
        {
            builder.Services.AddSingleton<ITelemetryInitializer, ReferrerTelemetryInitializer>();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

注意:我只让 Startup 类在 .NET Core 2.0(而不是 2.1)中触发 - 这似乎是一个开放的已知问题

但是,Initialize初始化类中的方法永远不会触发(在核心 2.0 中,在我看到 Startup 类注册了 DIReferrerTelemetryInitializer实现之后)?

我们缺少什么?

小智 1

你没有错过任何东西,它应该可以正常工作。有一个已知问题会破坏 WebJobStartup 的功能。

SDK 永远不会自动报告 EventTelemtery(它们报告请求、依赖项、异常、跟踪和指标)。你能检查一下在net core 2.0上是否用其他类型的遥测调用了initialize吗?