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


Изучение сбоев, производительности и транзакций с помощью Application Insights

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

  • Сбои — отслеживает ошибки, исключения и ошибки, предлагая четкие аналитические сведения для быстрого решения проблем и повышенной стабильности.

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

  • Поиск транзакций — позволяет пользователям находить и проверять отдельные элементы телеметрии, такие как представления страниц, исключения и пользовательские события.

  • Диагностика транзакций — помогает быстро выявлять проблемы в компонентах с помощью комплексной информации о транзакциях.

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

Чтобы получить представление "Сбои " в Application Insights, выберите граф неудачных запросов на панели обзора или сбои в категории "Исследование " в меню ресурсов.

Снимок экрана, показывающий, как достичь представления

Вы также можете получить представление об ошибках из карты приложений , выбрав ресурс, а затем изучить сбои из раздела триажа.

Замечание

Вы можете получить доступ к диагностике транзакций с помощью любого из трех других интерфейсов. Дополнительные сведения см. в разделе "Исследование телеметрии".

Обзор

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

Снимок экрана: представление

Замечание

Помимо встроенной телеметрии, отправляемой дистрибутивом OpenTelemetry Azure Monitor или пакетом SDK JavaScript, можно добавлять и изменять данные телеметрии (например, пользовательские события).

Дополнительные сведения см. в статье "Добавление и изменение Azure Monitor OpenTelemetry" для приложений .NET, Java, Node.jsи Python.

Фильтрация телеметрии

Фильтры по умолчанию

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

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

Чтобы узнать, как настроить имя облачной роли и экземпляр облачной роли, см. статью «Настройка Azure Monitor OpenTelemetry».

Добавление фильтров

Можно фильтровать события по значениям их свойств. Доступные свойства зависят от выбранных типов событий или телеметрии. Чтобы добавить фильтр, выполните приведенные действия.

  1. Щелкните значок фильтра , чтобы добавить фильтр.

    Фильтр таблетки

  2. В раскрывающемся списке слева выберите свойство.

  3. В раскрывающемся списке центра выберите один из следующих операторов: =, !=, contains, или not contains.

  4. В раскрывающемся списке справа выберите все значения свойств, которые нужно отфильтровать.

    Замечание

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

  5. Чтобы добавить другой фильтр, снова выберите значок фильтра .

Телеметрия поиска

Вы можете выполнить поиск определенных операций с помощью поиска для фильтрации элементов... в поле над списком операций.

Снимок экрана: поле

Использование аналитических данных

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

Подсказка

Простой режим в Log Analytics предоставляет интуитивно понятный интерфейс для анализа и визуализации данных журнала.

  1. В представлении "Производительность,сбои" или "Поиск транзакций" выберите "Вид в журналах " в верхней панели навигации и выберите запрос в раскрывающемся меню.

    Снимок экрана: верхняя панель действий с выделенной кнопкой

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

    Снимок экрана, показывающий вид

Изучение телеметрии

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

  1. Выберите операцию, чтобы просмотреть Топ-3 кода ответов, Топ-3 типа исключений и Топ-3 сбоя зависимостей для этой операции.

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

  3. Выберите пример операции, чтобы открыть представление сведений о сквозной транзакции .

    Снимок экрана: представление

    Замечание

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

Анализ производительности и сбоев на стороне клиента

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

  1. После добавления скрипта вы можете получить доступ к представлениям страниц и связанным с ними метрикам производительности, выбрав браузер , переключив переключатель в представлении "Производительность " или " Сбои ".

    Снимок экрана: переключатель

    Это представление содержит визуальную сводку по различным телеметриям приложения с точки зрения браузера.

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

    Снимок экрана, показывающий представление «Сведения о сквозной транзакции» с выделенным разделом «Свойства просмотра страницы».

Замечание

Как и данные, собранные для производительности сервера, Application Insights делает все клиентские данные доступными для глубокого анализа с помощью журналов.

Интерфейс диагностики транзакций

В режиме диагностики транзакций, также называемом представлением сведений о сквозных транзакциях , показана диаграмма Ганта транзакции, в которой перечислены все события с их длительностью и кодом ответа.

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

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

Это представление состоит из четырех ключевых частей:

Снимок экрана: представление транзакции с выделенным списком результатов.

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

Заметки о выпуске

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

Автоматические заметки с помощью Azure Pipelines

Azure Pipelines создает заметку о выпуске во время развертывания, если выполняются все следующие условия:

  • Целевой ресурс ссылается на Application Insights с помощью APPINSIGHTS_INSTRUMENTATIONKEY параметра приложения.
  • Ресурс Application Insights находится в той же подписке, что и целевой ресурс.
  • В развертывании используется одна из следующих задач Azure Pipelines:
Код задачи Имя задачи Versions
AzureAppServiceSettings Параметры службы приложений Azure Любое
AzureRmWebAppDeployment Служба приложений Azure V3+
AzureFunctionApp Azure Functions Любое
AzureFunctionAppContainer Функции Azure для контейнера Любое
AzureWebAppContainer Веб-приложение Azure для контейнеров Любое
AzureWebApp Веб-приложение Azure Любое

Замечание

Если вы по-прежнему используете старую задачу развертывания заметок Application Insights, удалите ее.

Настройка заметок в конвейере с помощью встроенного скрипта

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

  1. Откройте существующий конвейер или создайте новую и выберите задачу в разделе "Этапы".

  2. Добавьте новую задачу Azure CLI .

  3. Выберите подписку Azure. Задайте для типа скрипта значениеPowerShell и задайте значение "Расположение скрипта" в качестве встроенного.

  4. Добавьте сценарий PowerShell из шага 2 в заметках о выпуске с помощью Azure CLI в встроенный скрипт.

  5. Добавьте аргументы скрипта. Замените заполнители в угловых скобках.

    -aiResourceId "<aiResourceId>" `
    -releaseName "<releaseName>" `
    -releaseProperties @{"ReleaseDescription"="<a description>";
         "TriggerBy"="<Your name>" }
    

    В следующем примере показаны метаданные, которые можно задать в необязательном releaseProperties аргументе с помощью переменных сборки и выпуска. Нажмите кнопку "Сохранить".

    -releaseProperties @{
     "BuildNumber"="$(Build.BuildNumber)";
     "BuildRepositoryName"="$(Build.Repository.Name)";
     "BuildRepositoryProvider"="$(Build.Repository.Provider)";
     "ReleaseDefinitionName"="$(Build.DefinitionName)";
     "ReleaseDescription"="Triggered by $(Build.DefinitionName) $(Build.BuildNumber)";
     "ReleaseEnvironmentName"="$(Release.EnvironmentName)";
     "ReleaseId"="$(Release.ReleaseId)";
     "ReleaseName"="$(Release.ReleaseName)";
     "ReleaseRequestedFor"="$(Release.RequestedFor)";
     "ReleaseWebUrl"="$(Release.ReleaseWebUrl)";
     "SourceBranch"="$(Build.SourceBranch)";
     "TeamFoundationCollectionUri"="$(System.TeamFoundationCollectionUri)" }
    

Создание заметок о выпуске с помощью Azure CLI

Используйте следующий сценарий PowerShell, чтобы создать заметку о выпуске из любого процесса без Azure DevOps.

  1. Войдите в Azure CLI.

  2. Сохраните следующий скрипт как CreateReleaseAnnotation.ps1.

    param(
        [parameter(Mandatory = $true)][string]$aiResourceId,
        [parameter(Mandatory = $true)][string]$releaseName,
        [parameter(Mandatory = $false)]$releaseProperties = @()
    )
    
    # Function to ensure all Unicode characters in a JSON string are properly escaped
    function Convert-UnicodeToEscapeHex {
      param (
        [parameter(Mandatory = $true)][string]$JsonString
      )
      $JsonObject = ConvertFrom-Json -InputObject $JsonString
      foreach ($property in $JsonObject.PSObject.Properties) {
        $name = $property.Name
        $value = $property.Value
        if ($value -is [string]) {
          $value = [regex]::Unescape($value)
          $OutputString = ""
          foreach ($char in $value.ToCharArray()) {
            $dec = [int]$char
            if ($dec -gt 127) {
              $hex = [convert]::ToString($dec, 16)
              $hex = $hex.PadLeft(4, '0')
              $OutputString += "\u$hex"
            }
            else {
              $OutputString += $char
            }
          }
          $JsonObject.$name = $OutputString
        }
      }
      return ConvertTo-Json -InputObject $JsonObject -Compress
    }
    
    $annotation = @{
        Id = [GUID]::NewGuid();
        AnnotationName = $releaseName;
        EventTime = (Get-Date).ToUniversalTime().GetDateTimeFormats("s")[0];
        Category = "Deployment"; #Application Insights only displays annotations from the "Deployment" Category
        Properties = ConvertTo-Json $releaseProperties -Compress
    }
    
    $annotation = ConvertTo-Json $annotation -Compress
    $annotation = Convert-UnicodeToEscapeHex -JsonString $annotation  
    
    $accessToken = (az account get-access-token | ConvertFrom-Json).accessToken
    $headers = @{
        "Authorization" = "Bearer $accessToken"
        "Accept"        = "application/json"
        "Content-Type"  = "application/json"
    }
    $params = @{
        Headers = $headers
        Method  = "Put"
        Uri     = "https://management.azure.com$($aiResourceId)/Annotations?api-version=2015-05-01"
        Body    = $annotation
    }
    Invoke-RestMethod @params
    

Замечание

Установка категории для развертывания или заметок не отображается на портале Azure.

Вызовите скрипт и передайте значения для параметров. Параметр -releaseProperties является необязательным.

.\CreateReleaseAnnotation.ps1 `
 -aiResourceId "<aiResourceId>" `
 -releaseName "<releaseName>" `
 -releaseProperties @{"ReleaseDescription"="<a description>";
     "TriggerBy"="<Your name>" }
Аргумент Definition Замечание
aiResourceId Идентификатор ресурса целевого ресурса Application Insights. Пример: /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/MyRGName/providers/microsoft.insights/components/MyResourceName
releaseName Имя новой заметки о выпуске.
releaseProperties Пользовательские метаданные для присоединения к заметке. Необязательно

Просмотр заметок

Замечание

Заметки о выпуске недоступны в области метрик .

Application Insights отображает заметки о выпуске в следующих интерфейсах:

Заметки визуализированы как маркеры в верхней части диаграмм.

Снимок экрана: диаграмма исключений с заметками.

Чтобы включить заметки в книге, откройте дополнительные параметры и выберите "Показать заметки". Выберите любой маркер заметки для открытия сведений о выпуске, таких как запроситель, ветвь управления версиями, конвейер выпуска и среда.

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

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

Поиск транзакций

Что такое компонент?

Компоненты — это независимо развертываемые части распределенного приложения или приложения для микрослужб. Разработчики и операционные команды могут просматривать данные телеметрии, созданные компонентами приложения, на уровне кода.

  • Компоненты отличаются от "наблюдаемых" внешних зависимостей, таких как SQL и центры событий, к которым ваша команда или организация могут не иметь доступа (код или телеметрия).
  • Компоненты выполняются на любом количестве экземпляров серверов, ролей или контейнеров.
  • Компоненты могут быть отдельными ключами инструментирования Application Insights, даже если подписки отличаются. Компоненты также могут быть разными ролями, которые сообщают одному ключу инструментирования Application Insights. В новом интерфейсе отображаются сведения обо всех компонентах независимо от того, как они были настроены.

Сколько данных сохраняется?

См. сводку по ограничениям.


Как просмотреть данные POST в запросах сервера?

Мы не регистрируем данные POST автоматически, но можно использовать TrackTrace или логирование вызовов. Поместите данные POST в параметр сообщения. Сообщения нельзя отфильтровать тем же способом, как это делается для свойств, но предельный размер больше.


Почему поиск функции Azure не возвращает результатов?

Функции Azure не регистрирует строки запроса URL-адреса.

Диагностика транзакций

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

Возможные причины:

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

Я вижу повторяющиеся строки для зависимостей. Ожидается ли это поведение?

В настоящее время мы показываем вызов исходящей зависимости отдельно от входящего запроса. Как правило, два вызова выглядят идентичными только значения длительности, которые отличаются из-за сетевого кругового пути. Разницу между ними можно определить по значку и стилю линий длительности. Если такое представление данных слишком трудное, отправьте нам свой отзыв!


Что насчет несоответствий времени между различными экземплярами компонентов?

Временные шкалы на диаграмме транзакций приводятся в соответствие. Метки времени можно просмотреть в области сведений или с помощью Log Analytics.


Почему в новом интерфейсе отсутствует большинство запросов, связанных с элементами?

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


Существует ли возможность увидеть меньше событий на транзакцию при использовании пакета SDK JavaScript Для Application Insights?

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

В этих сценариях можно использовать автоматическое отслеживание маршрутов для автоматического создания новых операций для навигации в SPA. Необходимо включить enableAutoRouteTracking , чтобы система при каждом обновлении url-адреса обновляла представление страницы (логическое представление страницы). Если вы хотите вручную обновить идентификатор операции, вызовите appInsights.properties.context.telemetryTrace.traceID = Microsoft.ApplicationInsights.Telemetry.Util.generateW3CId(). Активация события PageView вручную также сбрасывает идентификатор операции.


Почему длительность сведений о транзакциях не добавляется в длительность верхнего запроса?

Время, не описанное на диаграмме Ганта, — это время, которое не охватывается отслеживаемой зависимостью. Эта проблема может возникнуть, так как внешние вызовы не были инструментированы автоматически или вручную. Это также может произойти, так как время, затраченное на процесс, а не из-за внешнего вызова.

Если все вызовы были инструментированы, вероятной основной причиной затраченного времени является процесс. Полезным средством диагностики процесса является профилировщик .NET.


Что делать, если появится сообщение "Ошибка извлечения данных" при переходе по Application Insights на портале Azure?

Эта ошибка означает, что браузеру не удалось вызвать необходимый API или API вернул ответ, указывающий на сбой. Чтобы устранить неполадки в поведении, откройте окно InPrivateбраузера и отключите все запущенные расширения браузера , а затем определите, можно ли воспроизвести поведение портала. Если ошибка портала по-прежнему возникает, попробуйте протестировать другие браузеры или другие компьютеры, изучить систему доменных имен (DNS) или другие проблемы, связанные с сетью, на клиентском компьютере, где вызовы API завершаются сбоем. Если ошибка портала продолжается, соберите трассировку сети браузера при воспроизведении неожиданного поведения. Затем откройте вариант поддержки на портале Azure.

Дальнейшие шаги