Как настроить отчеты о сбоях для веб-сайтов

Выберите платформу: iOS+ Android Web Flutter Unity


В консоли Firebase (DevOps & Engagement (DevOps и взаимодействие) > панель управления Crashlytics) можно нажать на проблему и получить подробный отчет о событии. Вы можете настраивать эти отчеты и управлять сбором телеметрии, чтобы лучше понимать, что происходит в вашем веб-приложении.

Как программно сообщать об обработанных исключениях

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

Вот как отслеживать распространенность сбоев и диагностические атрибуты для пользователей:

import { recordError, getCrashlytics } from '@firebase/crashlytics';
import { app } from './lib/firebase';

const crashlytics = getCrashlytics(app);

async function submitPaymentForm() {
  try {
    await api.processTransaction();
  } catch (error) {
    // Manually record handled exceptions with diagnostic context
    recordError(crashlytics, error, {
      userTier: 'Premium Gold',
      checkoutStage: 'BillingAddressVerification',
      transactionCode: 'tx_8412_err',
      retryAttempts: 2
    });
    showFallbackBanner(error);
  }
}

Как добавить специальные ключи

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

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

import { recordError, getCrashlytics } from '@firebase/crashlytics';
import { app } from './lib/firebase'; // Shared initialization script

const crashlytics = getCrashlytics(app);

// Pass custom key-value diagnostic metadata within recordError
recordError(crashlytics, error, {
  userTier: 'Premium Gold',
  checkoutStage: 'BillingAddressVerification',
  transactionCode: 'tx_8412_err',
  retryAttempts: 2,
  breadcrumb: 'User opened shopping cart',
  lastAction: 'Click Checkout Button'
});

Эти настраиваемые атрибуты сохраняются в отчете об исключениях и отображаются на вкладке Keys (Ключи) в представлении проблем на панели управления Crashlytics.

Принудительная очистка записей телеметрии

По умолчанию система веб-телеметрии группирует журналы в сегменты памяти, чтобы экономить заряд батареи, производительность ЦП и пропускную способность сети. Однако в случае кратковременных сред выполнения журналы должны загружаться непосредственно перед уничтожением контекста выполнения.

Вы можете использовать асинхронную команду flush, чтобы немедленно отправить все ошибки из очереди в серверную часть:

import { recordError, flush, getCrashlytics } from '@firebase/crashlytics';
import { app } from './lib/firebase';

const crashlytics = getCrashlytics(app);

async function handleApplicationCrash(error: Error) {
  // Capture the error with immediate priority
  recordError(crashlytics, error, { priority: 'IMMEDIATE' });

  // Force an immediate upload before the process terminates or reloads
  await flush(crashlytics);

  // Safe to terminate or refresh the current execution context
  window.location.reload();
}

Как настроить частоту дискретизации

Если вы хотите контролировать объем и стоимость телеметрии, вы можете настроить выборку сеансов пользователей одним из следующих способов:

Вариант 1 (рекомендуется). Настройте частоту дискретизации в консоли Firebase.

  1. В консоли Firebase перейдите в раздел DevOps & Engagement (DevOps и вовлечение) > Crashlytics dashboard (Панель управления ).

  2. Выберите веб-приложение в раскрывающемся списке вверху страницы.

  3. В правом верхнем углу панели нажмите Настроить выборку.

  4. Задайте частоту дискретизации в процентах (от 0% до 100%), чтобы контролировать процент событий и сеансов, собираемых от клиентов.

Вариант 2. Настройте частоту дискретизации с помощью Firebase Telemetry Admin API

Вы можете использовать Firebase Telemetry Admin API (firebasetelemetryadmin.googleapis.com/v1alpha), чтобы управлять настройками сбора телеметрии для приложений Firebase.

  1. Настройте в терминале следующие обязательные переменные:

    PROJECT_ID="PROJECT_ID"
    LOCATION="LOCATION"  # for example, global
    APP_ID="FIREBASE_APP_ID"  # for example, 1:1234567890:web:abcdef123456
    TOKEN=$(gcloud auth application-default print-access-token)
    
  2. Найдите CONFIG_NAME и настройте его как переменную в терминале:

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

    1. Получите список конфигураций в проекте и отфильтруйте их по FIREBASE_APP_ID. Флаги curl -G и --data-urlencode обеспечивают правильное URL-кодирование строки фильтра AIP-160:

      curl -G \
        -H "Authorization: Bearer $TOKEN" \
        --data-urlencode "filter=app_id=\"${APP_ID}\"" \
        "https://firebasetelemetryadmin.googleapis.com/v1alpha/projects/${PROJECT_ID}/locations/${LOCATION}/configs"
      
    2. В ответе JSON найдите поле name для своего приложения (projects/PROJECT_ID/locations/LOCATION/configs/<CONFIG_ID>) и задайте его в качестве переменной CONFIG_NAME:

      CONFIG_NAME="CONFIG_NAME"
      
  3. Задайте частоту дискретизации:

    Чтобы изменить частоту дискретизации, используйте метод PATCH для обновления поля sampling_rate. В параметрах запроса необходимо указать updateMask=sampling_rate. Частота дискретизации – это значение двойной точности, представляющее процент сеансов, которые нужно отслеживать (например, 0.25 для 25 %):

    # Example: Set sampling rate to 25%
    curl -X PATCH \
      -H "Authorization: Bearer $TOKEN" \
      -H "Content-Type: application/json" \
      -d "{
        \"sampling_rate\": 0.25,
        \"app_id\": \"${APP_ID}\"
      }" \
      "https://firebasetelemetryadmin.googleapis.com/v1alpha/${CONFIG_NAME}?updateMask=sampling_rate"
    

Как включить или отключить сбор телеметрии

По умолчанию сбор телеметрии включен, когда вы настраиваете Crashlytics для веб-приложения. Если вам нужно динамически отключить или повторно включить сбор телеметрии после установки SDK Crashlytics, вы можете управлять конечными точками сбора с помощью Firebase Telemetry Admin API (firebasetelemetryadmin.googleapis.com/v1alpha).

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

  1. Настройте в терминале следующие обязательные переменные:

    PROJECT_ID="PROJECT_ID"
    LOCATION="LOCATION"  # for example, global
    APP_ID="FIREBASE_APP_ID"  # for example, 1:1234567890:web:abcdef123456
    TOKEN=$(gcloud auth application-default print-access-token)
    
  2. Найдите CONFIG_NAME и настройте его как переменную в терминале:

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

    1. Получите список конфигураций в проекте и отфильтруйте их по FIREBASE_APP_ID. Флаги curl -G и --data-urlencode обеспечивают правильное URL-кодирование строки фильтра AIP-160:

      curl -G \
        -H "Authorization: Bearer $TOKEN" \
        --data-urlencode "filter=app_id=\"${APP_ID}\"" \
        "https://firebasetelemetryadmin.googleapis.com/v1alpha/projects/${PROJECT_ID}/locations/${LOCATION}/configs"
      
    2. В ответе JSON найдите поле name для своего приложения (projects/PROJECT_ID/locations/LOCATION/configs/<CONFIG_ID>) и задайте его в качестве переменной CONFIG_NAME:

      CONFIG_NAME="CONFIG_NAME"
      

Отключить сбор телеметрии

Чтобы отключить сбор телеметрии, используйте специальный метод :disable:

curl -X POST \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{}' \
  "https://firebasetelemetryadmin.googleapis.com/v1alpha/${CONFIG_NAME}:disable"

Как повторно включить сбор телеметрии

Чтобы снова включить сбор телеметрии, вызовите метод :enable:

curl -X POST \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{}' \
  "https://firebasetelemetryadmin.googleapis.com/v1alpha/${CONFIG_NAME}:enable"