Поделиться через


Углубленная диагностика для веб-приложений и служб с помощью Application Insights

В этой статье объясняется, как Application Insights вписывается в цикл DevOps.

Зачем мне Application Insights?

Служба Application Insights отслеживает работу веб-приложения. Он сообщает о сбоях и проблемах с производительностью, а также помогает проанализировать, как клиенты используют ваше приложение. Он подходит для приложений, работающих на таких платформах, как ASP.NET, Java EE и Node.js. Он размещается в облаке или локально.

Изображение, показывающее аспекты сложности доставки веб-приложений.

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

Современные веб-приложения разрабатываются в цикле непрерывной поставки:

  • Выпуск новой функции или улучшения.
  • Понаблюдайте, насколько хорошо это работает для пользователей.
  • Спланируйте следующий шаг развития на основе этих знаний.

Ключевой частью этого цикла является этап наблюдения. Application Insights предоставляет набор инструментов для отслеживания производительности и использования веб-приложения.

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

  • Надежное обнаружение сбоев.
  • Немедленное уведомление.
  • Предоставить сведения, необходимые для диагностики проблемы.

Application Insights выполняет эти задачи.

Откуда берутся ошибки?

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

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

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

В этих условиях единственным способом сохранить твердый контроль над количеством ошибок является автоматизированное модульное тестирование. Невозможно вручную повторно протестировать все при каждой доставке. Модульное тестирование теперь является обычной частью процесса сборки приложения. Инструменты, такие как Xamarin Test Cloud, выполняют автоматизированное тестирование пользовательского интерфейса на нескольких версиях браузеров. Эти режимы тестирования позволяют надеяться, что число ошибок, обнаруженных в приложении, будет сведено к минимуму.

Обычные веб-приложения содержат множество динамических компонентов. Наряду с клиентом (в браузере или приложении устройства) и веб-сервером, вероятно, будет выполняться существенная серверная обработка. Возможно, серверная часть — это конвейер компонентов или свободный набор элементов совместной работы. Многие из них не будут находиться под вашим контролем. Это внешние службы, от которых вы зависите.

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

Вопросы

Вот несколько вопросов, которые следует задать при разработке веб-системы:

  • Происходит ли сбой приложения?
  • Что именно произошло? Если запрос не выполнен, вы хотите узнать, как он туда попал. Требуется трассировка событий.
  • Ваше приложение достаточно быстро? Сколько времени требуется для ответа на стандартный запрос?
  • Может ли сервер справиться с нагрузкой? Когда частота запросов возрастет, будет ли время отклика стабильным?
  • Насколько быстро реагируют ваши зависимости, такие как REST API, базы данных и другие компоненты, вызываемые приложением? В частности, если система работает медленно, это ваш компонент, или вы получаете медленные ответы от кого-то другого?
  • Ваше приложение вверх или вниз? Его видно из других частей мира? Вы должны знать, если он останавливается.
  • Какова первопричина? Сбой в компоненте или зависимость? Это проблема связи?
  • Сколько пользователей затронуто? Если у вас есть несколько проблем, которые необходимо решить, что является наиболее важным?

Что такое Azure Application Insights?

Изображение, показывающее базовый рабочий процесс Application Insights.

  1. Application Insights снабжает ваше приложение инструментами и отправляет данные телеметрии во время выполнения приложения. Вы можете встроить пакет SDK Application Insights в приложение или применить инструментирование во время выполнения. Первый метод является более гибким, так как вы можете добавлять собственные данные телеметрии в обычные модули.
  2. Данные телеметрии отправляются на портал Application Insights, где они хранятся и обрабатываются. Хотя Application Insights размещается в Azure, она может отслеживать любые веб-приложения, а не только приложения Azure.
  3. Данные телеметрии представляются в виде диаграмм и таблиц событий.

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

  • Данные экземпляра могут содержать отчет о запросе, полученном веб-приложением. Найти и проверить сведения о запросе можно с помощью средства поиска на портале Application Insights. Экземпляр может содержать такие данные, как время, за которое приложение ответило на запрос, а также запрошенный URL-адрес и приблизительное расположение клиента.
  • Агрегированные данные включают количество событий за единицу времени, чтобы можно было сравнить частоту запросов со временем отклика. Он также включает средние значения метрик, таких как время отклика на запрос.

Вот основные категории данных.

  • Запросы к приложению (обычно HTTP-запросы) с данными по URL-адресу, времени отклика и успешному или неудачному выполнению.
  • Зависимости, такие как вызовы REST и SQL, выполняемые приложением, а также с URI, временем отклика и успехом.
  • Исключения, включая трассировки стека.
  • Данные о просмотре страницы, поступающие из браузеров пользователей.
  • Метрики, такие как счетчики производительности и метрики, которые вы пишете самостоятельно.
  • Пользовательские события, которые можно использовать для отслеживания бизнес-событий.
  • Трассировки журналов, используемые для отладки.

Пример: Реал Мадрид F.C.

Веб-служба футбольного клуба "Реал" (Мадрид) обслуживает около 450 миллионов болельщиков по всему миру. Болельщики получают к нему доступ через веб-браузеры и мобильные приложения клуба. Болельщики могут забронировать билеты, а также получить доступ к информации и видеоклипам о результатах, игроках и предстоящих играх. Они могут выполнять поиск с помощью фильтров, таких как количество забитых голов. Также имеются ссылки на социальные сети. Взаимодействие с пользователем очень персонализировано и разработано как двустороннее общение для привлечения поклонников.

Решение представляет собой систему служб и приложений в Azure. Масштабируемость является ключевым требованием. Трафик является переменным и может достигать больших объемов во время и вокруг матчей.

Для клуба "Реал" (Мадрид) крайне важно отслеживать производительность системы. Application Insights предоставляет исчерпывающее представление в системе для обеспечения надежного и высокого уровня обслуживания.

Клуб также получает глубокое понимание своих болельщиков, как где они находятся (только 3% находятся в Испании), что они заинтересованы в игроках, исторических результатах, и предстоящих играх, и как они реагируют на результаты матча.

Большая часть этих данных телеметрии собирается автоматически без добавления кода, что упрощает решение и снижает операционную сложность. Для клуба "Реал" (Мадрид) Application Insights ежемесячно обрабатывает 3,8 миллиарда точек телеметрических данных.

Реал Мадрид использует модуль Power BI для просмотра данных телеметрии.

Снимок экрана: представление телеметрии Application Insights в Power BI.

Интеллектуальное обнаружение

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

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

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

В обоих случаях оповещение сообщает о обнаруженных симптомах. Он также предоставляет данные, необходимые для диагностики проблемы, например соответствующие отчеты об исключениях.

Снимок экрана: электронная почта от упреждающей диагностики.

Клиент Samtec сказал: "Во время недавней прямой миграции функции мы обнаружили недостаточно масштабируемую базу данных, которая достигла пределов ресурсов и вызывала истечение времени ожидания. Оповещение упреждающего обнаружения пришло буквально в тот момент, когда мы столкнулись с этой проблемой, очень близко к реальному времени, как и было заявлено. Это оповещение, которое сопровождалось оповещениями платформы Azure, помогло нам устранить проблему практически мгновенно. Общее время простоя <— 10 минут.

Динамический поток метрик

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

Снимок экрана: динамические метрики.

Он позволяет немедленно проверить пример любых сбоев или исключений.

Снимок экрана, на котором показаны события сбоя в реальном времени.

Схема приложений

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

Вы можете рассмотреть проблему, поняв, связана ли она с кодом или зависимостью. В одном месте можно детализировать связанные возможности диагностики. Например, приложение может завершиться сбоем из-за снижения производительности на уровне SQL. С помощью схемы приложений вы можете сразу увидеть его и детализировать работу помощника по индексам SQL или Query Insights.

Снимок экрана: карта приложения.

Application Insights Log Analytics

С помощью Log Analytics можно создавать произвольные запросы на мощном языке, подобном SQL. Диагностика во всем стеке приложений становится легкой по мере подключения различных точек зрения. Затем можно задать правильные вопросы, чтобы сопоставить производительность службы с бизнес-метриками и взаимодействием с клиентами.

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

Снимок экрана: аналитический запрос и диаграмма результатов.

Например, можно с легкостью выполнить следующие действия.

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

Клиент DNN сказал: "Application Insights предоставила нам недостающую часть уравнения для возможности объединять, сортировать, запрашивать и фильтровать данные по мере необходимости. Это дает нашей команде возможность полагаться на собственную изобретательность и опыт при поиске данных. А мощный язык запросов позволяет нам получать подробные сведения и решать проблемы, о которых мы раньше даже не знали. Много интересных решений появляются во время поиска ответов на вопросы, которые начинаются с Интересно знать....

Интеграция средств разработки

Application Insights интегрируется со средствами разработки.

Настройка Application Insights

В Visual Studio и Eclipse есть средства для настройки правильных пакетов SDK для разрабатываемого проекта. Есть и команда меню, которая позволяет добавить Application Insights.

Если вы используете платформу ведения журнала трассировки, например Log4N, NLog или System.Diagnostics.Trace, вы можете отправить журналы в Application Insights вместе с другими данными телеметрии, чтобы можно было легко сопоставлять трассировки с запросами, вызовами зависимостей и исключениями.

Поиск данных телеметрии в Visual Studio

При разработке и отладке функции можно просматривать и искать данные телеметрии непосредственно в Visual Studio. Вы можете использовать те же средства поиска, что и на веб-портале.

Когда Application Insights регистрирует исключение, вы можете просмотреть точку данных в Visual Studio и перейти непосредственно к соответствующему коду.

Снимок экрана: поиск в Visual Studio.

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

Рабочие элементы

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