自适应采样在ApplicationInsights中不起作用

时间:2020-09-19 00:23:32

标签: c# asp.net-core .net-core azure-application-insights

我正在尝试在AppInsights中进行采样,但运气不佳。这是我的复制品:

首先,我设置一个TelemetryClient:

TelemetryConfiguration configuration = TelemetryConfiguration.CreateDefault();
configuration.InstrumentationKey = "f7968b3b-b5ac-4e00-a6d9-f4915e5c5d32";
telemetryClientTest = new TelemetryClient(configuration);
var builder = configuration.DefaultTelemetrySink.TelemetryProcessorChainBuilder;
builder.UseAdaptiveSampling(maxTelemetryItemsPerSecond: 1);
builder.Build();

接下来,我尝试记录一系列事件:

for(var i = 0; i < 500; i++)
{
    telemetryClientTest.TrackEvent("SampledThingHappened");

     if(i % 100 == 0)
         await Task.Delay(1000);
}

每100个,我会延迟一秒钟。我期望的是一些SampledThingHappened事件块,每个事件的itemCount大约为100左右。相反,我看到所有500个项目,每个项目的itemCount为1。

customEvents
| where name == "SampledThingHappened"
| where itemCount > 1

不返回任何项目。

DefaultTelemetrySink中的所有内容看起来都是正确的,我可以在其中看到具有所有正确设置的AdaptiveSamplingTelemetryProcessor:

enter image description here

1 个答案:

答案 0 :(得分:1)

因为,ASP.NET Core应用程序没有ApplicationInsights.config,所以所有配置都是通过代码完成的。 默认情况下,所有ASP.NET Core应用程序均启用自适应采样。您可以禁用或自定义采样行为。

自定义自适应采样设置:

using Microsoft.ApplicationInsights.Extensibility

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();

    // ...
}

有关ASP.NET应用程序App Insights采样设置,请访问Configuring adaptive sampling for ASP.NET applications

要验证实际采样率(无论应用于何处),请使用如下所示的Analytics query

union requests,dependencies,pageViews,browserTimings,exceptions,traces
| where timestamp > ago(1d)
| summarize RetainedPercentage = 100/avg(itemCount) by bin(timestamp, 1h), itemType

如果您发现任何类型的RetainedPercentage都小于100,则说明该遥测类型正在采样。