Общие сведения об Application Insights
Приложение Azure Monitor Аналитика, функция Azure Monitor, в приложении APM для динамических веб-приложений.
Возможности
Приложение Аналитика предоставляет множество возможностей для повышения производительности, надежности и качества приложений.
Анализ
- Панель мониторинга приложений: краткое описание работоспособности и производительности приложения.
- Карта приложений: визуальный обзор взаимодействия архитектуры и компонентов приложения.
- Динамические метрики: панель мониторинга аналитики в режиме реального времени для анализа активности приложений и производительности.
- Поиск транзакций: трассировка и диагностика транзакций для выявления проблем и оптимизации производительности.
- Представление доступности: упреждающее отслеживание и проверка доступности и реагирования конечных точек приложений.
- Представление производительности. Просмотрите метрики производительности приложения и потенциальные узкие места.
- Представление сбоев: выявление и анализ сбоев в приложении для минимизации простоя.
Наблюдение
- Оповещения: отслеживайте широкий спектр аспектов приложения и активируйте различные действия.
- Метрики. Подробное описание данных метрик для понимания шаблонов использования и тенденций.
- Параметры диагностики. Настройка экспорта потоковой передачи журналов и метрик платформы в выбранное место.
- Журналы: получение, консолидация и анализ всех данных, собранных в журналы мониторинга Azure.
- Книги: создание интерактивных отчетов и панелей мониторинга, визуализующих данные мониторинга приложений.
Использование
- Пользователи, сеансы и события: определите, где, где и как пользователи взаимодействуют с веб-приложением.
- Воронки: анализ частоты преобразования, чтобы определить, где пользователи прогрессируют или отпадают в воронке.
- Потоки: визуализация путей пользователей на сайте для выявления областей взаимодействия и точек выхода.
- Когорты: группируйте пользователей по общим характеристикам, чтобы упростить идентификацию тенденций, сегментацию и устранение неполадок с производительностью.
Анализ кода
- Профилировщик: захват, определение и просмотр трассировок производительности для приложения.
- Оптимизация кода: использование ИИ для создания более эффективных приложений.
- Отладчик моментальных снимков. Автоматическое сбор моментальных снимков отладки при возникновении исключений в приложении .NET
Модель логики
Схема модели логики визуализирует компоненты приложения Аналитика и способ их взаимодействия.
Параметры брандмауэра необходимо настроить для доступа к конечным точкам приема данных. Дополнительные сведения см. в разделе IP-адресов, используемых Azure Monitor.
Поддерживаемые языки
В этом разделе описаны поддерживаемые сценарии.
Подробные сведения о инструментировании приложений для включения приложений Аналитика см. в основах сбора данных.
Автоматическое инструментирование (включение без изменений кода)
Инструментирование вручную
Дистрибутив OpenTelemetry
Пакет SDK для приложений Аналитика (классический API)
Клиентский пакет SDK JavaScript
Поддерживаемые платформы и среды
В этом разделе перечислены все поддерживаемые платформы и платформы.
Интеграция служб Azure (включение портала, развертывания Azure Resource Manager)
- Azure Виртуальные машины и Azure Масштабируемые наборы виртуальных машин
- Служба приложений Azure
- Функции Azure
- Azure Spring Apps
- Облачные службы Azure — рабочие роли и веб-роли
Платформы ведения журналов
- ILogger
- Log4Net, NLog или System.Diagnostics.Trace
- Log4J , Logback или java.util.log
- Подключаемый модуль LogStash
- Azure Monitor
Экспорт и анализ данных
- Power BI
- Power BI для ресурсов на основе рабочей области
Неподдерживаемые пакеты SDK
Существует множество пакетов SDK для приложений, поддерживаемых сообществом, Аналитика. Azure Monitor предоставляет поддержку только при использовании поддерживаемых параметров инструментирования, перечисленных в этой статье.
Мы постоянно оцениваем возможности, чтобы расширить поддержку на другие языки. Последние новости см. в обновлениях Azure для приложений Аналитика.
Часто задаваемые вопросы
В этом разделы приводятся ответы на часто задаваемые вопросы.
Разделы справки инструментирование приложения?
Подробные сведения о инструментировании приложений для включения приложений Аналитика см. в основах сбора данных.
Как использовать Application Insights?
После включения приложения Аналитика инструментированием приложения мы рекомендуем сначала проверка отключая динамические метрики и карту приложения.
Какие данные телеметрии Аналитика собирать приложение?
Из серверных веб-приложений:
- HTTP-запросы.
- Зависимости. Вызовы к базам данных SQL, HTTP-вызовы к внешним службам, Azure Cosmos DB, таблица Azure служба хранилища, Хранилище BLOB-объектов Azure и служба хранилища очередей Azure.
- исключения и трассировки стека;
- Счетчики производительности: счетчики производительности доступны при использовании:
- Агент Аналитика приложения Azure Monitor
- Мониторинг Azure для виртуальных машин или масштабируемых наборов виртуальных машин
- Модуль записи приложений Аналитика collectd .
- пользовательские события и метрики, которые вы создаете в коде;
- журналы трассировки, если вы настраиваете соответствующий сборщик.
- Неперехваченные исключения в приложении, включая указанные ниже сведения.
- Трассировка стека
- Сведения об исключении и сообщение, сопровождающее ошибку
- Номер строки и столбца с ошибкой
- URL-адрес, где возникла ошибка
- URL-адрес источника зависимостей
- Команда и метод, используемые для запроса зависимости
- Длительность запроса
- Код результата и состояние успеха запроса
- Идентификатор (если есть) пользователя, выполняющего запрос
- Контекст корреляции (если есть), где выполняется запрос
Примечание. Для некоторых приложений, таких как одностраничные приложения (SPAs), длительность не может быть записана и по умолчанию будет иметь значение 0.
Из других источников, если они настроены:
- Настройка системы диагностики Azure для входа в Application Insights
- Импорт в Log Analytics
- Служба Log Analytics
- Logstash.
Сколько ресурсов приложения Аналитика следует развернуть?
Сведения о количестве ресурсов приложения Аналитика, необходимых для покрытия приложений или компонентов в разных средах, см. в руководстве по планированию развертывания Аналитика приложений.
Как управлять ресурсами приложения Аналитика с помощью PowerShell?
Скрипты PowerShell можно написать с помощью Azure Resource Monitor:
- создание и обновление ресурсов Application Insights;
- задание ценового плана;
- получение ключа инструментирования;
- добавление оповещения метрики;
- добавление теста доступности.
Невозможно настроить отчет обозревателя метрик или настроить непрерывный экспорт.
Как запросить данные телеметрии приложения Аналитика?
Можно ли отправлять данные телеметрии на портал Application Insights?
Мы рекомендуем использовать наши пакеты SDK и использовать API SDK. Существуют разновидности пакетов SDK для разных платформ. Эти пакеты SDK обрабатывают такие процессы, как буферизация, сжатие, регулирование и повторные попытки. Однако схема приема и протокол конечной точки являются открытыми.
Сколько времени требуется для сбора данных телеметрии?
Как правило, время сбора данных Application Insights не превышает 5 минут. Некоторые данные могут занять больше времени, что обычно для больших файлов журнала. См. соглашение об уровне обслуживания приложения Аналитика.
Как приложение Аналитика обрабатывает сбор данных, хранение, хранение и конфиденциальность?
Коллекция
Приложение Аналитика собирает данные телеметрии о приложении, включая данные телеметрии веб-сервера, данные телеметрии веб-страницы и счетчики производительности. Эти данные можно использовать для мониторинга производительности, работоспособности и использования приложения. При создании нового ресурса приложения Аналитика можно выбрать расположение.
Хранение и служба хранилища
Данные отправляются в рабочую область Application Аналитика Log Analytics. Срок хранения необработанных данных можно выбрать от 30 до 730 дней. Агрегированные данные хранятся в течение 90 дней, а моментальные снимки отладки хранятся в течение 15 дней.
Конфиденциальность
Приложение Аналитика не обрабатывает конфиденциальные данные по умолчанию, если вы не помещаете конфиденциальные данные в URL-адреса в виде обычного текста и гарантирует, что пользовательский код не собирает личные или другие конфиденциальные сведения. Во время разработки и тестирования проверка отправленные данные в IDE и окнах вывода отладки браузера.
Справка и поддержка
Техническая поддержка Azure
Чтобы получить сведения о проблемах поддержки Azure, сделайте запрос в службу поддержки Azure.
Форум по вопросам и вопросам Microsoft Q&A
Поместите общие вопросы на форум ответов Microsoft Q&A.
Stack Overflow
Задавайте вопросы о кодировании в Stack Overflow с помощью тега azure-application-insights .
Сообщество отзывов
Оставьте отзыв о продукте для команды инженеров в сообществе отзывов.
Устранение неполадок
Ознакомьтесь с выделенными статьями по устранению неполадок для приложений Аналитика.
Следующие шаги
- Основы сбора данных
- Создайте ресурс
- Обзор автоматического инструментирования
- Панель мониторинга приложений
- Схема сопоставления приложений
- Динамические метрики
- Поиск транзакций
- Обзор доступности
- Анализ пользователей, сеансов и событий в Application Insights
Использование Visual Studio Application Insights — опыт инженера по тестированию
Выражаем большое спасибо за подготовку статьи Игорю Щегловитову, старшему инженеру по тестированию из Лаборатории Касперского, за помощь в написании данной статьи и ценный практический опыт. Остальные наши статьи по теме Azure можно найти по тегу azureweek, а также по тегу mstesting — статьи по тестированию.
Application Insights (в дальнейшем просто AI)– это механизм для сбора и анализа пользовательской телеметрии: различных счетчиков производительности, пользовательских событий (логов) и тп. На текущий момент он поддеживает не только ASP.NET приложения, но и другие, в том числе Java, IOS, JavaScript и др.

При подключении и настройки пакета AI он по умолчанию начинает собирать некоторые метрики, например для вебприложений это информация по запросам к веб серверу, а также различные серверные счетчики (например, время запроса, загрузка CPU). Помимо этого, AI имеет расширенное API, которое позволяет сохранять кастомные и бизнес-счетчики и логи.
Наша команда занимается разработкой облачных сервисов Azure. Логи сохраняются в Azure Storage, а счетчики производительности (серверные и перфоманс), читаются и анализируются в автоматическом режиме отдельным сервером мониторинга. Для логирования мы используем Serilog. В отличие от других логгеров, он (из коробки) позволяет писать структурные логи, выделяя отдельные свойства.
В настоящее время для множества популярых логгеров, таких как Serilog, log4net, Nlog существуют дополнения, которые позволяют перенаправлять логи в AI. Если вы пользуетесь данными логерами, а также имеете активную подписку Azure, то можете попробовать в бесплатном режиме возможности AI.Ниже пример настройки Serilog для сохранения логов в AI:
Через NuGet подключаем пакет Serilog.Sinks.ApplicationInsights:

(данный пакет автоматически подключит зависимый от него Application Insights API)
Далее, при конфигурировании логера Serilog, надо указать расширение ApplicationInsights, например, вот так:
Log.Logger = new LoggerConfiguration().WriteTo.ApplicationInsights(string.Empty).CreateLogger();В Azure портале предварительной версии создаем новый контейнер Application Insigts

После создания, на вкладке “Основное” копируем ключ инструментирования

Теперь в коде перед стартом приложения следует прописать:
TelemetryConfiguration.Active.InstrumentationKey = "";
Если же вы, например, используете логирование Nlog, то для перенапрвления логов в AI достаточно подключить пакет “Application Insights Nlog Target”
После этого в конфиге приложения автоматически появится секция:
Основная проблема при использовании NLog — он позволяет писать только строки, без настраиваемых свойств. Кроме использования логеров, пользовательские события в AI можно отправлять и через API, вот пример:
var telemetry = new TelemetryClient(); . try var eventTelemetry = new EventTelemetry(“log”); eventTelemetry. Properties[“CustomProperty”] = “test”; telemetry.Track(eventTelemetry); catch (Exception ex) var properties = new Dictionary CustomProperty ", “test”>>; telemetry.TrackException(ex, properties); >Теперь, после запуска приложения, логи будут перенаправляться в AI.
В отличие от лог-форвадеров, явное использование AI API позволяет писать телеметрию в разные контейнеры AI. Это удобно, когда у вас крупное приложение, состоящее из множества компонент: сервисов, веб интерфейса и тп. В этом случае при отправке телеметрии в AI, в экземплярах TelemetryClient вы можете явно задавать свойство InstrumentationKey.
Например, для вашего приложения вы создали три разных контейнера: один для анализа производительности, другой для логов, третий для мониторинга пользовательской активности. Что касается последнего, для анализа пользовательской активности UI приложений в AI API предусмотрен специальный метод TrackPageView. Вы можете сохранять данные, по каким страницам (вкладкам) заходил тот или иной пользователь (напомню, что сохранять события в AI можно и непосредственно в JavaScript-коде), на основе чего можно делать какие либо выводы.
Также добавлю, что вы можете настроить экспорт телеметрии AI для дальнейшего анализа в Azure Blobs. Удобный интерфейс поиска позволит вам находить нужные пользовательские события через Azure портал. На скриншоте видно, как в отображаются свойства одного из моих сохраненных логов.

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

Это очень удобно, т.к. позволяет отслеживать появление новых событий, например, каких-то новых исключений.
Сам интерфейс поиска логов очень простой, кроме стандартных фильтров, вы можете писать различные запросы к вашим логам (более подробно в документации).
Помимо логов, если у вас веб-приложение (например MVC Web API), то, подключив Nuget пакет Application Insights Web (без каких либо дополнительных настроек), в AI будет попадать информация по всем веб запросам.

Кроме этого, AI будет собирать зависимости, связанные с запросами. Например, при HTTP-запросе произошел вызов БД. В логах AI вы увидите данную связь, а также информацию по связанному запросу (URL, код возврата …).
Помимо этого, на вкладке “Серверы” будут доступны различные серверные счетчики производительности (CPU, Memory …). По умолчанию их не так много, но через ApplicationInsights.config вы можете добавить те счетчики, которые вам нужны.

Используя функциональность правил оповещения, вы можете создать правило, при наступлении которого на заданный e-mail будет приходить соответсвующая нотификация (например, превышено пороговое значение CPU).
В нашей команде мы разрабатываем асинхронные сервисы. Мы не использует транзакции в прямом смысле этого слова. Для обеспечения целостности данных при выполнения длительных БП, когда при вызове одного API метода состояние объектов БД меняется более чем 1 раз, мы используем очереди и Service Bus (для примера: API-метод провалидировал данные, изменил состояние объекта, отправил сообщение-команду в очередь и вернул результат вызываемой стороне; обработчик очереди поднял сообщение, выполнил какое то действие и положил новое сообщение в очередь и так далее).
Количество логов, которые создаются при одном таком БП, может достигать десятков записей. Для их связки мы используем специальный кастомный хедер conversationId. Он пробрасывается во всех командах и сообщениях при выполнении всего процесса. Данный хедер может быть задан вызывающей стороной. Он логируется как настраиваемое свойство. Таким образом указав значение conversationId в окне поиска, можно получить всю цепочку логов БП:

Кроме эксплуатации, такой подход очень полезен и при интеграционном тестировании.
Я занимаюсь разработкой интеграционных тестов для наших облачных сервисов. Автоматизированные тестовые сценарии живут в MTM, запускаются через специальный билд. Тесты в большинстве случаев клиент-серверные. По сообщению с ошибкой в информации упавшего теста далеко не всегда понятна причина падения. Часто для диагностики нужны именно серверные логи. Отдельно искать и смотреть логи по каждому тесту не удобно и занимает много времени. Здесь мне на помощь пришла такая функциональность, как кастомные диагностические адаптеры MSTest.Если вкратце, то под диагностическим адаптером в данном контексте понимается сборка, содержащая специальный класс, который наследуется от Microsoft.VisualStudio.TestTools.Execution.DataCollector. Если тест агент настроен на использование данного диагностического адаптера, то во время выполнения теста запускаются соответсвующие событие, логика которого определена в методах OnTestCaseStart, OnTestCaseEnd. В этих методах, у вас есть доступ к контексту теста, в том числе к его названию, состоянию и тп. Вот пример реализации диагностического адаптера:
[DataCollectorConfigurationEditor("configurationeditor://CompanyName/LogConfigEditor/4.0")] [DataCollectorTypeUri("datacollector://CompanyName/LogCollector/4.0")] [DataCollectorFriendlyName("log collector.")] public class LogCollecter : DataCollector < public override void Initialize( XmlElement configurationElement, DataCollectionEvents events, DataCollectionSink sink, DataCollectionLogger logger, DataCollectionEnvironmentContext environmentContext) < _stopwatch = new Stopwatch(); _dataEvents = events; // The test events _dataLogger = logger; // The error and warning log _dataSink = sink; Configuration.Init(configurationElement); events.TestCaseStart += OnTestCaseStart; events.TestCaseEnd += OnTestCaseEnd; >private void OnTestCaseStart(object sender, TestCaseEventArgs e) < _stopwatch.Start(); >private void OnTestCaseEnd(object sender, TestCaseEndEventArgs e) < Guard.CheckNotNull(e, "TestCaseFailedEventArgs is null"); var testCaseEndDate = DateTime.Now; if (_stopwatch.IsRunning) < _stopwatch.Stop(); >if (e.TestOutcome == TestOutcome.Failed) < //Здесь можно собрать логи и прикрепить их к результату теста. _dataSink.SendFileAsync(e.Context, Configuration.ZipFilePath, true); >> private Stopwatch _stopwatch; private DataCollectionEvents _dataEvents; private DataCollectionLogger _dataLogger; private DataCollectionSink _dataSink; >После реализации диагностического адаптера, сборку с ним надо подложить на все сервера с установленными тестовыми агентами (включая машину, на которой происходит конфигурирование настроек Lab Management), в папку %Microsoft Visual Studio 12.0\Common7\IDE\PrivateAssemblies\DataCollectors.
Далее запустить MTM, и поставить галочку напротив адаптера.

Более подробно про диагностические адапторы, формы их конфигурации и настройки читайте здесь msdn.microsoft.com/en-us/library/dd286727.aspx.
В каждом тестовом классе, в методе TestInitialize был добавлен код инициализации conversationId, который в последствии проставлялся в хедерах при создании wcf и http клиентов. Данный сonversationId шарился с диагностическим адаптером. И при возникновении ошибки в результатах теста появлялся информации о conversationId. А зная conversationId через AI можно очень просто посмотреть все серверные события, связанные с конкретным тестом.
Application Insights — это очень мощный инструмент, который просто позволяет подключить к вашему приложению сбор различной диагностической телеметрии, а также упростить ее дальнейший визуальный анализ используя дружественный интерфейс портала. Если у вас есть подписка Azure, то вы можете использовать AI в двух режимах Free и Premium. Основное ограничения Free режима – максимальное количество пользовательских события – 5 млн в месяц, и добавляемые данные хранятся в течении 7 дней, после чего удаляются. В Premium версии данные ограничения сняты. Бесплатно можно использовать в течении 30 дней.
Разные полезные ресурсы
- Попробовать Azure бесплатно на 30 дней!
- Изучить курсы виртуальной академии Microsoft по облачным и другим технологиям
- Загрузить бесплатную или пробную Visual Studio
- Центр разработки Microsoft Azure (azurehub.ru) – сценарии, руководства, примеры, рекомендации по разработке
- Twitter.com/windowsazure_ru — последние новости Microsoft Azure
- Сообщество Microsoft Azure на Facebook – эксперты, вопросы
- Стать разработчиком универсальных приложений Windows
Разработка следующего поколения с помощью Application Insights
За последние несколько лет сроки вывода программного обеспечения на рынок сократились кардинальным образом. Пройден путь от концепции водопада (waterfall) и гибкой разработки (agile) до современного непрерывного последовательного выпуска новых версий. Попутно нарастала потребность в более качественной и эффективной обратной связи. Самое главное — скорость реакции, или «отзывчивость» (responsiveness). Лицам, принимающим решения, требуются инструменты с интегрированными средствами анализа, и они должны мгновенно делать доступными актуальные данные своим группам.
Новый Microsoft Application Insights, объявленный при официальном выпуске Visual Studio 2013, — это набор сервисов, разработанных для ответа на ключевые вопросы, возникающие перед группами, ведущими разработки на основе современных концепций: является ли наше приложение доступным? Имеет ли оно нужные эксплуатационные качества? Предоставляем ли мы средства, необходимые нашим пользователям?
Application Insights не ограничивается только операциями. Чтобы исключить переадресацию откликов и ускорить прохождение информационного потока через группу, он интегрируется с инструментарием и процессами, уже применяемыми разработчиками: Visual Studio и Visual Studio Online. Это упрощает получение нужной информации всеми членами группы.
Application Insights рассчитан на работу с сервисами, встроенными в Microsoft .NET Framework, Java, Microsoft Azure Services, Web Sites, приложения Windows Store и приложения Windows Phone 8. Благодаря комплексному мониторингу вы получаете истинное, всестороннее представление о своем приложении, а не малые фрагменты изолированных данных.
Приступаем к работе с Application Insights
Начать работу с Application Insights очень просто. Чтобы добавить телеметрические средства Application Insights в веб-приложения и приложения Windows Phone или Windows Store, скачайте расширение Application Insights Tools for Visual Studio, которое вы найдете в Visual Studio Gallery (aka.ms/aivsix). Будущие версии Visual Studio не потребуют этого дополнительного этапа.
При создании новых проектов в Visual Studio 2013 выберите Add Application Insights to Project (рис. 1).
.png)
Рис. 1. Добавление Application Insights в новые проекты Visual Studio 2013
Чтобы использовать Application Insights с существующими приложениями, щелкните правой кнопкой мыши проект и выберите Add Applications Insights Telemetry to Project (рис. 2).
.png)
Рис. 2. Добавление Application Insights в существующий проект
После добавления Application Insights в вашем проекте появятся три новых узла для быстрого перехода к данным Availability Monitoring, Performance Monitoring и Usage Analytics в Visual Studio Online (рис. 3).
.png)
Рис. 3. В проекте после добавления Application Insights появляются новые узлы
Реализация мониторинга использования
Как только вы добавили Application Insights в новый или существующий проект, в вашем веб-приложении или приложении Windows Store/Windows Phone автоматически включается мониторинг использования. В случае более старых веб-приложений или приложений, создаваемых вне Visual Studio ту же функциональность можно добавить, вставив в приложение блок JavaScript-кода. Для этого щелкните Add Application (рис. 4) или перейдите в Control Panel и выберите Get configuration keys and downloads.
.png)
Рис. 4. Для более старых приложений выберите Add Application, чтобы добавить блок JavaScript-кода
Реализация мониторинга производительности
Несмотря на название, Performance Monitoring выдает уйму информации, а не только данные по производительности. Он уведомляет об исключениях, сообщает информацию о стеке вызовов, зависимостях, выделении памяти под объекты и даже о работе нижележащей инфраструктуры. Microsoft Monitoring Agent (MMA) также автоматически собирает журналы IntelliTrace по исключениям и медленно работающим вызовам в вашем коде. В большинстве случаев вы можете активировать мониторинг производительности простой установкой MMA, который вы найдете на aka.ms/aimma.
При установке MMA по умолчанию ведет мониторинг всех веб-приложений на вашем компьютере. Это, видимо, неплохо для компьютера разработки, но далеко не идеально для производственных серверов со множеством веб-приложений. MMA не должен вызывать падения производительности более чем на 5% при мониторинге приложения.
Чтобы включить MMA для приложений, добавленных позднее, активируйте мониторинг вручную командой Windows PowerShell:
Start-WebApplicationMonitoring -name "www.microsoft.com/games" -mode Monitor -outputchannel cloud
В будущих выпусках MMA и Visual Studio этот этап не потребуется.
Кроме того, можно активировать мониторинг производительности для приложений Java и Microsoft Azure. Самый простой способ — щелкнуть Add Application на портале Application Insights, как упоминалось в предыдущем разделе.
Реализация мониторинга доступности
Availability Monitoring работает для любого веб-приложения независимо от платформы, на которой оно выполняется. Приложение должно быть доступно только через Интернет. Вы можете проверить доступность и производительность веб-приложения из любой точки мира. Этот модуль также легко активировать.
Открыв меню Availability в Application Insights, вы получите приглашение указать URL вашего веб-приложения. Это приведет к созданию простого синтетического монитора на основе URL с единственным участком мониторинга.
Если вам нужно отслеживать более сложные транзакции, то, по-видимому, лучше написать в Visual Studio тест производительности веб-приложения. Синтетический монитор основан на той же функциональности записи, которая обычно применяется при нагрузочном тестировании веб-приложений. Это позволяет тестировать сложный набор действий. Чтобы создать многоэтапный синтетический монитор или с одним URL, щелкните зеленый значок Add new synthetic monitor и сконфигурируйте нужные параметры (рис. 5).
.png)
Рис. 5. Настройка параметров для нового синтетического монитора
Подготовка Application Insights к работе
За прошлый год почти сотня внутренних групп Microsoft и внешних отраслевых экспертов опробовали ранние версии Application Insights и сообщили о своих замечаниях в рамках официальной программы Technical Adoption Program. Отчасти результаты обратной связи даже удивили группу разработки, особенно сильная заинтересованность и активное участие владельцев продуктов и нетехнических членов групп.
Испытания ранних версий показали, что главная ценность Application Insights заключается в его способности ускорять цикл разработки, сводя все потоки аналитической информации в единое место в Visual Studio Online.
Замеры результатов кампаний в Web Одним из первых внешних заказчиков, изучавших Application Insights, был Wintellect — фирма, которая занимается консалтингом и обучением. Они хотели понять влияние описаний учебных курсов на их новый обучающий продукт WintellectNOW.
Используя отчет Page Views в Application Insights, разработчики в Wintellect смогли добавить к обработчику кнопки Sign Up Now примерно такую JavaScript-функцию:
function trackCourse() < window.__da.trackEvent("Course", window.location.hostname + window.location.pathname, , ); >Это позволяет им замерять и визуализировать, какие описания курсов наиболее эффективно привлекают новых подписчиков. Подробнее о реализации пользовательских событий в Application Insights см. aka.ms/aijs.
Замеры глобального веб-трафика Wintellect участвовал в конференции TechEd 2013 Europe в Мадриде. Бизнес-персоналу понадобился простой способ определить, расширит ли присутствие компании понимание ее предложений на европейском рынке.
Компания подготовила отчеты по использованию с помощью Application Insights и сравнила результаты за неделю до TechEd и за неделю после этой конференции. Трафик из Европы вырос на 7%, а из Испании он даже удвоился. Wintellect не потребовалось специально озадачивать своих разработчиков для замеры этих результатов, благодаря чему их технические группы смогли больше времени уделять своей основной работе.
Упрощение поиска ошибок, их исправления и выпуска продукта
Application Insights используется в самой Microsoft. Сервис-инженеры, обслуживающие основной веб-сайт Microsoft и его начальную страницу, ежедневно управляют более чем 400 приложениями. Их высшим приоритетом является уменьшение времени между обнаружением проблемы и ее исправлением. Настроив информационные панели (dashboards) и оповещения с помощью Application Insights, они получают в реальном времени уведомления о провале тестов доступности и событиях, связанных с производительностью, а также индекс деградации производительности. Это помогает инженерам решать проблемы до того, как клиенты заметят что-либо неладное.
Одна из группа настроила монитор доступности с максимально допустимым временем выполнения и оповещением, которое сообщает о превышении порогового значения. После этого инженеры смогли выявлять причину сбоя непосредственно из веб-представления или загружать его в Visual Studio и просматривать там в виде Web Test Result. Отчет Synthetic Monitors указывает, что эти тесты проваливались только после развертывания. Потом, после очередного развертывания они продолжили успешно выполняться. Примерно четыре часа спустя было внесено 11 изменений в конфигурацию. Они сумели связать проблему доступности напрямую с конкретным кодом и конфигурационными изменениями. Это помогло им сразу же диагностировать корневую причину этого события.
С помощью Application Insights вы можете оптимизировать свои приложения еще до того, как они начнут генерировать оповещения. На информационной панели имеются графики Active Alerts, Exception Events, Performance Events, Memory Events, Performance и Reliability. Все они наглядно визуализируют информацию для группы инженеров, желающих улучшить свои приложения.
Выбрав любую из этих плиток, вы перейдете к данным, которые с наибольшей вероятностью связаны с определенным действием. Например, щелкнув график Performance в информационной панели Application Insights (рис. 6), вы попадете на страницу Performance (рис. 7). В этом примере видна четкая корреляция между зависимостями, веб-сервисом и показателями времени ответа.
.png)
Рис. 6. Информационная панель Application Insights
.png)
Рис. 7. Страница Performance в Application Insights
Чтобы перейти на страницу Events, щелкните плитку Memory, Exception или Performance Events. На этой странице можно фильтровать, выбирать, открывать сеанс диагностики памяти, запускать сеанс отладки IntelliTrace или просматривать набор изменений, вызвавших данное событие в Visual Studio.
Заключение
Это лишь несколько примеров того, как группы разработки используют Application Insights для более тесного взаимодействия со своими группами эксплуатации и тем самым для ускорения поставок более качественного ПО. Вы можете обращаться к Application Insights через Visual Studio Online (visualstudio.com).
В будущей статье я расскажу об интеграции нагрузочного тестирования в облаке с Application Insights. Подробнее о создании веб-тестов см. по ссылке bit.ly/1im10YI, а подробнее о мониторинге доступности с помощью Application Insights — по ссылке bit.ly/1gxgLYk.
Благодаря такому простому добавлению средств мониторинга в код, тесной интеграции с Visual Studio Online и экономии времени вы определенно захотите проверить эти сценарии и понять, чего вы сможете добиться, используя Application Insights.
Application Insights. Про аналитику и другие новые инструменты
Около года назад я написал небольшую статью про использование превью версии Azure сервиса диагностики и мониторинга Application Insights (AI). С тех пор в AI появилось очень много интересных дополнений. И вот, чуть больше месяца назад, AI наконец получил General Availability.

В этой статье я проведу еще один обзор AI, с учетом новых дополнений, и поделюсь опытом его использования на реальных проектах.
Начну с того, что я работаю в Лаборатории Касперского, в команде, которая занимается разработкой .NET сервисов. В основном в качестве хостинга мы используем облачные платформы Azure и Amazon. Наши сервисы обрабатывают довольно высокую нагрузку от миллионов пользователей и обеспечивают высокую производительность. Нам важно поддерживать хорошую репутацию сервисов, для достижения которой надо очень быстро реагировать на проблемы и находить узкие места, которые могут повлиять на производительность. Подобные проблемы могут возникать при генерации аномально высокой нагрузки или же неспецифичной пользовательской активности, различных отказах инфраструктурных (например, БД) или внешних сервисов, также никто не отменял и банальные баги в логике сервисов.
Мы пробовали использовать различные системы диагностики, но на данный момент AI показал себя как наиболее простой и гибкий инструмент для сбора и анализа телеметрии.
AI – это кроссплатформенный инструмент для сбора и визуализации диагностической телеметрии. Если у вас, например, .NET приложение, то для подключения AI вам достаточно создать контейнер AI на портале Microsoft Azure, после этого подключить к приложению nugget пакет ApplicationInsigts.
Буквально из коробки AI начнет собирать информацию по основным счетчикам производительности машины (память, процессор), на которой работает ваше приложение.
Подобную серверную телеметрию можно начать собирать и без модификации кода приложения: для этого достаточно на машину установить специальный диагностический агент. Cписок собираемых счетчиков может быть изменён правкой файла ApplicationInsights.config.

Следующий интересный момент — это “мониторинг зависимостей”. AI отслеживает все исходящие внешние HTTP вызовы вашего приложения. Под внешними вызовами или зависимостям понимаются обращения вашего приложения к базе данных и другим third party сервисам. Если ваше приложение представляет собой сервис, хостящийся в инфраструктуре IIS, то AI будет перехватывать телеметрию по всем запросам к вашим сервисам, включая все внешние запросы (благодаря пробросу дополнительной диагностической информации через CallContext потока). То есть благодаря этому вы сможете найти интересующий вас запрос, а также посмотреть все его зависимости. Application Map позволяет вам посмотреть полную карту по внешним зависимостям вашего приложения.

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

Вне зависимости от платформы вы можете подключить к вашему приложению расширяемое Application Insights API, которое позволит вам сохранять произвольную телеметрию. Это могут быть логи или какие-нибудь кастомные счетчики производительности.
Например, мы пишем в AI агрегированную информацию по всем основным методам наших сервисов, такую как количество вызовов, процент ошибок и время выполнения операций. Кроме этого мы сохраняем информацию по критически важным областям приложения, таким как производительность и доступность внешних сервисов, размеры очередей сообщений (Azure Queue, ServiceBus), пропускную способность их обработки и т.п.
Мониторинг зависимостей, о котором я писал ранее, довольно мощный инструмент, но на текущий момент он способен автоматически перехватывать только все исходящие HTTP запросы, поэтому мы вынуждены самостоятельность писать телеметрию по зависимостям, которые вызывались через другой транспорт. В нашем случае это Azure ServiceBus и RMQ, которые работают по кастомным протоколам.
Телеметрия, которую вы собираете не обязательно должна иметь плоскую структуру (counterName-counterValue). Она может содержать многоуровневую структуру с различной вложенностью. Это достигается за счет использование динамического типа данных.
Пример структуры сохраняемой метрики
< "metric": [ ], "context": < . "custom": < "dimensions": [ < "ProcessId": "4068" >], "metrics": [ < "dispatchRate": < "value": 0.001295, "count": 1.0, "min": 0.001295, "max": 0.001295, "stdDev": 0.0, "sampledValue": 0.001295, "sum": 0.001295 >>, "durationMetric": < "name": "contoso.org", "type": "Aggregation", "value": 468.71603053650279, "count": 1.0, "min": 468.71603053650279, "max": 468.71603053650279, "stdDev": 0.0, "sampledValue": 468.71603053650279 >> ] > >AI позволял писать подобную сложную телеметрию и год назад, но ее практически нельзя было использовать, т.к. в то время графики можно было строились только по простым метрикам. Единственным вариантом использования этой телеметрии были кастомные запросы, которые могли оценивать только частоту возникновения. Теперь же появился очень мощный инструмент Analytics.
Данный инструмент позволяет вам писать различные запросы к вашей телеметрии, обращаясь c помощью специального (SQL-подобного) языка к свойствам произвольных событий.
Для примера синтаксиса, можно посмотреть на запрос, который выводит 10 любых успешных запросов к вашему веб приложения за последние 10 минут:
requests | where success == "True" and timestapm > ago(10m) | take 10В комплекте данного языка имеется множество готовых операторов для анализа (агрегатные функции и соединения, поиск перцентилей, медиан, построение отчетов и т.п.) и визуализации телеметрии в виде графиков.


Подобная информация может быть использована как для анализа производительности, так и для получения аналитики при решении некоторых бизнес-задач. Например, если вы разрабатываете некоторый онлайн-магазин, использование аналитики AI, практически из коробки, может дать вам представление о предпочтениях клиентов в зависимости от их географического расположения.
В состав AI входит компонент ProactiveDetection, который на основе алгоритмов машинного обучения способен определять аномалии в собираемой телеметрии. Например, количество запросов к вашим сервисам резко возросло или упало, увеличилось количество ошибок или суммарная длительность некоторых операций.

Вы также можете настроить алерты на нужные вам счетчики телеметрии.
AI сохраняет телеметрию в течении 30 дней. Если вам этого недостаточно, то вы можете воспользоваться функцией Continues Export, которая позволит вам экспортировать телеметрию в Azure Blobs. Использование Azure Stream Analytics при поиске в экспортируемой телеметрии интересующих вас закономерностей является хорошей практикой.
Power BI мощный инструмент для визуализации и анализа данных. Вы можете подключить к нему специальный Application Insights Power BI adapter и автоматически переправлять некоторую диагностику в Power BI. Для этого достаточно построить в Analytics нужный запрос и нажать кнопку экспорта. В результате этого вы получите небольшой M-скрипт, который будет использоваться в качестве источника данных AI.


Иногда удобно понаблюдать в реальном времени за здоровьем системы. Особенно это актуально после установки обновлений. Совсем недавно в AI появился инструмент Live Metrics Stream, который дает такую возможность.

AI может также выступать и в качестве сервиса мониторинга. Вы можете импортировать тесты из Visual Studio, проверяющие работоспособность вашего приложения. Либо вы можете прямо из портала AI создать набор проверок для геораспределенной валидации доступности интересующих вас конечных точек. AI будет выполнять проверки по расписанию и выводить результаты на соответствующий график.
Существует также специальный плагин, который позволяет отображать телеметрию c отлаживаемого в дабеге приложения прямо в Visual Studio.
Это далеко не все инструменты. Рекомендуется также использовать AI и для анализа пользовательской телеметрии.
На текущий момент AI тарифицируется по количеству так называемых точек сохранения. Миллион которых стоит около 100 р. Одна точка сохранения соответствует одному диагностическому событию. Т.к. сам AI клиент не агрегирует телеметрию, то целесообразно приложению самому заботиться об агрегации.
Этой рекомендацией стоит руководствоваться и исходя из того, что троттлинг AI не даст вам сохранять более 300 диагностических событий в секунду. С зависимостями все сложнее.
Например, в наших сервисах БД вызывается примерно 10 тысяч раз в секунду. AI же сохраняет общий rate запросов, но детальная информация (длительность, URL, код возврата и т.п.) сохранится только по нескольким сотням запросов, данные по остальным запросам теряются. Несмотря на это, нам пока хватает данных для локализации возникающих проблем.
Благодаря Analytics и другим новым функциям, AI уже сейчас помог определить несколько серьезных проблем производительности наших сервисов.
Продолжаем следить за дальнейшим развитием данного инструмента.
- Visual Studio
- Microsoft Azure