Developer analytics tools visual studio что это

Обновлено: 07.07.2024

Привет! У нас сегодня интересная тема – диагностика и мониторинг приложений. Всегда хочется иметь инструмент, который будет (желательно бесплатно, но если нет – то с ценами приемлемыми):

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

Инструмент называется Application Insights. Это – компонент Visual Studio Online, и он бесплатен для аккаунтов Visual Studio Online (подробнее про VSO), в которых до 5 членов команды. Внедрить его можно непосредственно в приложение (например, Cloud Service Windows Azure), установить его агент на сервере (Windows Server) и сказать, чтобы он начал мониторить все сайты и приложения, которые есть на этом сервере, либо связать его с System Center Operation Manager (что есть самый сложный сценарий, так как это уже, мягко говоря, уровень выше, нежели «просто инструмент»).

Что будем делать первым? Настраивать инфраструктуру. Дальше – смотреть, что может делать AI.

Настройка инфраструктуры


Создадим виртуальную машину в Azure. Если у вас уже есть веб-сервер с работающими приложениями – можно работать там, действия ничем не отличаются.





Подключитесь к ВМ, нажав кнопку Connect.



После перехода на страницу 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. Если их нет, нужно подождать – данные еще не подгрузились.


Мониторинг и профайлинг с помощью Application Insights — обзор

Вернемся немного назад и вспомним, что такое AI. AI – это подфункциональность Visual Studio Online, с помощью которой любой член команды может в реальном режиме мониторить доступность, производительность и различные аспекты использования приложений/сервисов. Ниже несколько замечаний по функциям AI:

Availability:
Usage:
Performance и Diagnostics

Availability

  • Начнем со вкладки Availability. Availability – это мера, с помощью которой можно увидеть доступность объекта за определенный промежуток времени с разных сторон.


Availability можно рассматривать с разных сторон, и каждый аналитик может иметь собственные представления об этом. Сразу после создания проекта и подсоединения его к AI вкладка Availability будет предлагать создать Synthetic Monitor, или то, как хочет пользователь мониторить доступность проекта. Создадим самый простой – URL Ping Test, его предлагается создать сразу же.


После создания монитора нажмите на появившуюся зеленую кнопку, чтобы перейти на отчет.
По умолчанию доступен отчет за последние 24 часа. Сразу после создания мы не найдем ничего интересного – для того, чтобы увидеть репрезентативную выборку, нужно подождать и нагрузить проект. Далее на скриншотах будут использоваться несколько проектов, которые находятся в продакшене.
Нижний график отображает 24 часа постоянно – для того, чтобы в любой момент можно было посмотреть данные за нужный период, выделив его. После выделения периода графики выше отреагируют с минимальной задержкой.


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



Мониторы создаются нажатием на соответствующую кнопку-плюс. Доступно два варианта – New Single URL Test и New Multistep Web Test. 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.

Performance

После перехода на вкладку Performance нас ожидает большое количество информации к размышлению за определенный период – выбранный на одной из вкладок период будет сохраняться в течение сеанса.


Первый блок — “Response Time and Load vs. Dependencies” – показывает скорость запросов, среднюю скорость запроса и различные зависимости. Как и на вкладке Availability, у этого блока есть два графика – за выбранный период и за 24 часа.
Следующий блок — “Response Time Distribution” – показывает график с распределением времени, затраченного на ответы. С этим у нас все хорошо – большинство запросов заняло меньше <50 мс.

Самые медленные запросы удостоились в AI отдельного блока — “Top 10 Slowest Requests by Issue Count». Особым богатством информации этот блок не располагает, но позволяет увидеть, какая страница/представление загружалась дольше всего. Обратите внимание на MVC View rendering – сам рендеринг элементов был не такой уж и долгий, основное время ушло на загрузку.


Еще один блок — “Average Instance Count” – показывает среднее количество серверов. Если у вас ферма – будет показывать распределение по количеству. В нашем случае это один сервер, и извлечь пользу из этого факта не получится.
Блок “Exceptions Rate” — один из наиболее интересных. Он показывает распределение по количеству исключений на одну секунду.


Как видим, что-то очень активно происходило — возникали исключения. На более подробную информацию ведет ссылка Exceptions Rate – по нажатию перейдем на кастомизированную под эту информацию вкладку Diagnostics. Там же есть кнопка Exception Events, которая и выведет нам все исключения, произошедшие во время выполнения приложения. Все эти данные можно отсортировать, например, по классу исключения.
Нажатие на исключение вызовет еще одно окно с информацией об этом исключении, и, внимание, ссылкой на файл IntelliTrace — история каждого исключения сохраняется.


Оставшиеся блоки – это информация о ресурсах сервера – CPU, сети, памяти – выделенных для приложения. Причину странного поведения приложения или даже сервера не всегда можно обнаружить сразу (мысль о проверке логов или Task Manager может придти слишком поздно), поэтому распределение по нагрузке может показать полезные аномалии.


Каждый из блоков имеет название, при нажатии на котором происходит переход на настроенную вкладку Diagnostics. Например, если вы обратили внимание на аномалию с памятью на сервере, то это стоит того, чтобы проверить эту вкладку – возможно, у вас произошло Memory Event. Каждый такой Memory Event будет иметь файл дампа памяти, по которому можно определить, что послужило причиной такого поведения.
Переходим на следующую вкладку – Feature Usage.

Features

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


Второй блок, Relative % of Sessions, показывает распределение количества запросов к разным секциям сайта в рамках сессии (периода нахождения пользователя на сайте).


Вторая фича – Page Views – показывает иерархию запросов по различным страницам, включая структуру URL и почасовую разбивку.


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


Внутри Page Views есть секция DETAILS — почасовая разбивка информации по посещениям.


Фича Events содержит в себе определяемые разработчиком события, которые нужно логировать и показывать в AI. Фича Event Insights связана напрямую с Events и показывает расширенную информацию по событиям.
Фича Slowest Requests показывает среднее время загрузки различных страниц.


Это что касается Features (фич). Напомню, что вкладка Usage опирается уже на действия разработчика, и разработчик вправе взаимодействовать с AI в этом аспекте так, как ему это требуется. Переходим к следующей секции USAGE – Users.


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


Секция эта большая, наполненная полезными данными. График User Frequency показывает время, которое проходит между тем, как уже заходивший пользователь ушел, и тем, когда он вновь зашел на ваш сайт/приложение. Если это внутренний сайт для сотрудников, можно увидеть, что с ними все хорошо – они возвращаются на этот сайт в течение дня.


График New vs. Returning показывает процент новых посетителей и возвратившихся.


Engagement Level – это распределение активностей на сессию. Активность – это когда человек куда-то ходит в процессе, а не находится на одной странице.


Следующий пункт – это Authenticated Active Users. Показывает то же самое, что и предыдущий пункт, но для аутентифицировавшихся пользователей. Логика зависит от Telemetry SDK и разработчика.

Пункт Loyalty показывает за определенное время динамику лояльности пользователей – сколько из них пришло первый раз, сколько из этих пришедших пришло второй раз, много раз, длительность сессий, и так далее.


Аналогично с пунктом Environment – без Telemetry SDK новых данных не будет. Если Features – это про сайт, Users – про людей, то Environment – это про то, что людей и сайт связывает – та экосистема, которая окружает любого пользователя, и которая может дать ценные сведения аналитику: операционная система, браузер, тип устройства, реферрал (если пользователь пришел по ссылке с чужого сайта), язык, разрешение дисплея и так далее. Порой обнаруживаются интересные детали – например, может обнаружится, что при планировании отбросили разрешения экрана до 1280х640, но оказалось, что среди пользователей это до сих пор популярно (пример надуман).


Если интересна разбивка по версиям конкретной системы – все доступно при нажатии на название ОС.


В Screen Resolutions доступны разрешения экрана.


Browsers сделаны аналогично операционным системам – иерархия название браузера->версия.



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


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


Languages – язык, который прописан в запросах от пользователей. Полезно, когда нам нужно понять, на какой из Language Pack для нашего проекта нужно сконцентрировать особое внимание.




При подключении и настройки пакета 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, и поставить галочку напротив адаптера.



Бесплатные инструменты разработки от Microsoft, вопреки распространненому мнению, включают в себя не только многофункциональную и мощную IDE Visual Studio 2015 Community, но и ряд других полезных компонентов и продуктов. Например, Visual Studio Team Services имеет свое бесплатное предложение для команд не более 5 человек. Эти и многие другие предложения теперь доступны каждому разработчику по программе Visual Studio Dev Essentials.

Новая программа Visual Studio Dev Essentials, анонсированная в ноябре 2015 года, предоставляет централизованный доступ к основным бесплатным компонентам для разработчика на Visual Studio, а так же предлагает различные инструменты для обеспечения полного цикла создания ПО, включая инструменты и продукты сторонних компаний, например Parallels, Xamarin и т.д.

Так же по программе Dev Essentials в течение нескольких месяцев предоставляется доступ к обучающим материалам, таким, как Pluralsight, Xamarin University и т.д. А также возможность получения приоритетной поддержки на форумах.

Обзор компонентов

Для доступа к программе необходимо иметь учетную запись Microsoft (бывшую Live ID). Зарегистрировать ее можно здесь.

После входа на портал Visual Studio Dev Essentials, в самом начале страницы вы можете зафиксировать предложения, которые вас наиболее заинтересовали. По умолчанию здесь предложены инструменты семейства Visual Studio, бесплатные предложения облачной платформы Microsoft Azure и т.д.

Давайте кратко пройдемся по каждому из компонентов программы.

Помимо Visual Studio 2015 Community и Visual Studio Team Services, здесь же на портале программы, вы можете скачать Visual Studio Code — кроссплатформенный редактор кода, доступный для операционных систем Windows, OS X и Linux. Поддерживает более 40 языков, отладку Mono и Node.js, а так же множество других дополнительных возможностей. В том числе расширение функционала с помощью компонентов с Visual Studio Marketplace.

Доступный в предложении компонент Microsoft R Server версии для разработчиков позволит создавать мощные решения для аналитики на языке R на Windows, Hadoop, Terradata и Linux.

Пробный период облачной платформы Microsoft Azure составляет один месяц, а предложение для участников Dev Essentials гарантирует ежемесячное предоставление 25$ в течение года для использования любых сервисов, представленных на портале. Azure App Service — сервис, доступный в Azure подписке, включает в себя работу с веб-приложениями, мобильным бэкэндом и т.д. и предоставляет часть функционала бесплатно.

Инструменты


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

Hockey App, пригодится мобильным разработчикам, как главный сервис от компании Microsoft, для получения своевременной информации о поведении мобильных и desktop-приложений на этапе их бета-тестирования, распространении тестовых сборок приложения, сбора crash-отчетов и обратной связи.

Для желающих познакомиться с разработкой под универсальную платформу Windows 10 (UWP) в программе Dev Essentials содержится готовое окружение, необходимое для разработки UWP-приложений, в формате ознакомительной виртуальной машины для Hyper-V, VMWare, VirtualBox, Parallels.

Пользователи Mac для разрабоотки и тестирования приложений под любую платформу на своем компьютере прямо на странице личного портала Dev Essentials могут получить 3х-месячную подписку для Parallels Desktop for Mac Pro и похожее предложение для Parallels Access.

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

Следующее предложение программы Dev Essentials напоминает, что создавать, редактировать и работать совместно с командой над документами проекта можно прямо в браузере, используя возможности нового Office Online, не устанавливая ПО на свой компьютер, и при этом совершенно бесплатно. А сохранять их, например, разместив в облачном хранилище OneDrive.

Обучение


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

Чтобы всегда быть в курсе последних новостей о технологиях Microsoft, вы так же можете получить доступ к журналу MSDN Magazine и возможность подписаться на рассылку MSDN Flash.

Поддержка


В качестве участника программы Visual Studio Dev Essentials разработчику будет предоставлена приоритетная поддержка на выбранных форумах Microsoft. Это преимущество означает, что инженер компании Microsoft ответит на вопрос в течение 2 рабочих дней, если, после публикации поста, сообщество не успело найти ответ на этот вопрос. Еще по программе доступно 25$ для использования сервиса виртуального менторинга HackHands.

Заключение

Visual Studio Dev Essentials — основные компоненты разработчика Visual Studio — абсолютно новая инициатива и программа компании Microsoft, которая на текущий момент запущена в предварительной версии. Программа все еще продолжает развиваться для того чтобы предоставить разработчикам максимум полезных и бесплатных предложений различных сервисов, инструментов и обучающих материалов.

Filter and search on telemetry content such as requested URLs, trace and exception types and messages, SQL and REST calls. Filter on properties such as server instances, geo location, device or browser versions. Inspect individual events. You can search either the telemetry sent from your live production app, or telemetry generated in a local debug session.


Your telemetry will appear along with other debugging and performance data in the Visual Studio Diagnostic Hub, for powerful correlations.


Developer Analytics Tools come as part of Visual Studio 2015 Update 2 and help you test your web apps and diagnose issues in your services, providing easy on-boarding to HockeyApp & Application Insights, for your new and existing projects. Tell me more!

Search Telemetry

Explore real events from production or from local debug session, all within Visual Studio


Beta distribution

Share beta versions of your mobile apps with your users and testers using HockeyApp


Pinpoint exceptions

See production exception right in your code with CodeLens and Jump to Code from exception stack traces


Diagnostics Hub

Rich debugging experience showing Application Insights events alongside performance issues


Get Started Quickly

One click onboarding to Application Insights & HockeyApp with rich custom instrumentation


Zero click logging

Automatically detect logging frameworks in your app with which you can seamlessly capture traces and send to Application Insights

Читайте также: