Я использую веб-API со следующими характеристиками:
- ASP. NET Core 2.1
- Microsoft.ApplicationInsights.AspNetCore 2.13.1
- Размещено в Azure Служба приложений.
В Startup.cs ConfigureServices Я добавил:
services.AddApplicationInsightsTelemetry();
_loggerFactory.AddAzureWebAppDiagnostics();
У меня настроен пользовательский обработчик исключений в файле Startup.cs:
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseCustomExceptionHandler(telemetryClient, _loggerFactory);
}
Внутри этого CustomExceptionHandler я пытаюсь зарегистрировать исключение следующим образом:
var logger = loggerFactory.CreateLogger("Unhandled Exception");
logger.LogError(ex, errorId);
var telemetryProperties = new Dictionary<string, string>();
telemetryProperties.Add("errorId", errorId);
telemetryProperties.Add("traceIdentifier", context.TraceIdentifier);
telemetryClient.TrackException(ex, properties: telemetryProperties);
С этой конфигурацией не все журналы исключений или ошибок достигли журнала Аналитика ведер. Итак, я нашел эту конфигурацию для Application Insights:
var builder = aiTelemetryConfiguration.DefaultTelemetrySink.TelemetryProcessorChainBuilder;
builder.UseAdaptiveSampling(excludedTypes: "Trace;Exception");
builder.Build();
Здесь я исключаю трассировку и исключение из адаптивной выборки.
В настоящее время эта конфигурация находится в производстве. Он обрабатывает +/- 50 000 запросов в минуту. Но корзина исключений остается пустой.
Я заметил следующие сообщения между трассировками:
AI (внутренний): [Microsoft-ApplicationInsights-Core] [msg = ошибка журнала]; [msg = исключение при инициализации Microsoft. ApplicationInsights.AspNetCore.TelemetryInitializers.AspNetCoreEnvironmentTelemetryInitializer, сообщение об исключении - System.ArgumentException: ключ уже существует в словаре. в System.Collections.Concurrent.ConcurrentDictionary`2.System.Collections.Generi c .IDictionary.Add (ключ TKey, значение TValue) в Microsoft.ApplicationInsights.AspNetCore.TelemetryInitializers.AspNetCoreEnvironmentTelemetryintlite.ItizeInjectElizeTellingTellingTimeItizeInItizer). .TelemetryClient.Initialize (ITelemetry telemetry)]
и
AI: экстрактор Metri c обнаружил элемент телеметрии с SamplingPercentage <100. Должны использоваться экстракторы метрик перед процессорами выборки или любыми другими процессорами телеметрии, которые могут отфильтровывать элементы телеметрии. В противном случае извлеченные метрики могут быть неправильными. </p>
Для ясности, я смотрю на следующие места:
Это хотя бы правильный способ отключить выборку?
Большое спасибо заранее.