Application insights tools for visual studio 2015 что это
За последние несколько лет сроки вывода программного обеспечения на рынок сократились кардинальным образом. Пройден путь от концепции водопада (waterfall) и гибкой разработки (agile) до современного непрерывного последовательного выпуска новых версий. Попутно нарастала потребность в более качественной и эффективной обратной связи. Самое главное — скорость реакции, или «отзывчивость» (responsiveness). Лицам, принимающим решения, требуются инструменты с интегрированными средствами анализа, и они должны мгновенно делать доступными актуальные данные своим группам.
Новый Microsoft Application Insights, объявленный при официальном выпуске Visual Studio 2013, — это набор сервисов, разработанных для ответа на ключевые вопросы, возникающие перед группами, ведущими разработки на основе современных концепций: является ли наше приложение доступным? Имеет ли оно нужные эксплуатационные качества? Предоставляем ли мы средства, необходимые нашим пользователям?
Application Insights не ограничивается только операциями. Чтобы исключить переадресацию откликов и ускорить прохождение информационного потока через группу, он интегрируется с инструментарием и процессами, уже применяемыми разработчиками: Visual Studio и Visual Studio Online. Это упрощает получение нужной информации всеми членами группы.
Приступаем к работе с 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).
Рис. 1. Добавление Application Insights в новые проекты Visual Studio 2013
Чтобы использовать Application Insights с существующими приложениями, щелкните правой кнопкой мыши проект и выберите Add Applications Insights Telemetry to Project (рис. 2).
Рис. 2. Добавление Application Insights в существующий проект
После добавления Application Insights в вашем проекте появятся три новых узла для быстрого перехода к данным Availability Monitoring, Performance Monitoring и Usage Analytics в Visual Studio Online (рис. 3).
Рис. 3. В проекте после добавления Application Insights появляются новые узлы
Реализация мониторинга использования
Как только вы добавили Application Insights в новый или существующий проект, в вашем веб-приложении или приложении Windows Store/Windows Phone автоматически включается мониторинг использования. В случае более старых веб-приложений или приложений, создаваемых вне Visual Studio ту же функциональность можно добавить, вставив в приложение блок JavaScript-кода. Для этого щелкните Add Application (рис. 4) или перейдите в Control Panel и выберите Get configuration keys and downloads.
Рис. 4. Для более старых приложений выберите Add Application, чтобы добавить блок JavaScript-кода
Реализация мониторинга производительности
Несмотря на название, Performance Monitoring выдает уйму информации, а не только данные по производительности. Он уведомляет об исключениях, сообщает информацию о стеке вызовов, зависимостях, выделении памяти под объекты и даже о работе нижележащей инфраструктуры. Microsoft Monitoring Agent (MMA) также автоматически собирает журналы IntelliTrace по исключениям и медленно работающим вызовам в вашем коде. В большинстве случаев вы можете активировать мониторинг производительности простой установкой MMA, который вы найдете на aka.ms/aimma.
При установке MMA по умолчанию ведет мониторинг всех веб-приложений на вашем компьютере. Это, видимо, неплохо для компьютера разработки, но далеко не идеально для производственных серверов со множеством веб-приложений. MMA не должен вызывать падения производительности более чем на 5% при мониторинге приложения.
Чтобы включить MMA для приложений, добавленных позднее, активируйте мониторинг вручную командой Windows PowerShell:
В будущих выпусках 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).
Рис. 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-функцию:
Это позволяет им замерять и визуализировать, какие описания курсов наиболее эффективно привлекают новых подписчиков. Подробнее о реализации пользовательских событий в 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). В этом примере видна четкая корреляция между зависимостями, веб-сервисом и показателями времени ответа.
Рис. 6. Информационная панель Application Insights
Чтобы перейти на страницу Events, щелкните плитку Memory, Exception или Performance Events. На этой странице можно фильтровать, выбирать, открывать сеанс диагностики памяти, запускать сеанс отладки IntelliTrace или просматривать набор изменений, вызвавших данное событие в Visual Studio.
Заключение
В будущей статье я расскажу об интеграции нагрузочного тестирования в облаке с Application Insights. Подробнее о создании веб-тестов см. по ссылке bit.ly/1im10YI, а подробнее о мониторинге доступности с помощью Application Insights — по ссылке bit.ly/1gxgLYk.
Благодаря такому простому добавлению средств мониторинга в код, тесной интеграции с Visual Studio Online и экономии времени вы определенно захотите проверить эти сценарии и понять, чего вы сможете добиться, используя Application Insights.
При подключении и настройки пакета 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, например, вот так:
В Azure портале предварительной версии создаем новый контейнер Application Insigts
После создания, на вкладке “Основное” копируем ключ инструментирования
Теперь в коде перед стартом приложения следует прописать:
Если же вы, например, используете логирование Nlog, то для перенапрвления логов в AI достаточно подключить пакет “Application Insights Nlog Target”
После этого в конфиге приложения автоматически появится секция:
Основная проблема при использовании NLog — он позволяет писать только строки, без настраиваемых свойств. Кроме использования логеров, пользовательские события в AI можно отправлять и через API, вот пример:
Теперь, после запуска приложения, логи будут перенаправляться в 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 будет попадать информация по всем веб запросам.
Помимо этого, на вкладке “Серверы” будут доступны различные серверные счетчики производительности (CPU, Memory …). По умолчанию их не так много, но через ApplicationInsights.config вы можете добавить те счетчики, которые вам нужны.
Используя функциональность правил оповещения, вы можете создать правило, при наступлении которого на заданный e-mail будет приходить соответсвующая нотификация (например, превышено пороговое значение CPU).
Если вкратце, то под диагностическим адаптером в данном контексте понимается сборка, содержащая специальный класс, который наследуется от Microsoft.VisualStudio.TestTools.Execution.DataCollector. Если тест агент настроен на использование данного диагностического адаптера, то во время выполнения теста запускаются соответсвующие событие, логика которого определена в методах OnTestCaseStart, OnTestCaseEnd. В этих методах, у вас есть доступ к контексту теста, в том числе к его названию, состоянию и тп. Вот пример реализации диагностического адаптера:
После реализации диагностического адаптера, сборку с ним надо подложить на все сервера с установленными тестовыми агентами (включая машину, на которой происходит конфигурирование настроек Lab Management), в папку %Microsoft Visual Studio 12.0\Common7\IDE\PrivateAssemblies\DataCollectors.
Далее запустить MTM, и поставить галочку напротив адаптера.
Всем привет. В данной статье хочу познакомить вас с новым и интересным механизмом для анализа поведения пользователей в приложении. Но прежде чем мы окунемся в технические детали, давайте обрисуем проблематику.
Современный мир состоит из 99% разбалованных потребителей и 1% разработчиков, которые днем и ночью пашут на удовлетворение потребностей этих самых разбалованных потребителей. Нет, ну чего им не хватает? Видите ли, сайт загружается долго. Ну или подумаешь, отвалился на час DNS, и никто не может зайти на сайт. Или меню слишком сложное. Вот все им не нравится. А представьте: во всем интернете есть только один сайт. И этот сайт — ваш:) И никаких проблем: не нравится меню? Долго загружается? Нуу. попробуйте найти другой сайт.
В современном мире в условиях жесткой конкуренции каждый продукт выживает как может (или умирает, тоже как может: бывает быстро и без мучений, а бывает долго и продолжительно). И если подумать о том, у кого шансов выжить больше, — оказывается, у тех, кто предоставляет более качественный сервис. А что именно мы подразумеваем под понятием качественный сервис? Составляющих много. Это отказоустойчивость, скорость и непрерывность работы, удобство в использовании, причем не удобство для человека, который написал приложение, а для человека, который пользуется приложением, ну и, естественно, функционал приложения.
Для решения этих проблем каждый разработчик применяет разные тактики: специальный раздел в приложении для сбора отзывов, отправка отчетов об ошибках, тестирование новой версии на фокусных группах (кстати их формирование — это отдельная наука) и прочее.
Я же хотел рассказать о новом сервисе от Visual Studio, который позволяет снимать телеметрические данные из вашего приложения. Сервис называется Application Insights. Сервис сейчас в Preview, но в Microsoft используется уже немало времени.
Что это такое
Внимание! То, что будет написано далее может перевернуть ваше мировоззрение и привести к психическому расстройству. Я настоятельно не рекомендую читать далее эту статью людям младше 18 лет, с неустойчивой психикой, сторонников теории заговора, людей типа «Big brother watching you», «Microsoft — это империя зла» и «я храню код на флешке под паролем, шоб нэ вкралы».
Это была моя шутка, а на самом деле все так: в инструмент Visual Studio встроен механизм отправки данных о пользовательской активности. При этом объем этих данных реально огромен. За секунду, при нормальной работе в Visual Studio, может отправляться порядка телеметрических нотификаций.
Я достаточно часто читаю презентации об инструменте Visual Studio в разных компаниях, и после таких слов глаза разработчиков и особенно безопасников становятся примерно такими:
Отойдя от шока, мне сразу задают вопрос: как отключить. Ответ: никак.
Причем то, что эти данные действительно отправляются, можно увидеть в Fiddler после запуска Visual Studio:
После этого глаза становятся вот такие:
Но не стоит паниковать. Во-первых, если вы думаете, что другие крупные вендоры поступают по-иному — ошибаетесь:). Ну а во-вторых, давайте всё-таки разберемся, о каких именно телеметрических данных идет речь.
1. Отчеты об ошибках и деградации производительности;
2. Пользовательская активность в приложении.
Последний пункт хочу раскрыть детальнее: речь не идет о том, что Microsoft, используя Visual Studio, передает ваш код на свои серверы для того, чтоб это бесценное творение потом продать под видом своего приложения. Есть люди, которые на полном серьезе так и думают. Я себе это представляю: сидит миллион индусов, или китайцев и пересматривают ваш код. При этом оценивают перспективу его продать. Чесслово, даже весело :)
Речь идет о передаче информации о вызовах меню, нажатиях на кнопки (не клавиатуры, а внутри инструмента), запуск каких-то внутренних процессов. С помощью этой информации в привязке ко времени и IP адресу можно смоделировать ваше поведение в инструменте. На базе такой статистики, получаемой автоматом от множества пользователей, можно легко понять:
— Какой стандартный функционал используется чаще всего. Это нужно для того, чтоб обратить внимание на его развитие в последующих версиях. Возможно, вывести горячую кнопку вызова этого функционала на видное место;
— Как приживается новый функционал;
— Как много пользователь тратит времени на то, чтобы добраться до нужного его функционала
Имея эту информацию Microsoft может фокусировать свои усилия на улучшении инструмента в тех его местах, где это более важно для пользователей, а не для разработчиков инструмента Visual Studio.
Как использовать
В Visual Studio 2015 при создании, например, нового веб проекта вы можете увидеть галочку «Add application insights to project»:
В универсальных приложениях под Windows это выглядит так:
Важно иметь активированную Azure подписку. Для теста, можно взять бесплатный пробный период на 30 дней.
Но вернемся к веб проекту. Если галочку не убрали, то после создания проекта в списке подключенных библиотек вы увидите:
В случае, если у вас уже есть веб проект без Application Insights, то его можно добавить следующим образом:
Зайти на портал управления Azure и добавить новый Application Insights ресурс:
В проекте Visual Studio, используя Nuget, проинсталлировать SDK:
В проекте, в файлике ApplicationInsights.config вставить ключ в строку:
<InstrumentationKey> the instrumentation key you copied </InstrumentationKey>
Для сбора информации из браузера нужно на портале взять сгенерированный Javascript и добавить на каждую страницу в теге перед всеми остальными скриптами (или в _Layout.cshtml в проекте MVC):
Теперь можно запустить проект. Если запустились в режиме Debug, то диагностическая тула в Visual Studio 2015 покажет, какие данные отправляются на сервер:
На портале Azure, открыв ваш Application Insights ресурс, через какое-то время вы увидите графики активности ваших пользователей:
При этом графики интерактивные и можно провалится до деталей, например, более детально посмотреть на Server Response:
Или что происходит на клиентском браузере:
Так же можно отловить медленные запросы в БД:
В дополнение к этому скажу, что можно мониторить разные версии приложений, собирать IIS Performance Counters, следить за доступностью из разных точек мира и многое другое. Я уже не говорю о том, что эти данные можно загнать в сервис Azure Machine Learning и строить рекомендательную или предиктивную аналитику.
Более детально о сервисе и примеры настроек можно посмотреть в официальной документации. Также есть возможность попробовать сервис за 60 секунд. Сам инструмент Visual Studio можно скачать бесплатно.
Введение
В предыдущем посте мы рассмотрели создание инфраструктуры для облачного нагрузочного тестирования на виртуальных машинах Microsoft Azure. Теперь мы рассмотрим инструмент для нагрузочного тестирования — Visual Studio Online – и сравним его с ручным подходом.
Нагрузочное тестирование с использованием Visual Studio Online позволяет автоматически создавать и конфигурировать всю необходимую инфраструктуру в облаке — разворачивая контроллер и необходимое количество агентов с определенными настройками. Результаты прогона того или иного теста всегда остаются в облачной базе VS Online, и к ним в любой момент можно получить доступ.
Раньше я не использовал данный подход по 2м основным причинам:
— инфраструктура работала нестабильно и часто падала
— не было возможности снятия счетчиков производительности с нагружаемой системы,
т.о. результаты тестирования ограничивались данными по пропускной способности.
В Update 3 на Visual Studio 2013 появилась возможность прямо в процессе нагрузочного тестирования динамически подгружать необходимые счетчики производительности из телеметрии Application Insights (подробнее можно прочитать здесь, однако с только для общего образования – со времени написания статьи произошло много изменений).
Мы рассмотрим настройку Application Insights для простого WCF сервиса Calculator (из предыдущей статьи), а также протестируем его на нагрузку с помощью Visual Studio Online.
Также мы сравним новый подход с описанным в прошлом посте.
Нам понадобится:
— Visual Studio Ultimate 2013 (Update 4),
— Аккаунт Visual Studio Online
— Одна виртуальная машина в Microsoft Azure.
— Тестовые данные
Загрузить проект, использующийся в статье.
(теперь хостом для WCF сервиса будет не Windows Service, a IIS).
Конфигурирование окружения
После успешной настройки инфраструктуры следует задеплоить наш WCF сервис.
Для этого:
- Из папки с тестовыми данными, скопировать папку Service в произвольную директорию на виртуальной машине.
- Открывать консоль управления IIS (Server Manager=> Tools=> Internet Information Service (IIS))
- Создать внутри дефолтового веб сайта новый Application с сервисом калькулятора
Должна открыться страничка, содержащая ссылку для генерации wsdl
Настройка Application Insights
После успешной настройки виртуальной машины через портал Azure надо создать новый аккаунт Visual Studio Online (либо использовать уже созданный).
Далее перейти в меню управления VS Online в браузере и кликнуть по ссылке Application Insights.
По умолчанию, если в Application Insights не добавлено ни одного приложения, то откроется страничка настройки простого теста, проверяющего доступность некого URL адреса. Это можно пропустить и нажать ссылку I want to monitor something else.
После этого для дальнейшей настройки надо будете ответить на несколько простых вопросов (см. скрин)
Далее нажать Click here to show instructions.
На следующей странице надо будет указать произвольное имя приложения и нажать Create (если быть точнее, то имя виртуального контейнера Application Insights, где будет храниться диагностическая информация).
После этого портал автоматически сгенерирует ApplicationInsights.config (конфиг файл с персональными настройками диагностики) и инсталлятор Microsoft Monitoring Agent.
Далее следует скопировать ApplicationInsights.config в корневую папку сервиса Calculator на виртуальной машине и установить агент.
Обратите внимание, что во время установки надо поставить галочку
После установки следует перезапустить IIS.
По умолчанию ApplicationInsights.config настроен таким образом, что статистика будет собираться только с нескольких базовых счетчиков производительности. Но мы можем добавить в этот файл дополнительные счетчики — для этого их достаточно перечислить в специальном виде внутри XML секции PerformanceCounters, например:
Для того, чтобы узнать правильное наименование нужных счетчиков, я рекомендую их выгрузить через утилиту perfmon. Для этого добавьте в Performance Monitor необходимые счетчики, выделите их и сохраните правой кнопкой мыши в html-формат.
Если открыть сохраненный файл в блокноте, то там можно посмотреть правильное наименование счетчиков вот в таком виде:
Запуск тестов
Открыть в Visual Studio тестовый солюшин (из тестовых данных).
В меню студии Team explorer подключиться к созданному аккаунту Visual Studio Online.
Далее в солюшине открыть файл Remote.testsetting и на первой же вкладке выбрать Run tests using Visual Studio Online.
Далее в аппконфиге проекта RemoteTestProject надо прописать правильный URI, который прослушивает WCF Service Calculator.
Теперь можно переходить к настройке нагрузочного теста.
По умолчанию нагрузочный тест будет запускаться в 250 потоков на 2х одноядерных агентах, т.е. каждый агент будет генерировать нагрузку в 125 потоков.
Для увеличения количества агентов, следует использовать настройку Run Settings =>Agent Count (Total Cores). Посмотреть некоторые дополнительные настройки, а также возможные проблемы можно по ссылке.
Для подключения счетчиков производительности из Application Insights необходимо правой мышью кликнуть на Run Settings => Get Performance Data from Application Insights и выбрать интересующие счетчики.
Во время запуска нагрузочных тестов Visual Studio Online начнет выделять ресурсы для агентов
После того, как ресурсы будет выделены, начнется cам нагрузочный тест
Счетчики производительности из Application Insights в процессе нагрузочного теста будут на вкладке Application
После завершения теста отчет можно скачать и посмотреть в привычном виде
Сравнение методик
Для эксперимента я провел нагрузочное тестирование данного WCF сервиса с применением обоих подходов.
В первом случае я развернул 2е одноядерные виртуальные машины и установил на них Агенты Visual Studio. Поставил локальный контроллер и запустил тест. В результате два агента смогли сгенерировать нагрузку примерно в 500 вызовов в секунду, при этом загрузка CPU на обоих агентах доходила до 100%, в то же время загрузка процессора на виртуальной машине с тестовым сервисом составляла примерно 15-20% (основной вклад естественно вносил процесс w3wp).
Повторил данный тест, но с применением Visual Studio Online + Application Insights (Agent total count = 2). Результат оказался идентичным первому, 2а одноядерных облачных агента генерировали непрерывную нагрузку примерно 500 запросов в секунду. Дождавшись завершения теста, я скачал отчет и обнаружил, что на виртуальных агентах CPU также был загружен на 100%
Увеличение числа ядер агентов до 4х, показало почти линейный рост нагрузки в среднем почти до 800 запросов в секунду (загрузка сервера при этом составляла в среднем 40%).
Таким образом я предположил — наш простенький WCF сервис Calculator способен выдержать нагрузку в 3000 параллельных запросов в секунду (работая на одноядерной машине) с учетом того, что мы еще в запросе передаем таймаут 1 мс.
На самом деле все оказалось не так. Когда я запустил нагрузочный тест на 10 агентах (250 потоков), максимальная производительность составила примерно 1000 запросов в секунду, при этом агенты были недогружены (загрузка CPU 30%), а сервер перегружен (CPU 100%).
Я начал разбираться и переписал свой нагрузочный тест, так, чтобы увидеть рост зависимости CPU сервера от возрастающей нагрузки. Каждые 10 секунд нагрузка возрастала на 5 пользователей.
Примерно на отметке 100 пользователей наблюдается максимальную производительность
1000 запросов в секунду, дальнейшее увеличение нагрузки приводит к быстрой деградации CPU сервера Calculator.
Вывод
VS Online позволяет поднимать облачную инфраструктуру нагрузочного тестирования, требуемой мощности, практически переключением одной кнопки. Причем стоит отметить — эта инфраструктура ничем не уступает классической (с агентами и контроллером). Теперь о цене. Application Insights на текущий момент находится в Preview и предоставляется бесплатно. Одна минута виртуального пользователя стоит 1 копейку, т.о. нагрузочный тест 1000 виртуальных пользователей на 10 минут, обойдется вам примерно в 100 рублей (вне зависимости на одном агенте у вас генерится нагрузка или 10).
Читайте также: