Использование Application Insights для облачных служб Azure
С помощью Application Insights можно отслеживать приложения облачной службы Azure на предмет доступности, производительности, сбоев и использования, объединяя данные из пакета SDK Application Insights с данными системы диагностики Azure из облачных служб. Благодаря получаемым данным о производительности и эффективности работы приложения на практике вы можете принимать осознанные решения о направлении разработки в каждом жизненном цикле.
Примечание.
Поддержка приема ключей инструментирования будет завершена 31 марта 31, 2025 г. Прием ключей инструментирования будет и дальше осуществляться, но мы больше не будем предоставлять обновления или поддержку для этой функции. Перейдите на строки подключения, чтобы использовать новые возможности.
Необходимые компоненты
Для этого потребуются следующие компоненты.
-
Войдите с помощью учетной записи Майкрософт для Windows, XBox Live или других облачных служб Майкрософт.
Инструменты Microsoft Azure 2.9 или более поздней версии.
Developer Analytics Tools 7.10 или более поздней версии.
Быстрое начало работы
Самый быстрый и простой способ настроить мониторинг облачной службы с помощью Application Insights — выбрать этот вариант при публикации своей службы в Azure.
Этот вариант позволяет инструментировать приложение во время выполнения, что предоставляет все данные телеметрии, необходимые для мониторинга запросов, исключений и зависимостей в веб-роли. Вы также можете отслеживать счетчики производительности рабочих ролей. Все диагностические трассировки, создаваемые вашим приложением, также отправляются в Application Insights.
Возможно, вас удовлетворит только этот вариант.
Следующие шаги — просмотр метрик приложения, отправка запроса данных с помощью Analytics.
Чтобы отслеживать производительность в браузере, вы можете настроить тесты доступности и добавить код в веб-страницы.
В следующих разделах обсуждаются дополнительные возможности:
- отправка данных от разных компонентов и конфигураций сборки в отдельные ресурсы;
- добавить пользовательские данные телеметрии из своего приложения.
Пример приложения, инструментированного с помощью Application Insights
В этом примере приложения служба Application Insights добавлена в облачную службу с двумя рабочими ролями, размещенными в Azure.
В следующем разделе описано, как адаптировать собственный проект облачной службы аналогичным образом.
Планирование ресурсов и групп ресурсов
Данные телеметрии из приложения сохраняются, анализируются и отображаются в ресурсе Azure типа Application Insights.
Каждый ресурс относится к группе ресурсов. Группы ресурсов используются для управления затратами, предоставления доступа участникам команды и развертывания обновлений в отдельной согласованной транзакции. Например, вы можете написать скрипт для развертывания облачной службы Azure и ресурсов мониторинга Application Insights в одной операции.
Ресурсы для компонентов
Рекомендуется добавить свойство измерения к каждому элементу телеметрии, определяющему его исходную роль. При таком подходе диаграммы метрик (например, исключений) обычно отображают агрегированные данные для нескольких ролей. При необходимости вы можете сегментировать диаграмму по идентификатору роли. Поиск также можно фильтровать по одному измерению. Этот вариант делает более удобным одновременный просмотр информации, но может привести к некоторой путанице с ролями.
Данные телеметрии браузера обычно добавляются в тот же ресурс, что и данные соответствующей серверной веб-роли.
Поместите ресурсы Application Insights для разных компонентов в одну группу ресурсов. Такой подход позволяет легко управлять ими одновременно.
Разделение среды разработки, тестирования и рабочей среды
При разработке пользовательских событий для следующей версии компонента в то время, когда предыдущая версия еще активна, необходимо отправлять данные телеметрии приложения в отдельный ресурс Application Insights. В противном случае будет трудно найти данные телеметрии тестирования среди всего трафика, поступающего от активного сайта.
Чтобы избежать такой ситуации, создайте отдельные ресурсы для каждой конфигурации сборки или метки (разработка, тестирование, эксплуатация и т. д.) в своей системе. Поместите ресурсы для каждой конфигурации сборки в отдельную группу ресурсов.
Чтобы отправлять данные телеметрии в соответствующие ресурсы, можно настроить пакет SDK для Application Insights, чтобы он использовал разные ключи инструментирования в зависимости от конфигурации сборки.
Узнайте, как динамически задать ключ инструментирования для различных этапов.
Создание ресурса Application Insights для каждой роли
Если вы решили создать отдельный ресурс для каждой роли и, возможно, отдельный набор для каждой конфигурации сборки, проще это сделать на портале Application Insights. Если создается много ресурсов, можно автоматизировать этот процесс.
На портале Azure выберите Создать>Службы разработки>Application Insights.
В раскрывающемся списке Тип приложения выберите Веб-приложение ASP.NET.
Каждый ресурс идентифицируется по ключу инструментирования. Он может понадобиться позже, если вы захотите вручную настроить или проверить конфигурацию пакета SDK.
Настройка системы диагностики Azure для каждой роли
Настройте мониторинг приложения с помощью Application Insights. Для веб-ролей этот вариант поддерживает мониторинг производительности, создание оповещений и диагностику, а также анализ сведений об использовании. Для других ролей можно искать и отслеживать диагностические данные Azure, например о событиях перезапуска, показаниях счетчиков производительности и вызовах System.Diagnostics.Trace.
В обозревателе решений Visual Studio в разделе <Ваша_облачная_служба>>Роли откройте свойства каждой роли.
В разделе Конфигурация установите флажок Отправка диагностических данных в Application Insights и выберите созданный ранее ресурс Application Insights.
Если вы решили использовать отдельный ресурс Application Insights для каждой конфигурации сборки, сначала выберите эту конфигурацию.
Это приведет к добавлению ключей инструментирования Application Insights в файлы ServiceConfiguration.*.cscfg. Вот пример кода.
Если требуется изменить уровень диагностических сведений, отправляемых в Application Insights, это можно сделать, напрямую изменив файлы .cscfg.
Установка пакета SDK в каждый проект
Этот вариант добавляет пользовательскую бизнес-телеметрию в любую роль. Так вы получите подробные аналитические данные об использовании и производительности приложения.
В Visual Studio настройте пакет SDK для Application Insights для каждого проекта облачного приложения.
Чтобы настроить веб-роли, щелкните проект правой кнопкой мыши и выберите Настроить Application Insights или Добавить > Телеметрия Application Insights.
Чтобы настроить рабочие ролей, сделайте следующее:
a. Щелкните проект правой кнопкой мыши и выберите Управление пакетами Nuget.
b. Добавьте Application Insights для Windows Servers.
Чтобы настроить пакет SDK для отправки данных в ресурс Application Insights, сделайте следующее:
a. В соответствующей функции запуска задайте ключ инструментирования, указанный в параметре конфигурации из файла .cscfg.
TelemetryConfiguration configuration = TelemetryConfiguration.CreateDefault(); configuration.InstrumentationKey = RoleEnvironment.GetConfigurationSettingValue("APPINSIGHTS_INSTRUMENTATIONKEY"); var telemetryClient = new TelemetryClient(configuration);
b. Повторите предыдущий шаг (a) для каждой роли в приложении. См. указанные ниже примеры.
Настройте для файла ApplicationInsights.config копирование в выходной каталог.
В сообщении в файле .config будет предложено поместить в него ключ инструментирования. Но для облачных приложений лучше задать его в файле .cscfg. Такой подход позволит правильно идентифицировать роли на портале.
Настройка монитора состояния для получения полных SQL-запросов (необязательно)
Этот шаг необходим только в том случае, если требуется захватить полные SQL-запросы на платформа .NET Framework.
В файле
\*.csdef
добавьте задачу запуска для каждой роли, аналогичной<Startup> <Task commandLine="AppInsightsAgent\InstallAgent.bat" executionContext="elevated" taskType="simple"> <Environment> <Variable name="ApplicationInsightsAgent.DownloadLink" value="http://go.microsoft.com/fwlink/?LinkID=522371" /> <Variable name="RoleEnvironment.IsEmulated"> <RoleInstanceValue xpath="/RoleEnvironment/Deployment/@emulated" /> </Variable> </Environment> </Task> </Startup>
Скачайте InstallAgent.bat и InstallAgent.ps1, вставьте их в папку
AppInsightsAgent
в каждом проекте роли. Не забудьте скопировать их в выходной каталог с помощью свойств файла Visual Studio или скриптов сборки.Добавьте переменные среды для всех рабочих ролей:
<Environment> <Variable name="COR_ENABLE_PROFILING" value="1" /> <Variable name="COR_PROFILER" value="{324F817A-7420-4E6D-B3C1-143FBED6D855}" /> <Variable name="MicrosoftInstrumentationEngine_Host" value="{CA487940-57D2-10BF-11B2-A3AD5A13CBC0}" /> </Environment>
Запуск и публикация приложения
Запустите приложение и войдите в Azure.
Откройте созданные ранее ресурсы Application Insights.
В разделе Поиск отображаются отдельные точки данных, а в обозревателе метрик — агрегированные данные.
Добавьте дополнительные данные телеметрии (как описано в следующем разделе), а затем опубликуйте приложение для оперативного получения данных диагностики и сведений об использовании.
Если данные не отображаются, сделайте следующее:
- Откройте плитку Поиск, чтобы просмотреть отдельные события.
- В приложении откройте несколько разных страниц, чтобы создать некоторый объем данных телеметрии.
- Подождите несколько секунд и щелкните Обновить.
Просмотр событий диагностики Azure
Источники данных диагностики Azure в Application Insights можно найти в следующих расположениях:
- Счетчики производительности отображаются в виде настраиваемых метрик.
- Журналы событий Windows отображаются в виде трассировок и настраиваемых событий.
- Журналы приложений, журналы трассировки событий Windows и все журналы инфраструктуры диагностики отображаются в виде трассировок.
Чтобы просмотреть счетчики производительности и счетчики событий, откройте обозреватель метрик и добавьте следующую диаграмму:
Для поиска по журналам трассировки, отправляемым системой диагностики Azure, используйте Поиск или Запрос аналитики. Предположим, что возникло необработанное исключение, которое вызвало сбой и перезапуск роли. Эта информация будет отображена в канале приложения журнала событий Windows. Можно использовать Поиск, чтобы просмотреть ошибку в журнале событий Windows и получить полную трассировку стека для этого исключения. Такой вариант поможет вам найти причину проблемы.
Дополнительные данные телеметрии
В следующих разделах описано, как получать дополнительные данные телеметрии по разным аспектам приложения.
Отслеживание запросов из рабочих ролей
В веб-ролях модуль запросов собирает данные об HTTP-запросах автоматически. Примеры переопределения поведения коллекции по умолчанию см. на странице с примером роли MVCWebRole.
Производительность вызовов для рабочих ролей можно регистрировать, отслеживая их таким же образом, как запросы HTTP. В Application Insights тип телеметрии запроса определяет единицу работы для указанного сервера, которую можно учесть и которая может быть независимо выполнена или не выполнена. HTTP-запросы автоматически перехватываются пакетом SDK, но вы можете добавить собственный код для отслеживания запросов к рабочим ролям.
Ознакомьтесь с двумя примерами рабочих ролей, которые инструментированы для отправки отчетов по запросам:
Исключения
Сведения о сборе необработанных исключений от веб-приложений разных типов см. в руководстве по настройке Application Insights и диагностике исключений.
Образец веб-роли имеет контроллеры MVC5 и веб-API 2. Необработанные исключения, поступающие из них, регистрируются следующими обработчиками:
- объектом AiHandleErrorAttribute, настроенным для контроллеров MVC5;
- объектом AiWebApiExceptionLogger, настроенным для контроллеров веб-API 2.
Для рабочих ролей есть два способа отслеживать исключения.
- TrackException(ex)
- Если вы добавили пакет NuGet прослушивателя трассировки Application Insights, вы можете вносить исключения в журнал с помощью System.Diagnostics.Trace.
Счетчики производительности
По умолчанию собираются приведенные ниже счетчики.
- \Процесс(??APP_WIN32_PROC??)% Процессорное время
- \Память\доступные байты
- .NET CLR Exceptions(??APP_CLR_PROC??)# Исключений в секунду
- \Process(??APP_WIN32_PROC??)\Байт исключительного пользования
- \Process(??APP_WIN32_PROC??)\I/O — обмен данными, байт в секунду
- \Процессор(_общий объем ресурсов)% загруженности процессора
Эти счетчики также собираются для веб-ролей.
- \ASP.NET Applications(??APP_W3SVC_PROC??)\Запросов в секунду
- \ASP.NET Applications(??APP_W3SVC_PROC??)\Время выполнения запросов
- \ASP.NET Applications(??APP_W3SVC_PROC??)\Запросы в очереди приложений
Можно указать дополнительные пользовательские или другие счетчики производительности Windows, изменив файл ApplicationInsights.config.
Коррелированная телеметрия для рабочих ролей
Вы можете расширить возможности диагностики, просматривая причины неудавшихся запросов или запросов с высокой задержкой. При работе с веб-ролями пакет SDK автоматически настраивает корреляцию между связанными данными телеметрии.
Для рабочих ролей вы можете использовать пользовательский инициализатор телеметрии, чтобы задать атрибут общего контекста Operation.Id для всех данных телеметрии. Это позволит с первого взгляда понять, связаны ли сбой или задержка с некоторой зависимостью или ошибкой в коде.
Это делается следующим образом:
- Настройте идентификатор корреляции в объекте CallContext. В нашем примере мы используем идентификатор запроса как идентификатор корреляции.
- Добавьте пользовательскую реализацию TelemetryInitializer, которая сохраняет в Operation.Id заданное ранее значение correlationId. Пример: ItemCorrelationTelemetryInitializer.
- Добавьте пользовательский инициализатор телеметрии. Это можно сделать в файле ApplicationInsights.config или в коде.
Данные телеметрии клиента
Добавьте пакет SDK JavaScript на веб-страницы, чтобы получать браузерные данные телеметрии, такие как число просмотров страниц, время загрузки страницы, исключения скриптов, и записывать пользовательскую телеметрию в скрипты страниц.
Тесты доступности
Настройте веб-тесты, которые обеспечат работоспособность приложения и его правильное реагирование на запросы.
Отображение всей информации вместе
Чтобы получить общее представление о системе, можно отобразить ключевые диаграммы мониторинга на одной панели мониторинга. Например, можно закрепить количество запросов и сбоев для каждой роли.
Если в системе используются другие службы Azure, такие как Stream Analytics, добавьте и их диаграммы мониторинга.
Если у вас есть клиентское мобильное приложение, воспользуйтесь Центром приложений. Создайте запросы в Аналитике для отображения числа событий и закрепите эти показатели на панели мониторинга.
Пример
примере отслеживается служба, которая имеет веб-роль и две рабочие роли.
Исключение "метод не найден" при выполнении в облачных службах Azure
Вы выполнили сборку для .NET LTS? Более ранние версии не поддерживаются автоматически в ролях облачных служб Azure. Установите .NET LTS в каждой роли, прежде чем выполнять приложение.