Поделиться через


Отслеживание зависимостей в Application Insights

Примечание.

В следующей документации используется классический API Application Insights. Долгосрочный план Application Insights — сбор данных с помощью OpenTelemetry. Дополнительные сведения см. в статье "Включение Azure Monitor OpenTelemetry для .NET", Node.js, приложений Python и Java и нашей стратегии OpenTelemetry. Рекомендации по миграции доступны для .NET, Node.js и Python.

Зависимость — это компонент, вызываемый приложением. Как правило, это служба, вызываемая с использованием HTTP, база данных или файловая система. Компонент Application Insights измеряет длительность вызова зависимостей, определяет успешность их выполнения и получает определенные сведения, например имя зависимости. Вы можете анализировать отдельные вызовы зависимостей и сопоставлять их с запросами и исключениями.

Автоматически отслеживаемые зависимости

Пакеты SDK Application Insights для .NET и .NET Core входят в состав DependencyTrackingTelemetryModule — модуля телеметрии, автоматически собирающего данные о зависимостях. Сбор этих данных автоматически активируется для приложений ASP.NET и ASP.NET Core, когда он настроен в соответствии с официальной документацией, приведенной по ссылке. Модуль DependencyTrackingTelemetryModule поставляется в NuGet-пакете Microsoft.ApplicationInsights.DependencyCollector. Он автоматически доставляется при использовании NuGet-пакетов Microsoft.ApplicationInsights.Web или Microsoft.ApplicationInsights.AspNetCore.

Сейчас DependencyTrackingTelemetryModule автоматически отслеживает следующие зависимости:

Зависимости Сведения
HTTP/HTTPS Локальные или удаленные вызовы HTTP/HTTPS.
Вызовы WCF Отслеживается автоматически только при использовании привязок на основе HTTP.
SQL Вызовы, выполненные с помощью SqlClient. Сбор данных об SQL-запросах описан в разделе Расширенное отслеживание SQL для получения полного SQL-запроса.
Хранилище BLOB-объектов, Хранилище таблиц или Хранилище очередей Azure Вызовы, совершаемые из клиента службы хранилища Azure.
Пакет SDK для клиента Центров событий Azure Используйте последнюю версию пакета: https://nuget.org/packages/Azure.Messaging.EventHubs.
Пакет SDK клиента Служебной шины Azure Используйте последнюю версию пакета: https://nuget.org/packages/Azure.Messaging.ServiceBus.
Azure Cosmos DB Автоматически отслеживается, если используется HTTP/HTTPS. Трассировка операций в прямом режиме с TCP также будет автоматически записана с помощью пакета >предварительной версии = 3.33.0-preview. Дополнительные сведения см. в документации.

Если какая-то зависимость отсутствует или вы используете другой пакет SDK, убедитесь, что она включена в список автоматически собираемых зависимостей. Если данные о зависимости автоматически не собираются, вы можете отслеживать вызов зависимости вручную.

Настройка автоматического отслеживания зависимостей в консольных приложениях

Для автоматического отслеживания зависимостей из консольных приложений .NET установите пакет NuGet Microsoft.ApplicationInsights.DependencyCollector и инициализируйте DependencyTrackingTelemetryModule:

    DependencyTrackingTelemetryModule depModule = new DependencyTrackingTelemetryModule();
    depModule.Initialize(TelemetryConfiguration.Active);

Для консольных приложений .NET Core TelemetryConfiguration.Active не рекомендуется использовать. См. руководство в документации по службе Worker Service и документации по мониторингу ASP.NET Core.

Как выполняется автоматическое отслеживание зависимостей?

Зависимости автоматически собираются одним из следующих способов:

  • инструментирование байт-кода вокруг выбранных методов Используйте InstrumentationEngine из StatusMonitor или расширение веб-приложений в Службе приложений Azure.
  • Обратные вызовы EventSource.
  • Обратные вызовы DiagnosticSource в последних версиях пакетов SDK для .NET или .NET Core.

Отслеживание зависимостей вручную

Примеры зависимостей, которые не обеспечивают автоматический сбор данных и требуют отслеживания вручную:

  • Azure Cosmos DB отслеживается автоматически только в том случае, если используется HTTP/HTTPS. Режим TCP не будет автоматически записан в Application Insights для версий пакета SDK старше 2.22.0-Beta1.
  • Redis

Если пакет SDK не собирает данные о зависимостях автоматически, вы можете отслеживать их вручную, используя API-интерфейс TrackDependency, применяемый стандартными модулями автоматического сбора.

Пример

Если при компиляции кода используется сборка, написанная не вами, вы можете засекать время всех ее вызовов. Этот сценарий позволит вам узнать вклад в общее время отклика.

Чтобы эти данные отображались в диаграммах зависимостей Application Insights, отправляйте их с использованием TrackDependency:


    var startTime = DateTime.UtcNow;
    var timer = System.Diagnostics.Stopwatch.StartNew();
    try
    {
        // making dependency call
        success = dependency.Call();
    }
    finally
    {
        timer.Stop();
        telemetryClient.TrackDependency("myDependencyType", "myDependencyCall", "myDependencyData",  startTime, timer.Elapsed, success);
    }

Помимо этого, TelemetryClient предоставляет методы расширения StartOperation и StopOperation, которые можно использовать для отслеживания зависимостей вручную, как показано в разделе Отслеживание исходящих зависимостей.

Если необходимо отключить стандартный модуль отслеживания зависимостей, удалите ссылку на DependencyTrackingTelemetryModule в файле ApplicationInsights.config для приложений ASP.NET. Для приложений ASP.NET Core следуйте инструкциям по Application Insights для приложений ASP.NET Core.

Отслеживание вызовов AJAX с веб-страниц

На веб-страницах пакет SDK JavaScript для Application Insights автоматически собирает вызовы AJAX в виде зависимостей.

Расширенное отслеживание SQL для получения полного SQL-запроса

Примечание.

Функции Azure требуют отдельных параметров для включения сбора текста SQL. Дополнительные сведения см. в разделе "Включение сбора запросов SQL".

Для вызовов SQL всегда определяется имя сервера и базы данных, и они сохраняются как имя собираемых данных DependencyTelemetry. Другое поле с именем data может содержать весь текст SQL-запроса.

Для приложений ASP.NET Core теперь требуется предоставить явное согласие на сбор текста SQL:

services.ConfigureTelemetryModule<DependencyTrackingTelemetryModule>((module, o) => { module. EnableSqlCommandTextInstrumentation = true; });

Для приложений ASP.NET полный текст SQL-запроса собирается с помощью инструментирования байтового кода, для которого требуется использовать подсистему инструментирования или пакет NuGet Microsoft.Data.SqlClient, а не библиотеку System.Data.SqlClient. Действия, необходимые для включения сбора полного текста SQL-запросов на конкретных платформах, приведены в следующей таблице.

Платформа Действия для получения полного SQL-запроса
Веб-приложения в Службе приложений Azure В панели управления веб-приложения откройте область Application Insights и включите команды SQL для .NET.
Сервер IIS (Виртуальные машины Azure, локальная среда и т. д.) Используйте пакет NuGet Microsoft.Data.SqlClient или используйте модуль PowerShell агента Application Insights для установки подсистемы инструментирования и перезапуска IIS.
Oблачныe службы Azure2 Добавьте задачу запуска для установки StatusMonitor.
Во время сборки приложение должно быть подключено к пакету SDK для Application Insights. Для этого требуется установить пакеты NuGet для приложений ASP.NET или ASP.NET Core.
IIS Express Используйте пакет NuGet Microsoft.Data.SqlClient.
Веб-задания в службе приложений Azure Используйте пакет NuGet Microsoft.Data.SqlClient.

В дополнение к описанным выше действиям для разных платформ необходимо явно согласиться на сбора команд SQL, внеся в файл applicationInsights.config следующий код:

<TelemetryModules>
  <Add Type="Microsoft.ApplicationInsights.DependencyCollector.DependencyTrackingTelemetryModule, Microsoft.AI.DependencyCollector">
    <EnableSqlCommandTextInstrumentation>true</EnableSqlCommandTextInstrumentation>
  </Add>

В приведенных выше случаях, чтобы надлежащим образом проверить установку подсистемы инструментирования, убедитесь, что собираемые данные DependencyTelemetry относятся к пакету SDK версии rddp. Использование rdddsd или rddf показывает, что данные зависимостей собираются обратным вызовом DiagnosticSource или EventSource, поэтому полный текст SQL-запроса не собирается.

Где найти данные зависимостей

  • Схема приложения наглядно представляет зависимости между приложением и смежными компонентами.
  • Диагностика транзакций отображает унифицированные коррелированные данные сервера.
  • Вкладка "Браузеры" содержит вызовы AJAX из браузеров ваших пользователей.
  • Выберите медленные или неудачно завершенные запросы, чтобы проверить их вызовы зависимостей.
  • Аналитику можно использовать для запроса данных зависимостей.

Диагностика медленных запросов

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

Трассировка от запросов до зависимостей

Выберите слева раздел Производительность, а затем вкладку Зависимости вверху экрана.

Выберите Имя зависимости ниже пункта Общая работоспособность. После выбора зависимости справа появится граф распределения длительностей для нее.

Снимок экрана с открытой вкладкой

Нажмите кнопку Примеры в правом нижнем углу. Затем выберите пример, чтобы просмотреть полные сведения о транзакции.

Снимок экрана с выбором примера для просмотра полных сведений о транзакции.

Выполните профилирование активного сайта

Профилировщик Application Insights отслеживает вызовы HTTP к активному сайту и показывает, какие функции в коде выполнялись дольше всего.

Неудачные запросы

Неудачно завершенные запросы также могут быть связаны с неудачными вызовами зависимостей.

Выберите слева раздел Сбои, а затем вкладку Зависимости вверху экрана.

Снимок экрана с выбором диаграммы неудачных запросов.

Здесь вы увидите количество зависимостей со сбоем. Чтобы получить дополнительные сведения о возникшем сбое, выберите имя зависимости в таблице снизу. Нажмите на кнопку Зависимости в правом нижнем углу, чтобы просмотреть полные сведения о транзакции.

Журналы (Analytics)

Вы можете отслеживать зависимости, используя язык запросов Kusto. Ниже приведено несколько примеров.

  • Поиск неудачно завершенных вызовов зависимостей:

    
        dependencies | where success != "True" | take 10
    
  • Поиск вызовов AJAX:

    
        dependencies | where client_Type == "Browser" | take 10
    
  • Поиск вызовов зависимостей, связанных с запросами:

    
        dependencies
        | where timestamp > ago(1d) and  client_Type != "Browser"
        | join (requests | where timestamp > ago(1d))
          on operation_Id  
    
  • Поиск вызовов AJAX, связанных с представлениями страницы:

    
        dependencies
        | where timestamp > ago(1d) and  client_Type == "Browser"
        | join (browserTimings | where timestamp > ago(1d))
          on operation_Id
    

Часто задаваемые вопросы

В этом разделы приводятся ответы на часто задаваемые вопросы.

Каким образом автоматический сборщик данных о зависимостях сообщает о сбое вызовов зависимости?

Для сбоев вызова зависимости поле success будет иметь значение False (Ложь). Модуль DependencyTrackingTelemetryModule не сообщает данные ExceptionTelemetry. Полная модель данных для зависимостей описана в модели данных телеметрии Application Insights.

Как вычислить задержку приема для данных телеметрии зависимости?

Используйте следующий код:

dependencies
| extend E2EIngestionLatency = ingestion_time() - timestamp 
| extend TimeIngested = ingestion_time()

Как определить время инициирования вызова зависимости?

В представлении запросов Log Analytics значение timestamp соответствует моменту, когда был инициирован вызов TrackDependency(), что происходит сразу после получения отклика на вызов зависимости. Чтобы вычислить время начала вызова зависимости, необходимо из timestamp вычесть записанное значение duration вызова зависимости.

Включает ли отслеживание зависимостей в Application Insights тела ответа ведения журнала?

Отслеживание зависимостей в Application Insights не включает тела ответов ведения журнала, так как оно создает слишком много данных телеметрии для большинства приложений.

Пакет SDK с открытым исходным кодом

Как и все пакеты SDK для Application Insights, модуль сбора данных зависимостей тоже предоставляется с открытым кодом. Просмотреть код, поучаствовать в его разработке или сообщить о проблемах можно в официальном репозитории на GitHub.

Автоматический сбор зависимостей

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

.NET

Платформы приложений Версии
Веб-формы ASP.NET 4.5+
ASP.NET MVC 3 4
ASP.NET WebAPI 4.5+
ASP.NET Core 1.1+
Библиотеки обмена данными
HttpClient 4.5+, .NET Core 1.1+
SqlClient .NET Core 1.0+, NuGet 4.3.0
Microsoft.Data.SqlClient 1.1.0 — последняя стабильная версия. (см. примечание ниже.)
Клиентский пакет SDK центров событий 1.1.0
Пакет SDK для клиента служебной шины 7.0.0
Клиенты хранилища
ADO.NET 4.5+

Примечание.

Существует известная проблема со старыми версиями Microsoft.Data.SqlClient. Мы рекомендуем использовать 1.1.0 или более позднюю версию, чтобы решить эту проблему. Entity Framework Core необязательно поставляется с последней стабильной версией Microsoft.Data.SqlClient, поэтому мы рекомендуем подтвердить, что вы используете как минимум 1.1.0, чтобы избежать этой проблемы.

Java

См. список автоматически собранных зависимостей Java Application Insights.

Node.js

Здесь хранится список последних поддерживаемых в настоящее время модулей.

JavaScript

Библиотеки обмена данными Версии
XMLHttpRequest Все

Следующие шаги