Аналитика приложений неправильно интерпретирует данные выборки

Я пытаюсь понять данные выборки. И нигде не могу найти точную формулировку. Иногда у меня просто нет всех журналов моего приложения в трассировках. Я решил регистрировать события только по мере необходимости, это нормально. Я не получаю никаких неожиданных данных в журнале.

Вот моя конфигурация:

services.AddLogging();

services.Configure<TelemetryConfiguration>(telemetryConfiguration =>
{
    var telemetryProcessorChainBuilder = telemetryConfiguration.DefaultTelemetrySink.TelemetryProcessorChainBuilder;

    telemetryProcessorChainBuilder.UseAdaptiveSampling(maxTelemetryItemsPerSecond: 5, excludedTypes: "Request;Exception");

    telemetryProcessorChainBuilder.Build();
});
services.AddApplicationInsightsTelemetry(new ApplicationInsightsServiceOptions
{
    EnableAdaptiveSampling = false,     
});

В Azure для выборки установлено значение 100%.

А вот и следы журнала. Иногда я правильно регистрируюсь дважды, а иногда только один раз. Что тоже странно, но может иметь смысл, что иногда он просто регистрируется «медленнее».

А тут еще лог отслеживается в данную секунду.

Мой первый вопрос. Выборка - это настройка одинаковых сообщений? Или вообще для всех сообщений? Т.е. если я получу 5 сообщений с одинаковой формулировкой, я больше не отброшу, или если я получу 5 разных сообщений в секунду, я больше не отброшу? В зависимости от моей конфигурации.

Второй, более важный вопрос, исчезают ли мои следы из-за настройки выборки? Или что-то еще? Как следует настроить выборку, если из приложения выходят только те журналы, о которых я знаю? Выключить полностью? Или установить большее количество элементов?

Я прочитал документацию Microsoft, которая мне многое прояснила, но, к сожалению, она не совсем ясна.

Я читал статьи и обсуждения, но мало что нашел.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
112
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ваши настройки означают:

  • Вы отключили адаптивную выборку по умолчанию, поскольку используете пользовательскую конфигурацию.
  • Адаптивная выборка здесь ограничивает количество элементов телеметрии максимум 5 в секунду, но исключает из этой выборки типы телеметрии запроса и исключения. Это означает, что все телеметрические данные запросов и исключений будут отправляться всегда, независимо от объема.
  • Итак, ответьте на свой первый вопрос: выборка предназначена для всех сообщений определенного типа (здесь для всех типов, кроме запросов и исключений).
  • Ответ на ваш второй вопрос: если вы отправили больше элементов, чем 5 в секунду, эти элементы не будут сохранены и даже отправлены.
  • Вы можете использовать TelemetryProcessors вместе с адаптивной выборкой, чтобы отфильтровать все остальные журналы, которые вам не нужны.

Пример процессора телеметрии может выглядеть следующим образом (.NET 8.0):

public class LogOnlyTelemetryProcessor(ITelemetryProcessor next) : ITelemetryProcessor
{
    public void Process(ITelemetry item)
    {
        // Only allow logs to be sent
        if (item is TraceTelemetry)
        {
            this.Next.Process(item);
        }

        // Filter out other telemetry types
    }
}

// in your program.cs or startup cs.:
services.Configure<TelemetryConfiguration>((config) =>
{
    // Add the custom telemetry processor to the processor chain
    var builder = config.DefaultTelemetrySink.TelemetryProcessorChainBuilder;
    builder.Use((next) => new LogOnlyTelemetryProcessor(next));
    builder.Build();
});

Другие вопросы по теме