CloudWatch

Как интегрировать CloudWatch с OpenReplay и видеть ошибки бэкенда рядом с записями сессий.

CloudWatch

Как интегрировать CloudWatch с OpenReplay и видеть ошибки бэкенда рядом с записями сессий.

1. Создание сервисной учётной записи

Section titled 1. Создание сервисной учётной записи
  1. Войдите в свою учётную запись AWS.
  2. Перейдите на панель управления IAM.
  3. Нажмите Users.
  4. Нажмите кнопку Add user.
  5. Укажите имя «openreplay_cw».
  6. В типе доступа выберите Programmatic access.
  7. Нажмите кнопку Next: Permissions.
  8. Выберите Attach existing policies directly
  9. В списке разрешений выберите CloudWatchReadOnlyAccess.
  10. Нажмите кнопку Next: Tags.
  11. Нажмите кнопку Next: Review.
  12. Нажмите кнопку Create user.
  13. Скопируйте Access key ID и Secret access key.

2. Включение CloudWatch в OpenReplay

Section titled 2. Включение CloudWatch в OpenReplay

Укажите свои Access key ID и Secret access key в панели управления OpenReplay в разделе «Preferences > Integration», выберите регион и выберите группу логов, которую хотите отслеживать, из выпадающего списка.

Интеграция CloudWatch в OpenReplay

3. Передача openReplaySessionToken

Section titled 3. Передача openReplaySessionToken

Чтобы связать событие CloudWatch с записанной пользовательской сессией, уникальный токен должен передаваться из вашего фронтенда на ваш бэкенд при каждом запросе, который вы хотите отслеживать. Это можно сделать с помощью пользовательского HTTP-заголовка. В приведённом ниже примере мы используем функцию fetch для отправки этого заголовка.

const headers = {
  Accept: 'application/json',
  'Content-Type': 'application/json',
};
if (tracker.getSessionToken()) { // use window.OpenReplay instead of tracker if you're using the snippet
  headers['X-OpenReplay-SessionToken'] = tracker.getSessionToken(); // Inject openReplaySessionToken
}
fetch('www.your-backend.com', {
  'GET',
  headers,
});

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

Ниже приведён пример на Python с использованием Monkey Patching.

import sys
import traceback
#...
old_tb = traceback.print_exception
old_f = sys.stdout
old_e = sys.stderr
OPENREPLAY_SESSION_TOKEN = None

class F:
    def write(self, x):
        if OPENREPLAY_SESSION_TOKEN is not None and x != '\n':
            old_f.write(f"[openReplaySessionToken={OPENREPLAY_SESSION_TOKEN}] {x}")
        else:
            old_f.write(x)

    def flush(self):
        pass

def tb_print_exception(etype, value, tb, limit=None, file=None, chain=True):
    if OPENREPLAY_SESSION_TOKEN is not None:
        value = type(value)(f"[openReplaySessionToken={OPENREPLAY_SESSION_TOKEN}] " + str(value))
    old_tb(etype, value, tb, limit, file, chain)

traceback.print_exception = tb_print_exception

sys.stderr = F()

Имя тега openReplaySessionToken чувствительно к регистру.

Остались вопросы?

Section titled Остались вопросы?

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