Как исключить регистрацию исключений и ошибок из выборки в Application Insights в. NET Core 2.1? - PullRequest
0 голосов
/ 26 марта 2020

Я использую веб-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>

Для ясности, я смотрю на следующие места:

  • Azure Application Insights -> Search -> Trace | Настраиваемое событие | Исключение
  • Log Analytics с этим запросом:

     exceptions
     | order by timestamp desc
    

Это хотя бы правильный способ отключить выборку?

Большое спасибо заранее.

1 Ответ

0 голосов
/ 31 марта 2020

Я сейчас добавляю этот TelemetryInitializer:

public class ExceptionTelemetrySamplingFilter : ITelemetryInitializer
{
    public void Initialize(ITelemetry telemetry)
    {
        if (telemetry is ExceptionTelemetry)
        {
            ((ISupportSampling)telemetry).SamplingPercentage = 100;
        }
    }
}

И зарегистрировал его:

services.AddSingleton<ITelemetryInitializer, ExceptionTelemetrySamplingFilter>();

Это из официальной документации о выборке . И я удалил добавленные конфигурации при запуске.

Я буду держать вас в курсе улучшений.

...