웹의 비정상 종료 보고서 맞춤설정

플랫폼 선택: iOS+ Android 웹 Flutter Unity


Firebase Console(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'
});

이러한 맞춤 속성은 예외 보고서에 보관되며 Crashlytics 대시보드 문제 뷰의 키 탭에 표시됩니다.

원격 분석 레코드 강제 플러시

기본적으로 웹 원격 분석 엔진은 배터리 수명, CPU 성능, 네트워크 대역폭을 보존하기 위해 로그를 메모리 세그먼트로 일괄 처리합니다. 그러나 수명이 짧은 실행 환경의 경우 실행 컨텍스트가 소멸되기 직전에 로그를 업로드해야 합니다.

비동기 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 Console에서 샘플링 레이트 구성

  1. Firebase 콘솔에서 DevOps 및 참여 > Crashlytics 대시보드로 이동합니다.

  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 플래그는 AIP-160 필터 문자열이 올바르게 URL 인코딩되었는지 확인합니다.

      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 응답에서 앱(projects/PROJECT_ID/locations/LOCATION/configs/<CONFIG_ID>)의 name 필드를 찾은 다음 CONFIG_NAME 변수로 설정합니다.

      CONFIG_NAME="CONFIG_NAME"
      
  3. 샘플링 레이트를 설정합니다.

    샘플링 레이트를 조정하려면 PATCH 메서드를 사용하여 sampling_rate 필드를 업데이트합니다. 쿼리 매개변수에 updateMask=sampling_rate를 지정해야 합니다. 샘플링 레이트는 수집할 세션의 비율을 나타내는 double 값입니다(예: 25%의 경우 0.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를 설정하면 원격 분석 수집이 사용 설정됩니다. Crashlytics SDK를 설치한 후 원격 분석 수집을 동적으로 사용 중지하거나 다시 사용 설정해야 하는 경우 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 플래그는 AIP-160 필터 문자열이 올바르게 URL 인코딩되었는지 확인합니다.

      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 응답에서 앱(projects/PROJECT_ID/locations/LOCATION/configs/<CONFIG_ID>)의 name 필드를 찾은 다음 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"