Аналитика приложений, пропускающая события

#azure #azure-application-insights

#azure #azure-application-insights

Вопрос:

Я использую этот код для отправки событий в Application insights в консольном приложении

         TelemetryConfiguration.Active.InstrumentationKey = "XXXXXXXXX";

        TelemetryClient telemetryClient = new TelemetryClient(); 

        for (int i = 0; i < 100; i  )
        {

            telemetryClient.TrackEvent("Hello World!");

            telemetryClient.TrackException(new OutOfMemoryException());
        }

        telemetryClient.Flush();
        Task.Delay(60000).Wait();
  

Теперь проблема, с которой я сталкиваюсь, заключается в том, что, похоже, не регистрируются все мои события, иногда на панели инструментов Visual Studio указано 44, иногда 68 и никогда 100.

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

Есть ли какой-либо способ заставить Application Insights отправлять все в Azure и не пропускать события? Я думаю, что даю ему достаточно времени, чтобы отправить все перед выходом.

Комментарии:

1. Здравствуйте, не могли бы вы предоставить полный код (удалить что-то конфиденциальное)?

2. теперь есть полный код, понятия не имею, как эти 2 строки будут иметь какое-либо значение.

Ответ №1:

Без полного кода трудно сказать, какая конфигурация использовалась.Несколько вещей, на которые нужно обратить внимание:

  1. Вы включили выборку? Если вам действительно нужно точное количество событий, отключите выборку (https://learn.microsoft.com/en-us/azure/azure-monitor/app/sampling )
  2. Вы явно настроили канал? В противном случае по умолчанию будет использоваться InMemoryChannel, который не выполняет никаких попыток для временных проблем. Лучше всего использовать ServerTelemetryChannel, чтобы защитить потерю данных даже в случае проблем с сетью или временных проблем с бэкендом Application insights.
 var config = new TelemetryConfiguration(); // or active or create default...
var channel = new ServerTelemetryChannel();
channel.initialize(config)

// create client from the config.
TelemetryClient tc= new TelemetryClient(config);

  

Комментарии:

1. полный код есть, честно говоря, ничего не пропало, кроме инициализации, поэтому я не включил это в первую очередь.

2. понял — значит, вы не включаете выборку, так что это не проблема. Но вам нужно сделать канал сервера, поскольку вы заботитесь о надежности событий.