Устранение неполадок корреляции RUM для веб-приложений: различия между версиями

Материал из Документация Ключ-АСТРОМ
(Новая страница: «= Проблема = Ключ-АСТРОМ '''RUM''' сопоставляет действия пользователя с соответствующими им...»)
 
(нет различий)

Текущая версия на 16:03, 29 августа 2025

Проблема

Ключ-АСТРОМ RUM сопоставляет действия пользователя с соответствующими им распределёнными трассировками, обеспечивая непрерывное сквозное наблюдение. Эта корреляция обеспечивает такие функции, как:

  • Переход от каскадной диаграммы анализа к распределенным трассировкам  
  • Связывание сервисов с приложениями RUM
  • Создание пользовательских тегов , а также свойств действий пользователя и сеанса из свойств запроса на стороне сервера    

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

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

Убедитесь, что проблема связана с корреляцией RUM

Чтобы диагностировать любую проблему корреляции RUM, необходимо сначала определить как действие пользователя, так и распределённую трассировку, которыя, как ожидается, будет коррелирована. Используйте раздел Распределённые трассировки, чтобы найти трассировку, которая, как ожидается, будет коррелирована, сузьте временной интервал и примените параметры фильтрации для уточнения поиска.    

Это поможет вам отличить проблемы корреляции RUM от других типов проблем, таких как:

Распределенная трассировка не была зафиксирована

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

Наиболее распространенные причины отсутствия трассировок:

  • Активна функция адаптивного управления трафиком. Если трассировка не была получена из-за адаптивного управления трафиком, при наведении курсора на ресурс в каскадном анализе  вместо кнопки Просмотреть трассировку появится соответствующее сообщение.  
  • Ресурс обслуживался из кэша, а не с инструментированного сервера, например через CDN.
  • Если трассировка постоянно отсутствует, проверьте, что группа процессов правильно инструментирована, включен полнофункциональный мониторинг и сбор трассировки не отключен правилом исключения URL-адресов (Настройки → Мониторинг служб на стороне сервера → Глубокий мониторинг → Исключить определенные URL-адреса входящих веб-запросов).

Действие пользователя не было зафиксировано

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

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

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

  • Скрипты или блокировщики рекламы, установленные в браузерах конечных пользователей
  • Запросы, не исходящие от браузера
  • Opt-in mode
  • Контроль затрат и трафика
  • Предотвращение перегрузки
  • Исключения браузера
  • Исключения IP-адресов
  • RUM отключен для браузеров с функцией «Не отслеживать»
  • Использование технологии, которая не поддерживает автоматическое внедрение и поэтому требует безагентного мониторинга  

Убедитесь, что корреляция RUM поддерживается в вашем сценарии

Корректная RUM-корреляция поддерживается не во всех сценариях, а в некоторых случаях не поддерживается вообще. Ключевые факторы, которые следует учитывать:

  • Политика одинакового происхождения — механизм безопасности, реализуемый браузером.
  • Технология, используемая на первом уровне, инструментирована ЕдинымАгентом. Список технологий с полной или ограниченной поддержкой корреляции RUM доступен здесь: Поддержка технологий - Мониторинг реальных пользователей - Веб-серверы и приложения. Для AWS Lambda корреляцию можно настроить для XHR. Для других технологий корреляция RUM в настоящее время не поддерживается.  

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

Image4015.png

В сценариях, где дерево решений требует использования заголовка x-dtc или запросов CORS с учётными данными, требуется дополнительная настройка.

Конфигурация, специфичная для технологии

Для следующих технологий вам необходимо включить определенные функции ЕдиногоАгента:

  • Kestrel: включить мониторинг реальных пользователей (RUM) для ASP.NET Core и .NET ASP.NET Sensor V2 .  
  • Netty: включите Netty Real User Monitoring (RUM) для распределённой трассировки корреляции. В средах, созданных в версии 1.293 или более поздней, эта функция включена по умолчанию. В зависимости от версии ЕдиногоАгента вам также может потребоваться активировать переключатель «Активировать эту функцию также в ЕдиныхАгентах», соответствующий минимальной версии Opt-in .  

Функции ЕдиногоАгентаН можно включить в разделе «Настройки» → «Предпочтения» → «Функции ЕдиногоАгента» или «Группа процессов» → «Настройки» → «Функции ЕдиногоАгента».  

Для других поддерживаемых технологий необходимые функции ЕдиногоАгента для корреляции RUM включены по умолчанию. К ним относятся:

  • Real User Monitoring
  • Web server
  • Java servlet
  • Node.js web request

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

Интеграция с использованием OpenTelemetry

Существует два способа интеграции OpenTelemetry с Ключ-АСТРОМ:

  • Использование сенсора ЕдиногоАгента
  • Использование сбора трассировок OpenTelemetry

Если трассировка расширена с использованием датчика диапазона ЕдиногоАгента, вы можете применить приведенное выше дерево решений как есть.

Если используется захват трассировки OpenTelemetry и ни одна её часть не захвачена ЕдинымАгентом, корреляция RUM невозможна. Если часть трассировки захвачена OpenTelemetry, а другая — ЕдинымАгентом, определите сегмент, захваченный ЕдинымАгентом, и примените дерево решений к этому сегменту.

Обходной путь для Envoy

Модуль кода ЕдиногоАгента для Envoy не поддерживает RUM. Для обеспечения корреляции RUM в сценариях, где ЕдиныйАгент с поддержкой RUM развёрнут на Envoy, необходимо отключить мониторинг Envoy в ЕдиномАгенте. Начиная с версии Envoy 1.29, доступна заменяющая интеграция, использующая OpenTelemetry и не препятствующая корреляции RUM. Инструкции по настройке см. в разделе Настройка Envoy для Ключ-АСТРОМ.

Убедитесь, что обработка CORS настроена правильно

В сценариях с кросс-источниками дерево решений требует использования заголовка x-dtc или запросов CORS с учётными данными для распространения информации, необходимой для корреляции RUM. В следующих разделах вы узнаете, как проверить соответствие вашей конфигурации этим требованиям.

Заголовок x-dtc

Чтобы разрешить RUM JavaScript добавлять заголовок x-dtc к запросам, необходимо определить регулярное выражение, соответствующее целевому URL-адресу в конфигурации приложения.

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

В частности, предварительный ответ должен включать заголовок Access-Control-Allow-Headers: x-dtc, разрешающий использование заголовка x-dtc. Он также должен включать заголовок Access-Control-Allow-Origin, разрешающий использование запрашивающего источника. Кроме того, в зависимости от используемого метода HTTP, ответ может потребовать включения заголовка Access-Control-Allow-Methods.

Image4016.png

Если предварительный запрос выполнен успешно, браузер включает заголовок x-dtc в фактический запрос:

Image4017.png

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

Запросы CORS с учетными данными

Запрос CORS с учетными данными инициируется, когда отслеживаемое приложение:

  • Использует свойство withCredentials с XMLHttpRequest
  • Устанавливает режим учетных данных include с помощью Fetch API
  • Добавляет атрибут crossorigin="use-credentials" к элементам HTML

Сервер должен ответить заголовком Access-Control-Allow-Credentials: true, причём определённым заголовком Access-Control-Allow-Origin (то есть без подстановочных знаков). Отсутствие этих заголовков приведёт к ошибке CORS в консоли браузера.  

Вы можете подтвердить эту настройку, проверив, отправляет ли браузер файлы cookie RUM, такие как dtCookie, по запросу.  

Файлы cookie RUM отправляются только в случае их применимости. Как правило, специально настраивать домен файлов cookie не требуется, поскольку и RUM JavaScript, и ЕдиныйАгент автоматически выбирают максимально широкий домен. Однако, если файлы cookie отсутствуют в запросе, убедитесь, что конфигурация домена файлов cookie не ограничивает их поддоменом, исключающим данный запрос.

Image4018.png

Определите общие проблемы

Если корреляция RUM поддерживается в соответствии с деревом решений и, при необходимости, обработка CORS настроена правильно, но действие пользователя и соответствующая ему трассировка по-прежнему не связаны, рассмотрите следующие распространенные проблемы.

Отключенная функциональность ЕдиногоАгента

Чтобы убедиться, что функциональность ЕдиногоАгента, необходимая для корреляции RUM, активна, выполните следующие действия:

  1. Убедитесь, что функции ЕдиногоАгента, перечисленные в разделе «Конфигурация, зависящая от технологии», включены.  
  2. Убедитесь, что Real User Monitoring включен для группы процессов на первом инструментированном уровне: Ваша группа процессов → Настройки → Real User Monitoring → Включить Real User Monitoring

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

Если вы отключили параметр группы процессов «Включить мониторинг реальных пользователей» для предотвращения автоматического внедрения и решили вручную вставить RUM JavaScript, вместо этого используйте пользовательское правило внедрения.

Инфраструктура удаляет заголовки запросов и файлы cookie

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

Один из ключевых cookie-файлов, используемых для корреляции RUM, — это dtCookie, который ЕдиныйАгент может создавать и обновлять. Если удалить из заголовка запроса dtCookie до того, как ЕдиныйАгент достигнет Cookie ЕдиногоАгента, этот ЕдиныйАгент сгенерирует новый Set-Cookie и вернет его в заголовке ответа.    

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

Image4019.png

Инфраструктура добавляет атрибут HttpOnly к dtCookie

Этот HttpOnly атрибут не поддерживается для файлов cookie RUM, так как он препятствует доступу к ним со стороны JavaScript RUM. Если ваша инфраструктура добавляет его в файлы cookie RUM, это, помимо прочего, приведёт к проблемам с корреляцией RUM. Для решения этой проблемы необходимо удалить этот атрибут.  

Как проверить наличие HttpOnly

Чтобы определить, добавляет ли ваша инфраструктура атрибут HttpOnly, откройте вкладку «Приложение» в Chrome DevTools и проверьте, помечен ли атрибут dtCookie как HttpOnly.

Image4020.png

На вкладке «Сеть» проверьте запрос документа Set-Cookie и заголовок ответа, который устанавливает dtCookie. Если заголовок содержит атрибут HttpOnly, это подтверждает наличие проблемы.

Image4021.png

Проблемы с доменом cookie

Если домен, назначенный dtCookie, не совпадает с доменом запроса, как показано на скриншоте ниже, корреляция RUM не будет выполнена.

Image4022.png

Такое несоответствие может возникнуть по двум причинам:

  • Автоматическое определение домена не удалось, поскольку определение имени хоста было настроено неправильно.
  • Домен cookie был вручную настроен на домен, который не охватывает домен запроса.

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

Проверьте время отклика некоррелированной трасиировки, щёлкнув по её корневому узлу — самому верхнему узлу в иерархии трассировок — и открыв вкладку «Время отклика». Если время отклика превышает 3 минуты, надёжная корреляция RUM становится невозможной.