如何通过 IServiceCollection 配置自适应采样

How to configure Adaptive Sampling through IServiceCollection

根据docs,在“配置采样设置”下,我们可以配置自适应采样,还可以在采样中包含或排除某些类型:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, TelemetryConfiguration configuration)
{
    var builder = configuration.DefaultTelemetrySink.TelemetryProcessorChainBuilder;
    // For older versions of the Application Insights SDK, use the following line instead:
    // var builder = configuration.TelemetryProcessorChainBuilder;

    // Using adaptive sampling
    builder.UseAdaptiveSampling(maxTelemetryItemsPerSecond:5);

    // Alternately, the following configures adaptive sampling with 5 items per second, and also excludes DependencyTelemetry from being subject to sampling.
    // builder.UseAdaptiveSampling(maxTelemetryItemsPerSecond:5, excludedTypes: "Dependency");

    // If you have other telemetry processors:
    builder.Use((next) => new AnotherProcessor(next));
    
    builder.Build();

    // ...
}

但是,如果我们通过 WebHostBuilder.Configure() 配置我们的应用程序并传入一个接受 IApplicationBuilder 的委托,是否有办法做同样的事情?在这种情况下,我们将无法通过DI获得TelemetryConfiguration

我需要做与上面类似的事情,但我只有 IApplicationBuilder 接口。从文档来看,我似乎应该使用 TelemetryConfiguration.Active.DefaultTelemetrySink.TelemetryProcessorChainBuilder,但是 TelemetryConfiguration.Active 说它在 .NET Core 上已经过时,还说它从 ApplicationInsights.config 加载实例,我什至没有.我正在从代码创建一个完整的 AppInsights 客户端。

我想另一种方法是创建我自己的 TelemetryProcessor,它完全按照我想要的方式进行采样,但这似乎有点矫枉过正。基本上我想改变管道中当前 AdaptiveSamplingTelemetryProcessor 的配置。

IApplicationBuilder接口有一个ApplicationServices属性,你可以用它来解析TelemetryConfiguration。这是一个如何使用它的例子:

webHostBuilder.Configure(applicationBuilder =>
{
    var telemetryConfiguration = applicationBuilder.ApplicationServices
        .GetRequiredService<TelemetryConfiguration>();

    // ...
});

TelemetryConfiguration 实例注册为单例,与您在使用 Startup.Configure 时获得的实例相同。