Как измеряется продолжительность запроса в телеметрии запроса Application Insights?

#.net #asp.net-core #azure-application-insights

#.net #asp.net-core #azure-application-insights

Вопрос:

В моем ASP.NET Основное приложение, телеметрия запроса автоматически регистрируется в Application Insights, что замечательно. Но было бы неплохо точно знать, как измеряется продолжительность. Предположительно, где-то есть «секундомер», но когда он запускается и когда останавливается? Что входит в продолжительность? Я хотел бы получить больше информации о том, как именно это делается.

Ответ №1:

В трассировке запроса есть две части asp.net ядро.

  1. asp.net само ядро имеет диагностическую трассировку, которая использует встроенную в систему .net Core.Диагностика трассировка. Проще говоря, он фиксирует действия / события на разных этапах конвейера HTTP-запросов, скажем, запрос-запуск, запрос-остановка и т.д. Итак, это первый шаг к тому, чтобы получить возможность фиксировать то, что нам нужно для отслеживания запросов.
  2. Теперь перейдем к Application Insights asp.net интеграция с ядром. Когда вы включаете Application Insights в своем asp.net основное приложение, оно инициализирует несколько встроенных модулей телеметрии. Одним из них является RequestTrackingTelemetryModule, который подключается к DiagnosticListener для захвата событий запуска / остановки запроса, о которых мы говорили в # 1 выше. Да, он использует секундомер для вычисления разницы между началом и остановкой запроса.

Кстати, app Insights sdk и asp.net ядро с открытым исходным кодом на случай, если вы хотите углубленно изучить.

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

1. Да, я немного покопался в коде после того, как задал вопрос. Насколько я могу судить, временная метка для запуска запроса берется здесь: github.com/microsoft/ApplicationInsights-dotnet/blob/develop/… И временная метка для остановки запроса берется здесь: github.com/microsoft/ApplicationInsights-dotnet/blob/develop /…