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, например, вот так:

В 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 будет попадать информация по всем веб запросам.

Кроме этого, 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. В этих методах, у вас есть доступ к контексту теста, в том числе к его названию, состоянию и тп. Вот пример реализации диагностического адаптера:

После реализации диагностического адаптера, сборку с ним надо подложить на все сервера с установленными тестовыми агентами (включая машину, на которой происходит конфигурирование настроек 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 дней.

Источник

Анализ телеметрии приложения на основе холста с помощью Application Insights

Вы можете подключить свое приложение к Application Insights, функции Azure Monitor. Application Insights включает мощные аналитические инструменты, которые помогут вам диагностировать проблемы и понять, что пользователи на самом деле делают с вашим приложением.

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

В этом кратком руководстве вы создадите инструментальные средства для приложения на основе холста под названием Kudos (англ. Kudos — «благодарность», «поздравление», «похвала»). Это поможет вам исследовать и обнаруживать концепции телеметрии и применять их в своих собственных приложениях на основе холста. Пример приложения Kudos входит в набор приложений для работы с сотрудниками, доступных для скачивания в составе пакета Начальный набор для работы с сотрудниками.

Предварительные условия

Необязательная

Создание ресурса Application Insights

Прежде чем вы сможете отправить телеметрию для приложения, вам нужно создать ресурс Application Insights для хранения событий.

Выполните поиск Application Insights:

Создайте ресурс Application Insights:

Введите соответствующие значения и выберите Проверить и создать. Дополнительные сведения см. в разделе Создание ресурса Application Insights.

После создания экземпляра Application Insights вы увидите обзор экземпляра. Скопируйте Ключ инструментирования. Вам понадобится этот ключ для настройки вашего приложения.

Подключение приложения к Application Insights

Выберите Приложения в левой области навигации. Из списка приложений выберите приложение Kudos, затем выберите Изменить:

Вы также можете создать новое приложение или изменить любое существующее приложение.

Выберите объект Приложение из левого дерева навигации и вставьте Ключ инструментирования:

Выполните действия Сохранить и Опубликовать для приложения.

Воспроизводите опубликованное приложение и просматривайте различные экраны.

При просмотре различных экранов события автоматически регистрируются в Application Insights, включая детали использования, такие как:

Вы должны воспроизвести опубликованное приложение, чтобы отправить события в Application Insights. События не отправляются в Application Insights, когда вы предварительно просматриваете приложение в Power Apps Studio.

Просмотр событий в Application Insights

Войдите в портал Azure и откройте ресурс Application Insights, который вы создали ранее.

Прокрутите вниз в левой панели навигации и выберите Пользователи в разделе Потребление.

Представление Пользователи показывает подробности использования приложения, такие как:

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

Читайте также:  mobile connect bus enumerate device что это такое

Выберите представление События на левой панели навигации в разделе Потребление. Вы можете увидеть сводку всех экранов, просмотренных во всех сеансах приложения:

Некоторые из дополнительных функций Application Insights, которые вы можете использовать:

Создание пользовательских событий трассировки

Вы можете написать собственные пользовательские трассировки непосредственно в Application Insights и начать анализировать информацию, специфичную для вашего сценария. Функция трассировки позволяет собирать следующее:

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

Существует три уровня серьезности для сообщений трассировки при отправке пользовательской информации трассировки в Application Insights из вашего приложения:

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

Если вы регистрируете какие-либо персональные данные, вам нужно будет рассмотреть любые обязательства по обеспечению соответствия данных, такие как GDPR, которые вам, возможно, также потребуется выполнить.

Теперь вы обновите свое приложение и создадите новый компонент для сбора отзывов на каждом экране приложения. Вы будете записывать события в Application Insights.

Выберите Приложения в левой области навигации. Из списка приложений выберите приложение Kudos, затем выберите Изменить.

Вы также можете создать новое приложение или изменить любое существующее приложение.

Выберите пункт Компоненты в Представлении дерева:

Выберите Создать компонент, затем измените ширину до 200 и высоту до 75:

Выберите Создать пользовательское свойство, чтобы создать собственное свойство:

Введите свойство Имя и Отображаемое имя, такое как FeedbackSceen.

Введите свойство Описание.

Выберите Тип свойства как Вход и Тип данных как Экран:

Свойство ввода позволяет вам захватывать имя экрана и его компонент, чтобы вы могли зарегистрировать эту информацию в Application Insights.

Выберите компонент в Представлении дерева, выберите Другие действия (. ), затем выберите Переименовать, чтобы переименовать компонент на понятное имя, такое как FeedbackComponent.

Выберите значки, выберите Другие действия (. ), затем выберите Переименовать, чтобы переименовать значки на понятные имена, такие как FrownIcon и SmileIcon.

Выберите FrownIcon, выберите свойство OnSelect, затем введите следующее выражение в строку формул:

Выражение формулы отправляет UserName, UserEmail, Screen и Feedback (со значением -1) в Application Insights.

Выберите SmileIcon, выберите свойство OnSelect, затем введите следующее выражение в строку формул:

Добавьте компонент на один из экранов в вашем приложении:

Выберите Сохранить, затем выберите Опубликовать, чтобы сохранить и опубликовать ваше приложение.

Воспроизведите опубликованное приложение и отправьте отзыв в виде улыбки или недовольства с экранов.

Вы должны воспроизвести опубликованное приложение, чтобы отправить события в Application Insights. События не отправляются в Application Insights, когда вы предварительно просматриваете приложение в Power Apps Studio.

Анализ данных в Application Insights

Теперь вы можете начать анализ данных, отправленных вами с помощью функции Trace из вашего приложения в Application Insights.

Войдите в портал Azure и откройте ресурс Application Insights, который вы создали ранее:

Выберите Журналы в разделе Мониторинг из левой панели навигации:

Введите приведенный ниже запрос и выберите Выполнить. Отзыв, полученный от вашего приложения, возвращается:

Выберите строку в результатах и разверните поле customDimensions.

Значения параметров Screen, UserName, UserEmail и FeedbackValue для события OnSelect значка улыбки или недовольства в вашем компоненте были записаны.
Имеются также дополнительные значения, записанные для каждого события, отправленного на Application Insights, такие как appId, appName и appSessionId.

В следующем примере запроса вы можете развернуть свойства пользовательских аналитик JSON и проецировать столбцы в представлении результатов.

Регистрация запросов — очень мощный инструмент. Вы можете использовать его для объединения нескольких таблиц, агрегирования больших объемов данных и выполнения сложных операций. Для получения дополнительных сведений см. статью Регистрация запросов.

Экспорт данных в Power BI

Вы можете экспортировать свои данные и результаты запросов Application Insights в Power BI для анализа и представления данных.

Войдите в портал Azure и откройте ресурс Application Insights, который вы создали ранее:

Выберите Журналы в разделе Мониторинг из левой панели навигации:

В окне запроса Log Analytics выберите раскрывающееся меню Экспорт.

Выберите вариант Экспортировать в Power BI (Запрос M). При этом файл запроса Power BI загружается на ваш компьютер:

Откройте загруженный файл в текстовом редакторе и скопируйте запрос в буфер обмена.

Выберите раскрывающееся меню Получить данные на ленте Главная, затем выберите Пустой запрос:

В окне запроса выберите Расширенный редактор. Вставьте запрос из шага 5 в это окно, выберите Готово, затем выберите Закрыть и применить:

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

Контекст и аналитики события трассировки по умолчанию

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

Читайте также:  что делать если в доме маленькое напряжение
Имя измерения Представляет
ms-appId Идентификатор приложения, отправившего событие.
ms-appName Имя приложения, отправившего событие.
ms-appSessionId Идентификатор сеанса приложения.

Неподдерживаемый сценарий

App Insights не поддерживает следующие сценарии.

Источник

Application Insights для приложений Worker Service (не HTTP)

Application Insights SDK для службы Worker Service — это новый пакет SDK, который лучше всего подходит для рабочих нагрузок, не связанных с передачей данных по HTTP, таких как обмен сообщениями, фоновые задачи, консольные приложения и т. д. Эти типы приложений не используют входящие HTTP-запросы в отличие от традиционных веб-приложений ASP.NET/ASP.NET Core, поэтому использование с ними пакетов Application Insights для приложений ASP.NET и ASP.NET Core не поддерживается.

Новый пакет SDK сам не выполняет сбор данных телеметрии. Вместо этого он задействует другие известные инструменты Application Insights для автоматического сбора данных, такие как DependencyCollector, PerfCounterCollector, ApplicationInsightsLoggingProvider и т. д. Этот пакет SDK предоставляет методы расширения в интерфейсе IServiceCollection для включения и настройки сбора данных телеметрии.

Поддерживаемые сценарии

Предварительные требования

Допустимый ключ инструментирования Application Insights. Этот ключ необходим для отправки любых данных телеметрии в Application Insights. Если необходимо создать новый ресурс Application Insights для получения ключа инструментирования, см. раздел Создание ресурса Application Insights.

Использование пакета SDK Application Insights для Worker Service

Получите экземпляр ILogger или экземпляр TelemetryClient из контейнера внедрения зависимостей (DI), вызвав метод serviceProvider.GetRequiredService (); или с помощью внедрения конструктора. На этом шаге инициируется настройка TelemetryConfiguration и модулей автоматической сборки данных.

Конкретные инструкции для каждого типа приложений приведены в следующих разделах.

Полный пример доступен здесь.

Настройте ключ инструментирования.

Кроме того, ключ инструментирования можно указать в любой из следующих переменных среды: APPINSIGHTS_INSTRUMENTATIONKEY либо ApplicationInsights:InstrumentationKey

Например: SET ApplicationInsights:InstrumentationKey=putinstrumentationkeyhere ИЛИ SET APPINSIGHTS_INSTRUMENTATIONKEY=putinstrumentationkeyhere

Как правило, APPINSIGHTS_INSTRUMENTATIONKEY задает ключ инструментирования для приложений, развернутых в службе веб-приложений в виде веб-заданий.

Фоновые задачи ASP.NET Core с размещенными службами

В этом документе описывается создание фоновых задач в приложении ASP.NET Core 2.1/2.2.

Полный пример доступен здесь.

Полный пример доступен здесь.

Внесите изменения в файл Program.cs, как показано в примере ниже.

Запуск приложения

Ниже перечислены все данные телеметрии, автоматически собираемые службой Application Insights.

Интерактивные метрики

Для быстрой проверки правильности настройки мониторинга Application Insights можно использовать динамические метрики. Прежде чем данные телеметрии начнут отображаться на портале и в аналитике, может потребоваться несколько минут, однако в динамических метриках отражается использование ЦП запущенного процесса практически в реальном времени. Также могут отображаться другие данные телеметрии, такие как запросы, зависимости, трассировки и т. д.

Журналы ILogger

Автоматически заносятся в журнал через ILogger записи с уровнем серьезности Warning и выше. В инструкциях для ILogger поясняется, как настроить уровни журналирования, которые будет фиксировать Application Insights.

Зависимости

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

EventCounter

Отслеживание дополнительных данных телеметрии вручную

Настройка SDK Application Insights

При использовании этого пакета SDK изменение конфигурации посредством внесения изменений в TelemetryConfiguration.Active не поддерживается, и изменения не отражаются.

Использование ApplicationInsightsServiceOptions

Стандартные параметры в ApplicationInsightsServiceOptions

Дискретизация

Пакет SDK Application Insights для Worker Service поддерживает как фиксированную, так и адаптивную выборку. Адаптивная выборка включена по умолчанию. Выборку можно отключить с помощью параметра EnableAdaptiveSampling в ApplicationInsightsServiceOptions.

Чтобы настроить дополнительные параметры выборки, можно использовать следующий пример.

Дополнительные сведения см. в документе по выборке.

Добавление TelemetryInitializer

С помощью инициализаторов телеметрии можно задать свойства, которые отправляются со всеми данными телеметрии.

Удаление TelemetryInitializer

Добавление обработчиков телеметрии

Настройка или удаление модулей TelemetryModule по умолчанию

Модули телеметрии в Application Insights используются для автоматического сбора данных телеметрии о конкретных рабочих нагрузках, не требуя ручного отслеживания.

Следующие модули автоматического сбора данных включены по умолчанию. Эти модули отвечают за автоматический сбор данных телеметрии. Их можно отключать и настраивать для изменения поведения по умолчанию.

Настройка канала телеметрии

Динамическое отключение телеметрии

Часто задаваемые вопросы

Как можно отследить данные телеметрии, сбор которых не происходит автоматически?

Можно ли использовать интегрированную среду разработки Visual Studio для подключения Application Insights к проекту Worker Service?

В настоящее время использование интегрированной среды разработки Visual Studio поддерживается только для приложений ASP.NET/ASP.NET Core. После добавления поддержки Visual Studio для приложений Worker Service этот документ будет обновлен соответствующим образом.

Можно ли включить мониторинг Application Insights с помощью таких средств, как агент Azure Monitor Application Insights (ранее монитор состояния версии 2)?

Нет, агент Azure Monitor Application Insights в настоящее время поддерживает только ASP.NET 4.x.

Если я запускаю приложение в Linux, поддерживаются ли все функции?

Да. Поддержка функций для пакета SDK одинакова на всех платформах, за исключением следующих моментов:

Примеры приложений

Пакет SDK с открытым исходным кодом

Сведения о последних обновлениях и исправлениях ошибок см. в заметках о выпуске.

Источник

Сказочный портал