Тема статьи весьма интересная – диагностика и мониторинг приложений. Всегда хочется иметь инструмент, который будет (желательно бесплатно, но если нет – то с ценами приемлемыми):
- Диагностировать приложение, находящееся в продакшене, и экосистему вокруг него – собирать статистику об исключениях, аптайм, состояние веб-сервера, время ответа, и так далее.
- Показывать тренды, – как ведут себя пользователи, куда они ходят, что делают, сколько проводят времени, возвращаются ли.
Было много прекрасных средств, но я не нашел объединившее бы все функции, и желательно интегрировавшее весь вышеописанный опыт в экосистему, которая уже есть – мою Visual Studio. Если вам интересен такой новый инструмент – Application Insights – с помощью которого можно не только смотреть, но и загружать, например, файлы для IntelliTrace – велком под кат. Уточняю – это не мегагайд о том, «как сделать», это обзор, поэтому будет много ярких картинок.
Увеличить
Итак, мы понимаем, что «да, у нас есть виртуальная машина, мы с ней можем делать все», и «да, это PaaS, и он нужен для того, чтобы нам не надо было делать всего с виртуальной машиной, а раз – и выложили приложение». Но что происходит, когда мы, используя любой из подходов, всё-таки выкладываем свое приложение? Дальше начинается тестирование и отлов багов. Идеального софта не бывает – даже если мы вроде бы предусмотрели всё, мы можем забыть о какой-то мелочи в окружении приложения – и получить интересный баг. Или баг из-за поведения соседнего компонента (или, опять же, экосистемы), которое наблюдалось ровно десять секунд. Как отлавливать всё это? Конечно, есть множество инструментов – Intellitrace, счетчики производительности, тесты, многое другое. Но если мы будем иметь инструмент, который объединяет все вышеперечисленное?
Инструмент называется Application Insights. Это компонент Visual Studio Online, и он бесплатен для аккаунтов Visual Studio Online ( подробнее про VSO), в которых до 5 членов команды. Внедрить его можно непосредственно в приложение (например, Cloud Service Windows Azure), установить его агент на сервере (Windows Server) и сказать, чтобы он начал мониторить все сайты и приложения, которые есть на этом сервере, либо связать его с System Center Operation Manager (что есть самый сложный сценарий, так как это уже, мягко говоря, уровень выше, нежели «просто инструмент»).
Для того, чтобы использовать AI, нам нужно:
- Аккаунт Visual Studio Online (он бесплатен, и простого Basic хватит – аккаунт нужен для использования AI) – бесплатно зарегистрировать аккаунт можно здесь.
- Подписка Windows Azure (можно и без подписки, но если не хочется экспериментировать с боевым сервером, то можно поднять виртуальную машину с веб-сервером – для тестов хватит бесплатного триала).
- Виртуальная машина с Visual Studio 2013 ALM (удобства ради – чтобы не экспериментировать на локальной машине).
- Visual Studio 2013 Ultimate. Скачать Visual Studio 2013.
- Веб-проект (проекты), которые уже работают на IIS либо которые можно развернуть на веб-сервер.
Что будем делать первым? Настраивать инфраструктуру. Дальше – смотреть, что может делать AI.
Настройка инфраструктуры
Настроим базовый элемент нашего опыта использования AI –ВМ Visual Studio 2013 ALM. Данная ВМ необязательна и, если у вас есть Visual Studio Ultimate 2013, то можно пропустить этот пункт. Если же нет, то процесс получения данной ВМ описан здесь.
ВМ будет нужен внешний интернет, поэтому, если вы используете Hyper-V, то необходимо будет создать виртуальный свич.
Войдем на ВМ под учетной записью Brian Keller (VSALM\Brian). Пароль: P2ssw0rd. Запустим Visual Studio Ultimate 2013, и введем учетные данные для доступа к Visual Studio Online, который должен был быть зарегистрирован еще до пункта «Что будем делать?».
Увеличить
Создадим виртуальную машину в Azure. Если у вас уже есть веб-сервер с работающими приложениями – можно работать там, действия ничем не отличаются.
Увеличить
Увеличить
Увеличить
Увеличить
Подключитесь к ВМ, нажав кнопку Connect.
Увеличить
Теперь активируем AI в Visual Studio Online. Для этого перейдем на https://account.visualstudio.com/ ([account] – имя вашего аккаунта) и нажмем на Try Application Insights. Если спросит код на инвайт, используем VSAppInsights6225162023.
После перехода на страницу AI мы увидим инструкции. Первым делом мы должны загрузить Microsoft Monitoring Agent (MMA) и установить его на сервере. Этот агент включит мониторинг приложений на сервере. Его можно загрузить либо на странице с инструкциями либо по ссылке. Во время установки единственными нестандартными вопросами являются режим подключения агента и ключ. Его можно установить и подключить к VSO, к SCOM, либо установить без подключения. Нам будет достаточно подключения к VSO.
Скопируем с портала AI значения Account ID и Instrumentation Key, вставим в соответствующие поля на странице настройки подключения к VSO, и нажмем Validate Connection (это обязательно). Установим опцию для немедленного старта мониторинга всех работающих на сервере приложений после установки агента. После установки агента запустится командное окно, в котором будет доложено о начале мониторинга приложений.
Увеличить
Для интереса можно поизучать Monitoring Agent PowerShell Prompt, который устанавливается вместе с агентом – это набор командлетов, которыми можно пользоваться для, например, получения списка отслеживаемых приложений и их статус (командлет “Get-WebApplicationMonitoringStatus”). Их мы рассматривать пока не будем.
Увеличить
Возвращаемся на портал AI, на котором появится основная функциональность AI в виде набора вкладок: Overview, Availability, Performance, Usage, Diagnostics. Если их нет, нужно подождать – данные еще не подгрузились.
Мы настроили инфраструктуру. Этого достаточно (особенно если вы решили уже в Production отправиться) для поступления и анализа данных. Если нет – можно использовать любой механизм нагрузочного тестирования для имитации нагрузки. Многое зависит от размера нагрузки – например, если тестируется бэкенд, совершенно необязательно, что при обработке 1000 строк из документа может возникнуть проблема. А вы планировали, что в документе будет миллиард строк? Это важно. AI покажет, если потребляется слишком много ресурсов, и это будет ценным фактором дальнейшего планирования и хорошо, если мы это увидим на ранних этапах разработки.
Мониторинг и профайлинг с помощью Application Insights — обзор
Вернемся немного назад и вспомним, что такое AI. AI – это подфункциональность Visual Studio Online, с помощью которой любой член команды может в реальном режиме мониторить доступность, производительность и различные аспекты использования приложений/сервисов. Ниже несколько замечаний по функциям AI:
Availability:
- Availability дает не только статистику о том, сколько запросов было сделано и об их времени выполнения, но также большое количество диагностических данных, которые можно открыть в Visual Studio и провести анализ, чтобы увеличить показатели Availability. AI может мониторить только те сайты/приложения, которые доступны публично по HTTP.
Usage:
- Данные по использованию делятся в AI на данные о действиях пользователя и действия приложения.
- Возможно использование из кода с помощью Telemetry SDK для веб-страниц (JS), сервисов (.NET), Windows Store (JS/.NET) и Windows Phone 8 (.NET).
- Для каждого приложения можно определить такие метрики, как количество просмотров страниц, событий и ошибок (и данные о них), а также всю типичную аналитику – разброс по ОС, разрешениям экранов, браузеров, языков и так далее.
Performance и Diagnostics
- Производительность и диагностику можно проводить для .NET и Java
Availability
Начнем со вкладки Availability. Availability – это мера, с помощью которой можно увидеть доступность объекта за определенный промежуток времени с разных сторон.
Перейдем на вкладку Availability.
Availability можно рассматривать с разных сторон, и каждый аналитик может иметь собственные представления об этом. Сразу после создания проекта и подсоединения его к AI вкладка Availability будет предлагать создать Synthetic Monitor, или то, как хочет пользователь мониторить доступность проекта. Создадим самый простой – URL Ping Test, его предлагается создать сразу же.
Увеличить
После создания монитора нажмите на появившуюся зеленую кнопку, чтобы перейти на отчет.
По умолчанию доступен отчет за последние 24 часа. Сразу после создания мы не найдем ничего интересного – для того, чтобы увидеть репрезентативную выборку, нужно подождать и нагрузить проект. Далее на скриншотах будут использоваться несколько проектов, которые находятся в продакшене.
Нижний график отображает 24 часа постоянно – для того, чтобы в любой момент можно было посмотреть данные за нужный период, выделив его. После выделения периода графики выше отреагируют с минимальной задержкой.
Увеличить
Наведя на пики, можно увидеть результаты выполнения монитора. У нас был простой монитор с пингом, поэтому результат будет либо цифрой, либо символом крестика – значит, не дошел.
Увеличить
Увеличить
Мониторы создаются нажатием на соответствующую кнопку-плюс. Доступно два варианта – NewSingleURLTest и NewMultistepWebTest. Single URL Test нужен для слежения за одной страницей, в Multistep Web Test можно загрузить уже настроенный Web Test из Visual Studio. С Multistep Web Test разберемся в одной из следующих статей, Single URL Test умещается в пределах одного диалога.
Для просмотра подробной информации по конкретному монитору нажмем на его имя. Здесь — информация о конкретном мониторе, выполнении его работы, географических локациях и так далее. Эта информация – великолепный источник, который может натолкнуть на мысль о том, что нужно, например, добавить серверов, обслуживающих конкретный регион, либо переработать логику.
Увеличить
Но что это за ошибки? Коллеги из Японии ждали двадцать секунд, потом что-то произошло. Нажмем на этот крестик, чтобы понять, что.
Появится окно с информацией об этом запросе.
Увеличить
Теперь понятно – ошибка по тайм-ауту. Можем двигаться дальше и загрузить файл Web Test Result в Visual Studio. Сложные тесты – Multiple – дают возможность выполнять юнит-тесты конкретных страниц и, например, добавлять тестовые сущности. Если в таком процессе произойдет ошибка – она опять же отразится на графике и можно будет посмотреть, где вылетело исключение.
С Availability все (большую тему про Multiple Web Test рассмотрим позже). Перейдем ко вкладке Performance.