EUM Browser агент
На этой странице:
- Подключение и инициализация агента
- Настройка EUM в корпоративной сети
- Поддерживаемые версии браузеров
- Какие данные собирает агент
- Устранение неисправностей
Подключение и инициализация агента
Подключение файла JavaScript
Добавьте подключение файла JavaScript агента как можно раньше в теге head
на каждой странице сайта, которые хотите отслеживать, например, в шаблон сайта.
-
Асинхронное подключение. В данном варианте загрузка JavaScript файла агента происходит в асинхронном режиме. Это позволяет не блокировать загрузку основного контента страницы, но не позволяет агенту остлеживать ошибки и события, которые произошли до момента загрузки и инициализации агента.
<script> (function (h, o, u, n, d) { h = h[d] = h[d] || { q: [], onReady: function (c) { h.q.push(c); }, }; d = o.createElement(u); d.async = 1; d.src = n; n = o.getElementsByTagName(u)[0]; n.parentNode.insertBefore(d, n); })(window, document, "script", "/js/pobp-rum.js", "POBP_RUM"); POBP_RUM.onReady(function () { POBP_RUM.init({ clientToken: "1", // обязательно, любое уникальное число applicationId: "1", // обязательно, любое уникальное число site: "https://eum.domain.ru:443", // адрес для отсылки данных, например, прокси сервер, который направляет данные на сервер Proto OBP service: "web-front-end-async", // уникальное имя приложения для идентификации данных в интерфейсе Proto OBP env: "prod", // например, prod|test|dev|qa version: "1.0.0", // версия фронт-енд приложения, обязательно sessionSampleRate: 100, // процент сэмплирования, 100 - все клиенты, 10 - данные будут собираться только с 10% клиентов trackResources: true, // обязательно trackLongTasks: true, // обязательно trackUserInteractions: true, // обязательно trackFrustrations: true, // обязательно telemetrySampleRate: 0, // обязательно allowedTracingUrls: [ "<https://api.example.com>", /https:\/\/.*\.my-api-domain\.com/, (url) => url.startsWith("<https://api.example.com>"), ], // список разрешенных для трейсинга URL, подробнее в документации ниже }); }); </script>
-
Синхронное подключение. В данном случае загрузка JavaScript файла агента будет блокировать обработку страницы. Плюс такого метода в том, что агент при ранней инцииализации будет отслеживать вообще JavaScript ошибки и все загрузки ресурсов, с самого начала обработки страницы.
<!-- подключения EUM агента Proto OBP--> <script src="/pobp-rum.js" type="text/javascript"></script> <!-- инициализация EUM агента Proto OBP--> <script> window.POBP_RUM && window.POBP_RUM.init({ clientToken: "1", // обязательно, любое уникальное число applicationId: "1", // обязательно, любое уникальное число site: "https://eum.domain.ru:443", // адрес для отсылки данных, например, прокси сервер, который направляет данные на сервер Proto OBP service: "web-front-end-async", // уникальное имя приложения для идентификации данных в интерфейсе Proto OBP env: "prod", // например, prod|test|dev|qa version: "1.0.0", // версия фронт-енд приложения, обязательно sessionSampleRate: 100, // процент сэмплирования, 100 - все клиенты, 10 - данные будут собираться только с 10% клиентов trackResources: true, // обязательно trackLongTasks: true, // обязательно trackUserInteractions: true, // обязательно trackFrustrations: true, // обязательно telemetrySampleRate: 0, // обязательно allowedTracingUrls: [ "<https://api.example.com>", /https:\/\/.*\.my-api-domain\.com/, (url) => url.startsWith("<https://api.example.com>"), ], // список разрешенных для трейсинга URL, подробнее в документации ниже }); </script>
Поддерживаемые переменные инциализации
clientToken
Обязательное
Тип: строка
Пример значения: '1111'
Комментарий: Любое уникальное число.
applicationId
Обязательное
Тип: строка
Пример значения: '2222'
Комментарий: Любое уникальное число.
site
Обязательное
Тип: строка
Пример значения: 'https://eum.site.ru'
, 'https://site.ru/eum'
Комментарий: Адрес для отсылки данных, например, прокси сервер, который направляет данные на сервер Proto OBP.
telemetrySampleRate
Обязательное
Тип: число
Пример значения: 0
Комментарий: Указать значение 0.
service
Обязательное
Тип: строка
Пример значения: 'web-frontend'
Комментарий: Уникальное имя приложения для идентификации данных в интерфейсе Proto OBP.
env
Опциональное
Тип: строка
Пример значения: 'prod'
Комментарий: Например, prod|test|dev|qa
version
Опциональное
Тип: строка
Пример значения: '1.0.0'
Комментарий: Версия фронт-енд приложения. По каждой версии в Proto OBP доступна отдельная аналитика.
sessionSampleRate
Обязательное
Тип: число
Пример значения: 100
Комментарий: Процент сэмплирования пользователей для сбора данных EUM. Значение 100 - все клиенты, 10 - данные будут собираться только с 10% клиентов.
trackUserInteractions
Обязательное
Тип: булево
Пример значения: true
Комментарий: Указать значение true. Отвечает за сбор действий пользователей, таких как click и scroll.
trackFrustrations
Обязательное
Тип: булево
Пример значения: true
Комментарий: Указать значение true. Отвечает за сбор сигналов фрустрации пользователей - rage clicks, dead clicks, error clicks.
allowedTracingUrls
Опциональное
Тип: список
Пример значения: ["<https://api.example.com>", /https:\/\/.*\.my-api-domain\.com/, (url) => url.startsWith("<https://api.example.com>")]
Комментарий: Список разрешенных для трейсинга URL. При отсылке запросов из браузера к этим URL агент будет инжектировать http заголовки, которые позволят связать трейс транзакции на бэкенде с просмотром страницы или запросом на фронтенде. Обязательно указать список URL с корректной схемой, номером порта (если в приложении при отсылке запросов используется нестандартный порт).
Работа агента c SPA фреймворками
Введение
Для Single Page Apllications (SPA) агент различает навигацию initial_load
и route_change
с помощью атрибута loading_type
. Если клик на странице ведет к новой странице без полного обновления страницы, агент генерирует новый просмотр страницы атрибутом load_type:route_change
.
Proto OBP предоставляет уникальную метрику производительности loading_time
, которая рассчитывает время, необходимое для загрузки страницы. Эта метрика работает как для первичной загрузки страницы (initial_load
), так и для изменения роута (route_change
).
Для учета современных веб-приложений время загрузки учитывает сетевые запросы и мутации DOM:
- Первичная загрузка:
loading_time
равно, в зависимости от того, что больше:- Разница между
navigationStart
иloadEventEnd
. - Разница между
navigationStart
и первым временем отсутствия активности на странице.
- Разница между
- Изменение роута SPA: Время загрузки равно разнице между кликом пользователя и первым моментом отсутствия активности на странице.
Настройка работы с SPA
-
В коде инициализации агента добавить параметр:
trackViewsManually: true,
-
В коде вашего SPA приложения самотоятельно запускать создание view (
startView
) для каждой загрузки новой страницы или изменения роута. Опционально, можно изменить имя, сервис и версию.view
: по умолчанию равно пути в URL.service
: по умолчанию равно указанному значению при инициализации агента.version
: по умолчанию равно указаному значению при инициализации агента.
Пример, в файле приложения добавить ручное создание view (
startView
) при смене роута:// агент может быть не инициализирован, поэтому нужно проверить объект POBP_RUM $rootScope.$on("$routeChangeSuccess", (event, next, current) => { if (typeof window.POBP_RUM !== "undefined") { window.POBP_RUM && window.POBP_RUM.startView( next.loadedTemplateUrl, "web-front-end", "1.0.0" ); } });
Добавление информации о пользователях
Эта опциональная информация поможет идентифицировать пользователя и связать транзакции и просмотры страниц
-
В режиме асинхронного подключения:
POBP_RUM.onReady(function() { POBP_RUM.setUser({ id: '1234', // внутренний идентификатор пользователя name: 'John Doe', // внутреннее имя пользователя email: 'john@doe.com', // email пользователя ... }) })
-
В режиме синхронного подключения:
window.POBP_RUM && window.POBP_RUM.setUser({ POBP_RUM.setUser({ id: '1234', // внутренний идентификатор пользователя name: 'John Doe', // внутреннее имя пользователя email: 'john@doe.com', // email пользователя ... }) })
Исключение определенных JavaScript ошибок
В случае, если небходимо исключить из сбора какие-то JavaScript ошибки, необходимо добавить к коду инициализации агента следующий снипет:
POBP_RUM.init({
...,
beforeSend: (event, context) => {
// отключение передачи ошибок с текстом сообщениея 'ignored error'
if (event.type === 'error' && event.error.message.includes('ignored error')) {
return false
}
},
...
});
Запись сессий пользователя
Для включения функционала записи сессий, необходимо добавить к коду инициализации агента следующий снипет:
POBP_RUM.init({
...
sessionSampleRate: 50, // процент сэмплирования, 100 - все сессии, 10 - данные будут собираться только с 10% сессий
)},
POBP_RUM.startSessionReplayRecording(); // включение функционала заиписи сессий
Настройка EUM в корпоративной сети
Content Security Policy (CSP)
Добавьте директиву:
connect-src https://<адрес сервер Proto OBP или прокси>
Поддерживаемые версии браузеров
Поддерживаются все современные браузеры.
Возможности | Chrome | Firefox | Safari | Edge | Chrome Android | Safari iOS | IE11 | < IE11 | Opera |
---|---|---|---|---|---|---|---|---|---|
сбор ошибок | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ |
трейсинг | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ |
смена роута SPA | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ |
время загрузки | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ |
resource timing | ✅ | ✅ | 2 | ✅ | ✅ | 2 | 3 | ❌ | ✅ |
navigation timing | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ |
web vitals | ✅ | 1 | 1 | ✅ | ✅ | 1 | ❌ | ❌ | ✅ |
FCP | ✅ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ |
- только First Input Delay
- без информации о размере ресурса
- только firstByte и загрузка
Какие данные собирает агент
Помимо метрик производительности, агент также собирает следующую информацию, которая доступна для просмотра и анализа трейсов транзакций и просмотров страниц - данные добавляются в теги трейсов:
ua.string
заголовок User-Agent
пример значения: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36
device.type
тип устройства
варианты значений:
desktop - компьютер или ноутбук
mobile - мобильное устройство
table - плашет
bot - бот (синтетический клиент)
os.name
тип операционной системы
примеры значений: windows, macos, linux, iOS, android и тд
os.version
версия операционной системы
пример значения: 10.15.7
ua.name
название браузера
пример значения: Chrome
ua.version
версия браузера
пример значения: 104.0.0.0
geo.ip
IP адрес пользователя
пример значения: 45.241.11.200
geo.country_iso_code
страна пользователя
пример значения: RU
geo.country_subdivision
регион пользователя
пример значения: Moskva
geo.city
город пользователя
пример значения: Rublevo
В случае необходимости отключения логгирования IP адреса пользователя добавьте в конфигурацию компонента proto-trace-processor
переменную (с версии 178):
POBP_TRACE_PROCESSOR_COLLECT_EUM_IP: false
Устранение неисправностей
Нет данных
- Поздняя инициализация. Если вы не видите части запросов, таких как XHR, то следует инициализировать агента как можно раньше. Например, инициализировать агента до того, как происходит инициализации другой библиотеки, с помощью которой отсылаются XHR запросы с клиентов.
Проверка инициализации агента
Выполните window.POBP_RUM.getInternalContext()
в консоли браузера и убедитесь, что возвращаются данные, как на примере ниже.
Настройка CORS для передачи заголовков ProtoOBP
В случае, если от Браузера пользователя уходят запросы на сервер с инструментированным приложением трейсером ProtoOBP необходимо на стороне веб-сервера разрешать передачу следующих заголовков, добавив их в Access-Control-Allow-Headers
:
x-protoobp-origin
x-protoobp-parent-id
x-protoobp-sampling-priority
x-protoobp-trace-id
Подробнее о настройке CORS: Документация
А также, необходимо разрешить Preflight
запросы с методом OPTIONS
. Документация