Русский
Русский
English
Статистика
Реклама

Мониторинг производительности

Observability система для микросервисов на примере Instana, часть 1

27.11.2020 10:16:55 | Автор: admin

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

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

Мыпрошли этот путь больше года назад, когда изучали инструменты, которые стоит использовать вне стандартной связки Prometheus + Grafana. Обзор получился объемным, поэтому разбили надве части.

Архитектура и установка агентов

Архитектурно продукт Instana состоит изсервера иагентов, собирающих данные. Устанавливается один агент нахост, который контролирует сам хост, все контейнеры иприложения, работающие нахосте. Основные данные, которые собирает продукт это метрики приложений иинфраструктурных компонентов (прокси-серверы, СУБД, кэш, очереди итд), трейсы приложений, логи иошибки приложений. Поддерживается 200+ технологий для сбора данных. Помимо этого, впродукте присутствуют модули EUM End User Monitoring для сбора данных производительности сконечных пользователей, взаимодействующих сприложениями через веб-браузеры инативные мобильные приложения для iOS иAndroid.

Сервер Instana backend, накоторый агенты отсылают данные, предоставляется помодели SaaS, атакже доступен вварианте on-premise для компаний, нежелающих использовать облачную модель размещения.

Мониторинг микросервисных приложений начинается сустановки агента Instana. Агент устанавливаются одной командой. Вразделе установки мывыбираем нужную нам платформу, идалее генерируется скрипт для его установки. Среди поддерживаемых агентом платформ есть Linux, Unix, Windows, Kubernetes всех мастей иоблачные среды AWS, Azure иGoogle Cloud.

Мастер выбора платформы и варианта установки агента Мастер выбора платформы и варианта установки агента

Наскриншоте представлен один извариантов установки агента вKubernetes кластер helm chart. Также можно установить агента спомощью Kubernetes Operator или daemonset.yaml. После того, как агенты установятся внаш кластер, мысможем посмотреть накарту нашей инфраструктуры вInstana.

Первое знакомство с продуктом Infrastructure Map

Карта объектов инфраструктурыКарта объектов инфраструктуры

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

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

Внашем случае мывидим, что агент обнаружил Docker контейнеры, Node.JS приложения, MongoDB, SpringBoot Java приложения иеще много других компонентов.

Свойства выбранного Node.JS приложения на карте инфраструктурыСвойства выбранного Node.JS приложения на карте инфраструктуры

Выбрав одну из коробок от пиццы мы получаем сводную информацию об этом компоненте. Выбрав Node.JS приложение shop-frontend мы видим версию приложения, ID процесса, аргументы запуска и другую информацию. Для детального анализа компонента по клику доступен дашборд с инфраструктурными метриками, но мы поговорим об этом позже. Также мы видим полную инфраструктурную географию этого компонента указание на детали расположения компонента в инфраструктуре. В нашем случае Node.JS приложение связано с процессом node, процесс находится в контейнере, контейнер в k8s поде, под находится на ноде k8s, а нода k8s обслуживается хостом. Для каждого из этих уровней доступны свои собственные дашборды и соответствующие метрики.

Свойства выбранного Docker контейнера на карте инфраструктурыСвойства выбранного Docker контейнера на карте инфраструктуры

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

Карта инфраструктуры с контейнерами, сгруппированными по Kubernetes namespaceКарта инфраструктуры с контейнерами, сгруппированными по Kubernetes namespace

Автоматический распределенный трейсинг гетерогенных приложений

Инфраструктурные метрики собираются многими решениями для мониторинга Kubernetes и приложений, но в Instana мы также увидели все сервисы и их эндпоинты. Происходит это благодаря автоматической инструментации наших приложений, Instana обнаружила сервисы и собрала все трейсы, без сэмплирования.

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

Технологии, поддерживаемые в Instana с точки зрения трейсингаТехнологии, поддерживаемые в Instana с точки зрения трейсинга

Давайте посмотрим на обнаруженные сервисы в нашем случае. Сервис в данном контексте это https/grpc сервисы приложения, база данных, очередь сообщений, CLI скрипт, кэш и другие системы.

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

Список обнаруженных сервисовСписок обнаруженных сервисов

Мы также можем увидеть связи микросервисов между собой, визуализируя на карте взаимодействия микросервисов. Такая карта строится автоматически, всегда в актуальном состоянии и отображает связи и данные о сервисах в реальном времени. На карте отображается и состояние здоровья сервиса. Красный - есть критичная проблема, желтый - есть проблема, отсутствие индикации, значит сервис здоров.

Карта взаимодействия сервисовКарта взаимодействия сервисов

При выделении любого из сервисов система сразу же подсветит все сервисы, с которыми выбранный сервис напрямую взаимодействует, также отобразит его KPI.

Карта взаимодействия сервисов, выбор сервисаКарта взаимодействия сервисов, выбор сервиса

Управление группами сервисов

С приходом микросервисов стало сложно определять, что именно теперь называть приложением. Ведь в одно приложение могут входить десятки разных сервисов, причем один и тот-же сервис может быть частью двух и более разных приложений. Как раз для логического разделения сервисов на приложения в продукте используется Application Perspective группа логически объединенных по какому-то критерию сервисов.

Группы сервисов - Application Perspective Группы сервисов - Application Perspective

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

Настройка Application Perspective и критерии объединения сервисовНастройка Application Perspective и критерии объединения сервисов

Например, мы можем сгруппировать сервисы по окружениям - production, stage, dev, test. Можем сгруппировать по Kubernetes namespace или deployments, по тегам, по продукту, команде и так далее. После создания Application Perspective сервисы сгруппируются по указанным параметрам и, в случае появления нового сервиса с параметрами, подходящими под настроенные критерии, сервис автоматически добавится в заданную группу.

По каждому приложению (Application Perspective), которых мы можем создать неограниченное количество, мы получаем готовый дашборд с метриками всех входящих в это приложение сервисов. Это позволяет посмотреть на карту взаимосвязей и метрики именно отфильтрованных сервисов приложения.

Дашборд KPI приложения (группы сервисов)Дашборд KPI приложения (группы сервисов)

В Instana Application Perspectives используются для анализа KPI на дашбордах, ролевого управления доступом, алертинга, фильтрации данных на многих экранах. Функционал Application Perspectives позволяет различным командам разработки и эксплуатации эффективно фокусироваться на своих участках и не мешать друг другу.

Анализ KPI сервисов и endpoints

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

Мы переходим на такой дашборд просто выбрав интересующий нас сервис на карте сервисов или в списке. Давайте посмотрим на сервис eum-shop это HTTP сервис Spring Boot приложения.

Дашборд KPI сервисаДашборд KPI сервиса

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

Список обнаруженных endpoint у сервиса, в данном случае он один Список обнаруженных endpoint у сервиса, в данном случае он один

Аналогично представлен дашборд с метриками производительности каждого endpoint для сфокусированного анализа.

Дашборд endpoint KPI Дашборд endpoint KPI

Интеграция с CI/CD маркеры релизов в графиках мониторинга

Когда мы анализируем метрики производительности сервисов и видим деградацию в производительности рост процента ошибок, увеличение времени исполнения важно знать, а не связано ли это с выпуском нового релиза? Для визуализации такой информации предусмотрена возможность сообщать в Instana о том, что был сделан релиз приложения или какого-то одного сервиса, сделав простой вызов к API, например, из CI-пайплайна.

Маркер релиза на дашборде сервисаМаркер релиза на дашборде сервиса

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

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

Инфраструктурный контекст и взаимосвязь сервисов

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

На вкладке Upstream, мы видим все сервисы, которые вызывают сервис eum-shop, и их ключевые метрики.

Upstream сервисы и их метрики - кто обращается к eum-shopUpstream сервисы и их метрики - кто обращается к eum-shop

Аналогично в Downstream мы видим все сервисы, которые вызывает сервис eum-shop, и их ключевые метрики - обычно это не только http сервисы, но и базы данных, кэш, очереди и тд..

Downstream сервисы и их метрики - к кому обращается eum-shopDownstream сервисы и их метрики - к кому обращается eum-shop

Instana не только определяет связи сервисов между собой, но и связи с компонентами инфраструктуры. Эта информация доступна по клику кнопки Stack.

Связь сервиса с объектами инфраструктурыСвязь сервиса с объектами инфраструктуры

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

Перейдя на вкладку Kubernetes мы увидим сущности Kubernetes, с которыми связан наш сервис pod, Kubernetes service, namespace, deployment, node.

Связь сервиса с объектами KubernetesСвязь сервиса с объектами Kubernetes

Перейдя на вкладку Application мы увидим группы приложений, в которые входит анализируемый сервис (как мы помним один сервис может входить в несколько приложений) и их сводные KPI.

Связь сервиса с приложениямиСвязь сервиса с приложениями

Нам доступен drill down на дашборды связанных компонентов для детального анализа их производительности. Давайте проанализируем наш Kubernetes кластер.

Мониторинг Kubernetes

Instana очень тесно интегрируется с Kubernetes и собирает все ключевые метрики и данные нашего кластера. Для анализа Kubernets представлен отдельный дашборд, где мы можем наблюдать метрики всего кластера, по нодам, подам, namespace, deployments, k8s сервисам и так далее.

Дашборд Kubernetes кластераДашборд Kubernetes кластера

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

Дашборд одного из Kubernetes namespaceДашборд одного из Kubernetes namespace

Инфраструктурные метрики Kubernetes уже есть в Prometheus + Grafana, но с помощью Instana мы получили связь еще и трейсов с сущностями Kubernetes. C Kubernetes дашборда мы переходим к анализу вызовов, которые были в этом namespace. Кликнув на кнопку Analyze calls мы попадем в новый раздел - раздел Аналитика.

Раздел Аналитика

Раздел Аналитика с группировкой вызовов по Kubernetes Service и KPIРаздел Аналитика с группировкой вызовов по Kubernetes Service и KPI

В разделе Аналитика нам сразу доступны данные и метрики всех вызовов, которые были отфильтрованы по нашему namespace robot-shop и сгруппированы по Kubernetes сервисам. В этом разделе доступен анализ всех вызовов, выбор и визуализация метрик, отображение диаграмм для верхнеуровнего анализа. При необходимости можно очень гибко отфильтровать и отсортировать вызовы и трейсы, чтобы найти именно нужный.

Давайте сгруппируем наши вызовы по имени endpoint:

Группировка вызовов по одному из тэгов - названию endpointГруппировка вызовов по одному из тэгов - названию endpoint

И посмотрим на графике к каким endpoints больше всего идет вызовов.

График количества вызовов, сгруппированных по endpoint nameГрафик количества вызовов, сгруппированных по endpoint name

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

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

Как мы видим, у нас применился новый фильтр endpoint.name. Но в данном случае нас интересуют только вызовы с ошибкой. Одним кликом мыши добавляем фильтр erroneous = true для получения всех вызовов с ошибкой - Instana записывает каждый вызов и все они доступны для анализа.

Список вызовов, содержащих ошибку и их длительностьСписок вызовов, содержащих ошибку и их длительность

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

Детальный анализ трейсов

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

Детальный анализ трейсаДетальный анализ трейса

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

Дерево вызовов - последовательность спанов в трейсе и их данныеДерево вызовов - последовательность спанов в трейсе и их данные

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

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

Связь спана с объектами инфраструктурыСвязь спана с объектами инфраструктуры

Анализ инфраструктурных метрик

Перейдя к Spring Boot приложению мы попадаем на соответствующий дашборд с метриками Spring Boot. Instana автоматически собирает ключевые метрики с более чем 200 технологий, например, nginx, redis, postgresql, mysql, rabbitmq, elasticsearch, kaffka, Docker, IIS, Tomcat и многих других. Для каждой из технологий доступен автоматически настроенный дашборд.

Метрики Spring Boot приложенияМетрики Spring Boot приложения

За счет того, что Instana понимает взаимосвязь всех сервисов и компонентов между собой, мы можем перейти от данных сервиса, так скажем, на уровень ниже и посмотреть уже на метрики нижележащего процесса, Docker контейнера, пода, ноды, хоста.

Расположение приложения в инфраструктуреРасположение приложения в инфраструктуре

Например, анализируя метрики Spring Boot приложения нам может быть удобно сразу посмотреть метрики JVM, в которой запущено наше приложение информация о threads, heap memory, memory pools, garbage collection и другие:

Метрики JVMМетрики JVM

Перейдя на уровень хоста мы уже видим другие ключевые метрики использование CPU, памяти, TCP активность и так далее.

Метрики машиныМетрики машины

Алертинг и выявление аномалий

Из коробки мы получили более 230 правил для определения состояния здоровья различных компонентов инфраструктуры и обнаружения аномалий в KPI сервисов и endpoints. Для каждого сервиса и каждого endpoint Instana определяет нормальное поведение KPI метрики (baseline) и, в случае отклонения от baseline, мы получим соответствующие оповещение.

Список правил алертинга и выявления аномалийСписок правил алертинга и выявления аномалий

Можно добавлять свои собственные правила. В качестве критерия могут быть метрики объектов инфраструктуры, Kubernetes, приложений и сервисов, пользовательского опыта.

Все что относится к результатам мониторинга состояния здоровья, мы можем увидеть в разделе Events.

Раздел Events - сработавшие правилаРаздел Events - сработавшие правила

В Instana существует несколько типов событий:

  • Changes изменения компонентов инфраструктуры. Мы видим события онлайн/офлайн компонентов (включение и отключение процессов, контейнеров и тд), были ли изменения в конфигурации компонента.

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

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

Перейдя ко вкладке Incidents мы увидим все инциденты.

ИнцидентыИнциденты

И кликнув на один из них, мы сможем детально его проанализировать.

Детали одного из инцидентовДетали одного из инцидентов

Что мы видим в инциденте? Время начала и завершения инцидента, сколько событий с ним связано (15), сколько было затронуто компонентов инфраструктуры и сервисов (5) и сами события. Давайте разберемся, с чего начался наш инцидент.

Детали одного из событий в инцидентеДетали одного из событий в инциденте

Началось все с того, что на сервисе catalogue-demo резко увеличилось количество вызовов с ошибками. В деталях события мы получили говорящую подсказку This can be a sign of a problem on one side of the connection. На графике метрики рейт ошибочных вызовов, которая связана с этим событием, мы видим, что у нас 60% вызовов вдруг стали содержать ошибки. Прямо отсюда мы можем перейти к анализу вызовов в разделе Аналитика, где будут автоматически применены все фильтры, связанные с этим событием вызовы будут отфильтрованы по сервису catalogue-demo и добавлен фильтр erroneous.

Что случилось дальше? За счет того, что Instana определила взаимосвязи сервисов и компонентов инфраструктуры, мы можем увидеть, как проблема на одном сервисе, затронула другие сервисы. Мы видим список других сервисов и компонентов инфраструктуры и их проблемы на одних резко уменьшилось количество вызовов, на других также увеличился процент ошибок, на третьих увеличилось среднее время транзакций.

Список событий в инциденте и его причинаСписок событий в инциденте и его причина

В расследуемом инциденте есть событие Abnormal termination процесса базы данных MySQL. Собственно это и есть причина нашего инцидента.

На этот инцидент мы получили одно оповещение от Instana, так как продукт понял, что эти проблемы связаны, вместо получения на каждое событие по каждому из 5 сервисов отдельного алерта. Такая автоматическая группировка помогла нам избежать шума в оповещениях.

С точки зрения каналов оповещения, то есть того, куда мы можем получать алерты, помимо самого интерфейса продукта, доступны следующие варианты:

Список каналов для отсылки оповещенийСписок каналов для отсылки оповещений

Что мы получили в итоге

Подведем промежуточные итоги первой части обзора. С помощью Instana мы смогли:

  • наблюдать всегда актуальную картину нашей инфраструктуры и взаимосвязи всех микросервисов между собой;

  • без каких-либо усилий по настройке собрать и использовать метрики со всех компонентов, таких как JVM, Node JS приложение, Nginx, Redis, Postgresql, сами Docker контейнеры, кластер и все сущности Kubernetes;

  • автоматически получить распределенный трейсинг для PHP, Python, Node JS, Java и других сервисов;

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

Микросервисное приложение, которое использовалось в этом обзоре, вы можете запустить самостоятельно: https://github.com/instana/robot-shop

Для изучения продукта Instana на собственной инфраструктуре доступен бесплатный триальный период: https://www.instana.com/trial/

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

Спасибо за внимание.

Подробнее..

End User Monitoring на примере Instana

02.12.2020 18:09:40 | Автор: admin

На прошлой неделе мы выложили пост про то, как мы мониторим backend и микросервисную инфраструктуру с помощью Instana, и пообещали написать продолжение про мониторинг frontend.
В итоге мы решили не ограничиваться обзором Instana в качестве инструмента контроля frontend, а копнуть немного глубже и рассказать, для чего вообще нужен End User Monitoring, с какими проблемами производительности фронта мы сталкиваемся чаще всего, какие мы используем сценарии работы с собранными данными, и как Instana помогает нам контролировать пользовательский опыт в целом.



Что такое End User Monitoring?


Чтобы по существу ответить на вопрос, что же такое мониторинг пользовательского опыта (EUM), как нам кажется, будет правильно провести аналогию с APM (мониторингом производительности приложений).
APM показывает как отрабатывает наш backend при взаимодействии пользователя с приложением, а EUM расширяет эту видимость на весь путь пользователя от браузера или мобильного приложения к серверам backend. EUM показывает влияние задержек в сети, времени рендеринга и многих других показателей (ниже рассмотрим их подробнее) на опыт пользователей при взаимодействии с нашим приложением.


Для начала давайте посмотрим какие основные проблемы позволяет отследить EUM.


Проблемы, выявляемые EUM


  1. Медленная работа приложения у пользователей


    Самая распространенная проблема. Большинство инструментов EUM предоставляют данные о скорости загрузки приложения со стороны пользователей.
    В Amazon обнаружили, что каждые дополнительные 100 мс загрузки приложения обходятся им в 1% прибыли. Было бы интерестно узнать, отслеживает ли кто-нибудь из читателей Хабра то, как скорость загрузки приложения сказывается на бизнес-показателях? Напишите, пожалуйста, в комментариях, если вы такое практикуете.


  2. JavaScript ошибки у пользователей


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


  3. Ошибки в запросах пользователя (например, 500 или 404 статус коды ответа)


    Контролируя ошибки в запросах только на стороне backend'а приложения мы упускаем ошибки, которые могут возникать при взаимодействии со сторонними сервисами, backend которых мы не контролируем.
    Например, если на внешние по отношению к нашему приложению API возникают 500-е ошибки в ответ на XHR запросы, наши пользователи не могут произвести оплату или оформить доставку, и мы не узнаем об этом, пока не будем контролировать все HTTP запросы, уходящие со страниц нашего сайта.



Выявив проблему важно понять причину ее появления. На этот вопрос также дает ответы EUM.


Типовые причины возникнования проблем на фронте


  1. Проблемы из-за связности провайдеров


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


    Для диагностики таких проблем, EUM определяет провайдера/ASN пользователя и их метрики производительности.
    Часто устранение таких проблем лежит на третьей стороне, но нам важно отслеживать и вовремя сигнализировать своему оператору дата-центра, сетевому провайдеру, оператору CDN или вендору защиты от DDOS о проблемах связности с крупными операторами.


  2. Проблемы клиентских устройств


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


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


  3. Проблемы со сторонними ресурсами


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


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


  4. Проблемы после обновления приложений


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



Итак, мы рассмотрели проблемы фронта и причины их появления, которые выявляет End User Monitoring. А теперь важно понять, какие именно метрики и данные нам может предоставить EUM для расследования инцидентов производительность фронтенда.


Метрики и данные EUM


Все данные и метрики в EUM берутся напрямую из браузеров пользователей.
Современные браузеры поддерживают W3C спецификации:


  • Resource Timing API
  • Navigation Timig API
  • Paint Timing API
  • Network Infromation API

Используя эти API браузеров EUM получают нужные нам метрики, например:


  • Page Load Time полное время загрузки страницы;
  • DNS Lookup время поиска записи DNS;
  • Time to First Byte время загрузки до первого байта;
  • DOMContentLoaded время DOM процессинга
  • прочие метрики.

Для оценки качества пользовательского опыта в мае 2020 года компания Google описала три ключевые метрики Web Vitals.
Метрики отражают три качества пользовательского опыта скорость загрузки, интерактивность и визуальную стабильность страницы:


  • Largest-Contentful Paint время отрисовки самой большой и видимой части содержимого на первом экране сайта;
  • First Input Delay время необходимое для того, чтобы страница стала интерактивной;
  • Cumulative Layout Shift степень визуальной стабильности контента на сайте.


Некоторые EUM решения также отслеживают эти метрики из коробки.


AJAX запросы


Хотели бы отдельно акцентировать внимание на важность сбора информации по производительности AJAX/XHR запросов, так как чаще всего со страниц сайта уходит много таких запросов, которые влияют на общую производительность.
Запросы могут быть как к сторонним ресурсам, например, к Google Analytics, к Яндекс.Метрике, так и к нашему API, т.е. запросы к нашему backend.


Что нам нужно увидеть по этим запросам?


  • их количество;
  • время исполнения;
  • коды ответов;
  • http методы.

Причем в случае, если запрос уходит на наш backend, с помощью связки EUM + APM мы cможем увидеть нашу транзакцию от начала до конца от клика пользователя на сайте до цепочки запросов сервисов, до запросов к базе данных на backend.


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


Теперь давайте посмотрим на основные сценарии использования собранных с frontend данных в EUM.


Сценарии использования собранных данных EUM


  1. Оповещения о проблемах


    EUM использует данные о производительности фронта в качестве триггеров оповещений о проблемах.


    Например, среднее время отрисовки страницы увеличилось, резко возросло количество JS ошибок или внешний ресурс стал отдавать 500-e ошибки на AJAX запросы наших пользователей все это должно триггерить алерты.


  2. Расследование проблем


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


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


  3. Сквозная видимость транзакций


    Корреляция данных фронта и бэкенда необходима, чтобы получить end-to-end видимость транзакций для проведения анализа причины падения производительности или проблемы. Особенно это актуально для микросервисных сред.


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



Давайте рассмотрим, как все, о чем мы говорили выше, реализовано в инструменте Instana.


Мониторинг пользовательского опыта с помощью Instana


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


Все данные о наших пользователях попадают на готовый дашборд в разделе WebSites.


Дашборд веб-браузерного приложения в Instana


На главном дашборде мы сразу видим основные ключевые метрики производительности:


  • количество просмотров страниц;
  • количество JavaScript ошибок;
  • время загрузки страниц по различным перцентилям.

В верхней части дашборда доступны следующие фильтры:


  • по типу браузера;
  • по типу операционной системы;
  • по геолокации пользователя (страна/город)
  • по дополнительным атрибутам, в том числе бизнес-атрибутам;
  • по размеру экрана.

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


Speed


Здесь мы видим все основные метрики скорости загрузки:
Метрики скорости загрузки приложения Instana


Navigation Timing и Paint Timing метрики:
Navigation и Paint Timing


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


Resources


Перейдя на вкладку Resources, мы видим список всех загружаемых ресурсов.


Resources


Для более детального анализа, давайте перейдем к одному из ресурсов:
Дашборд Resources


Мы видим основные метрики загрузки ресурса:
Дашборд Resources


Кэш статистику и размер ресурса:
Дашборд Resources


HTTP Requests


Следующее что нам нужно проанализировать это AJAX запросы. Для этого перейдем на вкладку HTTP Requests. Где, по аналогии с разделом Resources, увидим список всех запросов, давайте сразу рассмотрим один из запросов.


Дашборд HTTP Requests


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


Здесь же доступны HTTP коды ответов и разбивка по HTTP методам:
Дашборд HTTP Requests


Посмотрев на метрики запросов можем перейти уже к более детальному анализу запросов, перейдя к разделу аналитики, с котором мы уже знакомились в первой части обзора, но это мы сделаем чуть позже.
А пока перейдем к анализу JavaScript ошибок.


JavaScript ошибки


Мы видим список всех JavaScript ошибок и выбрав одну из них, попадем на дашборд.
Дашборд JS Errors


Здесь мы видим, как часто ошибка встречается у пользователей, скольких пользователей она затронула и ее стак трейс.


Дашборд JS Errors


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


Аналитика


Все метрики и данные, которые мы посмотрели берутся из загрузок страниц (Page Loads) пользователей.
И мы можем их проанализировать, просто кликнув в верху экрана на "Analyze Page Loads" и попадем в раздел Аналитика
Раздел Аналитика


В разделе Аналитика нам доступны данные и метрики всех Page Loads, где при необходимости можно отсортировать и сгруппировать Page Loads, чтобы найти запросы по нужным критериям.
Мы уже применили группировку по имени браузера и отобразаили нужные нам метрики, посмотрим детально на один из Page Load.
PageLoad
Первое, что мы сразу видим, это основная информация когда сессия началась, сколько JS ошибок было, сколько ресурсов загружено, и сколько AJAX запросов сделано.


Дальше мы видим информацию о пользователе. Важно отметить, что по умолчанию не передаются такие данные, как email, User ID, User Name это добавляется вручную. У нас на примере эти данные присутствуют.
Далее мы видим гелолокацию пользователя до уровня страны и города.
И дополнительную мета информацию, которая также добавляется вручную и нужна нам для обогащения информации о PageLoad, например, в meta можно передавать статус пользователя зарегистрированный/незарегистрированный, версия верстки и так далее.
Meta информация используется для фильтрации PageLoad в ходе дальнейшего анализа данных.
Давайте вернемся к PageLoad, что мы видим еще?


PageLoad
Дальше мы видим как происходила загрузка страницы у нашего пользователя какие ресурсы загружались, были ли ошибки, какие XHR запросы ушли с этой страницы.
И по каждому элементу, мы можем получить более подробную информацию, просто кликнув на него.
Так как мы выбрали саму страницу, то мы видим основные метрики ее загрузки Navigation Timing и также показатели Web Vitals и кнопку View Backend Trace, но о ней чуть позже.


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


PageLoad
В этой сесии был всего 1 XHR запрос и по нему мы видим данные: http метод, код ответа и также мы видим сколько времени этот запрос исполнялся на backend.
Так как мы уже мониторим backend часть нашего приложения, Instana соотнесла этот PageLoad с транзакцими на backend, которые были инициированы в ходе его выполнения.
Давайте посмотрим на трейс backend транзакции.


Корреляция с backend транзакцией


Backend Trace
Мы перешли к тому самому трейсу, который был инициирован нашим пользователем и можем проанализировать работы нашего backend в момент выполнения запроса.
Backend Trace
Здесь мы можем проанализировать медленные запросы к базе данных, инфраструктурные метрики приложения, процесса, хоста и прочую информацию, относящуюся к выполнению данного запроса на backend.


SmartAlerts


Важно не только собирать данные, но и получать своевременные оповещения о проблемах.
Для этого в Instana есть функционал "SmartAlerts" конструктор алертов на типовые сценарии проблем.
Мастер конфигурации оповещений доступен по кнопке "Add alert".


SmartAlerts


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


  • Медленная работа приложения у пользователей


    Оповещает в случае медленной загрузки веб-сайта или SPA приложения у клиентов.
    Можно выбрать метрику onLoadTime по нужному перцентилю (рекомендуется по 90-му), увидеть baseline этой метрики за последние 24 часа или 7 дней и определить чувствительность алгоритма выявления аномалий в распределении значений метрики относительно baseline.


    SmartAlerts


  • JavaScript ошибки


    Сигнализирует об увеличиении или появлении JS ошибок.
    SmartAlerts


  • HTTP коды ответа


    Оповещение о заданных кодах ответа у клиентов. Это могут быть конкретные коды (404) или группа кодов (5xx).


  • Неожиданно малое или большое количество запросов к сайту


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



Каждый из сценариев можно кастомизировать (настройка в Advanced Mode), либо принять предложенные значения по умолчанию (Basic Mode).
Для кастомизации каждого условия доступны фильтры, такие как cтрана пользователей, страница сайта, а также бизнес-атрибуты.
Например, если мы хотим получать уведомления только тогда, когда у наших VIP пользователей на странице checkout возникают проблемы, можно применить вот такой фильтр.


SmartAlerts


Далее можно кастомизировать текст алерта, который будет прилетать в выбранный канал оповещения. Например, во в таком виде алерт будет отображаться в Slack или Microsoft Teams:


SmartAlerts


В нашем сегодняшнем посте мы постарались максимально раскрыть важность мониторинга фронта, разобрать по косточкам из чего вообще состоит EUM и показать пример мониторинга пользовательского опыта с помощью платформы Instana.


Для изучения EUM Instana на собственных сайтах или SPA приложениях доступен бесплатный триальный период: https://www.instana.com/trial/


Первая часть обзора Instana с фокусом на мониторинга микросервисов и Kubernetes.


Спасибо за внимание.

Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru