如何通过 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
时获得的实例相同。
根据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
时获得的实例相同。