Добавление идентификатора корреляции в ведение журнала application insights и телеметрию из приложения asp dotnet core

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

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

Вопрос:

Мне необходимо добавить CorrelationId для сквозной трассировки запроса в приложении asp dotnet core. Я использую Azure application Insights для ведения журнала и телеметрии. Как мне добавить идентификатор корреляции в область запроса, чтобы каждый вызов Ilogger на разных уровнях и вызов телеметрии записывали эту информацию?

Ниже приведен фрагмент кода, используемый для включения application insights:

  .UseApplicationInsights()
 .ConfigureLogging(loggingBuilder => loggingBuilder.AddApplicationInsights())
  

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

1. с настройками application Insights по умолчанию запрос и вся другая телеметрия в этой области уже были бы сопоставлены с тем же operation_id. Вы не видите такого поведения?

2. Я хотел бы показать идентификатор корреляции вместе с текстом ошибки в пользовательском интерфейсе при возникновении ошибки. Таким образом, проблемы со службой поддержки клиентов будут решаться быстро. Как генерируется operation_id? Возможно ли мне его установить?

Ответ №1:

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

Распределенная логическая операция обычно состоит из набора более мелких операций, которые представляют собой запросы, обрабатываемые одним из компонентов. Эти операции определяются с помощью телеметрии запроса. Каждый запрос телеметрии имеет свой собственный идентификатор, который идентифицирует его уникально и глобально. И все элементы телеметрии (такие как трассировки и исключения), которые связаны с этим запросом, должны устанавливать operation_parentId в значение идентификатора запроса.

Каждая исходящая операция, такая как HTTP-вызов другого компонента, представлена телеметрией зависимостей. Телеметрия зависимостей также определяет свой собственный идентификатор, который является уникальным в глобальном масштабе. Запрос телеметрии, инициируемый этим вызовом зависимости, использует этот идентификатор в качестве идентификатора operation_parentId.

Вы можете создать представление распределенной логической операции, используя operation_Id, operation_parentId и request.id с dependency.id. Эти поля также определяют порядок причинности вызовов телеметрии.

Ссылка на документацию — ссылка

Надеюсь, приведенная выше информация поможет.