콘솔로 이동

BigQuery에 Performance Monitoring 데이터 내보내기

추가 분석을 위해 Performance Monitoring 데이터를 BigQuery로 내보낼 수 있습니다. BigQuery를 사용하면 BigQuery SQL로 데이터를 분석하여 다른 클라우드 제공업체로 내보내거나, 맞춤 ML 모델에 데이터를 사용할 수 있습니다.

BigQuery 내보내기 사용 설정

  1. 다음 옵션 중 하나를 사용하여 시작합니다.

    • Performance Monitoring 대시보드에서 문제 피드 바로 아래 있는 BigQuery 연결을 클릭합니다.

    • Firebase Console의 통합 페이지에서 BigQuery 카드에 있는 연결을 클릭합니다.

  2. 화면의 안내에 따라 BigQuery를 사용 설정합니다.

프로젝트를 BiqQuery에 연결하면 Firebase는 다음과 같이 작동합니다.

  • Firebase에서 기존 데이터의 사본을 BigQuery로 내보냅니다.

    • 초기 연결 시 Firebase는 실험을 바로 시작할 수 있도록 BigQuery 테이블을 자동으로 예약하여 지난 7일의 데이터를 백필합니다. BigQuery에서 초기 데이터를 사용할 수 있기까지 몇 시간이 소요됩니다.

    • 최대 지난 30일 동안 데이터 백필을 수동으로 예약할 수도 있습니다.

  • Firebase에서 Firebase 프로젝트와 BigQuery 간의 정기적인 데이터 동기화를 설정합니다.

  • 기본적으로 프로젝트에 있는 모든 앱은 BigQuery에 연결되며 나중에 프로젝트에 추가한 앱은 BigQuery에 자동으로 연결됩니다. 사용자는 데이터를 전송하는 앱을 관리할 수 있습니다.

BigQuery 내보내기를 중지하려면 Firebase Console에서 프로젝트를 연결 해제합니다.

어떤 유형의 데이터를 BigQuery로 내보내나요?

프로젝트의 각 앱에서 내보내기를 통해 캡처된 모든 성능 이벤트가 포함된 테이블이 생성됩니다. 테이블의 각 행이 단일 성능 이벤트로 다음 중 하나가 될 수 있습니다.

  • 기간 추적 — 앱 시작, 포그라운드, 백그라운드, 모든 개발자 구현 추적을 포함합니다.

    • event_typeDURATION_TRACE입니다.
    • event_name은 추적 이름과 동일합니다.
  • 추적 측정항목 — 이전에 카운터로 알려진 추적과 연결된 개발자 구현 측정항목입니다.

    • event_typeTRACE_METRIC입니다.
    • event_name은 측정항목의 이름입니다.
    • parent_trace_name은 이 측정항목을 포함하는 추적 이름입니다.
  • 화면 추적 — 화면의 전체 기간을 추적합니다.

    • event_typeSCREEN_TRACE입니다.
    • event_name은 프리픽스 _st_가 더해진 실제 화면 이름입니다.
  • 네트워크 요청

    • event_typeNETWORK_REQUEST입니다.
    • event_name은 네트워크 요청 URL의 분류된 패턴입니다.

각 성능 이벤트에는 이벤트 속성(예: 국가와 클라이언트 기기의 이동통신사)과 이벤트별 정보가 포함됩니다.

  • 기간 추적, 추적 측정항목, 화면 추적에는 trace_info가 포함됩니다.
  • 추적 측정항목에는 trace_info.metric_info가 포함됩니다.
  • 화면 추적에는 trace_info.screen_info가 포함됩니다.
  • 네트워크 요청에는 network_info가 포함됩니다.

세부 데이터 스키마

필드 이름 유형 설명
event_timestamp 타임스탬프 이벤트가 클라이언트 기기에서 시작되었을 때 Epoch 이후의 타임스탬프입니다.
app_display_version 문자열 애플리케이션의 디스플레이 버전입니다(예: '4.1.7').
  • Android — VersionName
  • iOS — CFBundleShortVersionString
app_build_version 문자열 애플리케이션의 빌드 버전입니다(예: '1523456').
  • Android — VersionCode
  • iOS — CFBundleVersion
os_version 문자열 클라이언트 기기의 OS 버전입니다.
  • Android — Android API 레벨(예: '26')
  • iOS — iOS 버전(예: '11.4')
device_name 문자열 클라이언트 기기의 이름입니다(예: 'Google Pixel').
country 문자열 이벤트가 진행된 국가의 두 자리 국가 코드입니다(예: 'US', 알 수 없는 국가의 경우 'ZZ').
carrier 문자열 클라이언트 기기의 이동통신사입니다.
radio_type 문자열 이벤트가 진행된 활성 무선 유형입니다(예: 'WIFI').
custom_attributes ARRAY<RECORD> 이 이벤트에 연결된 모든 맞춤 속성입니다.
custom_attributes.key 문자열 맞춤 속성의 키입니다.
custom_attributes.value 문자열 맞춤 속성의 값입니다.
event_type 문자열 이벤트 유형입니다. 가능한 값은 다음과 같습니다.
  • DURATION_TRACE — 앱 시작, 포그라운드, 백그라운드, 모든 개발자 구현 추적 포함
  • SCREEN_TRACE — 화면의 전체 기간 추적
  • TRACE_METRIC — 이전에 카운터로 알려진 추적과 연결된 개발자 구현 측정항목
  • NETWORK_REQUEST
event_name 문자열 이벤트 이름입니다.
  • DURATION_TRACE — 추적 이름
  • SCREEN_TRACE_st_와 추적 이름으로 구성
  • NETWORK_REQUEST — 네트워크 요청 URL 패턴
  • TRACE_METRIC — 측정항목 이름
parent_trace_name 문자열 추적 측정항목이 있는 상위 추적의 이름입니다.
TRACE_METRIC에만 제공됩니다.
trace_info 레코드 DURATION_TRACE, SCREEN_TRACE, TRACE_METRIC에만 제공됩니다.
trace_info.duration_us int64
  • DURATION_TRACESCREEN_TRACE — 이 추적이 지속되는 기간
  • TRACE_METRIC — 상위 추적이 지속되는 기간
단위는 마이크로초입니다.
trace_info.screen_info 레코드 SCREEN_TRACE에만 제공됩니다.
trace_info.screen_info.slow_frame_ratio float64 화면 추적의 느린 프레임 비율입니다(0에서 1 사이). 예를 들어 값이 0.05이면 이 화면 인스턴스의 프레임 중 5%가 렌더링에 16ms 이상 걸린다는 것을 의미합니다.
trace_info.screen_info.frozen_frame_ratio float64 화면 추적의 정지된 프레임 비율입니다(0에서 1 사이). 예를 들어 값이 0.05이면 이 화면 인스턴스의 프레임 중 5%가 렌더링에 700ms 이상 걸린다는 것을 의미합니다.
trace_info.metric_info 레코드 TRACE_METRIC에만 제공됩니다.
trace_info.metric_info.metric_value int64 추적 측정항목의 값입니다.
network_info 레코드 NETWORK_REQUEST에만 제공됩니다.
network_info.response_code int64 네트워크 응답의 HTTP 응답 코드입니다(예: 200, 404).
network_info.response_mime_type 문자열 MIME 유형의 네트워크 응답입니다(예: 'text/html').
network_info.request_http_method 문자열 네트워크 요청의 HTTP 메소드입니다(예: 'GET' 또는 'POST').
network_info.request_payload_bytes int64 네트워크 요청 페이로드의 크기입니다.
단위는 바이트입니다.
network_info.response_payload_bytes int64 네트워크 응답 페이로드의 크기입니다.
단위는 바이트입니다.
network_info.request_completed_time_us int64 네트워크 요청 전송이 완료되고 event_timestamp 이후의 마이크로초입니다.
단위는 마이크로초입니다.
network_info.response_initiated_time_us int64 네트워크 응답이 시작되고 event_timestamp 이후의 마이크로초입니다.
단위는 마이크로초입니다.
network_info.response_completed_time_us int64 네트워크 응답이 완료되고 event_timestamp 이후의 마이크로초입니다.
단위는 마이크로초입니다.

내보낸 데이터로 무엇을 할 수 있나요?

다음 섹션에는 내보낸 Performance Monitoring 데이터에 대해 BigQuery에서 실행할 수 있는 쿼리의 예가 나와 있습니다.

국가별 평균 앱 지연 시간 분석 보기

SELECT AVG(trace_info.duration_us), country
FROM `table-name`
WHERE _PARTITIONTIME > TIMESTAMP("YYYY-MM-DD")
AND event_type = "DURATION_TRACE"
AND event_name = "_app_start"
GROUP BY 2;

다양한 조건별 정지된 프레임 비율 확인

예를 들어 다양한 무선 유형(WiFi, 4G 등)을 사용할 때 사용자가 앱의 각 화면에 머문 시간과 함께 정지된 프레임 비율을 확인할 수 있습니다.

SELECT
  AVG(trace_info.duration_us / 1000000) AS seconds_on_screen,
  AVG(trace_info.screen_info.frozen_frame_ratio) AS frozen_frame_ratio,
  event_name,
  radio_type
FROM `table-name`
WHERE _PARTITIONTIME > TIMESTAMP("YYYY-MM-DD")
AND event_type = "SCREEN_TRACE"
GROUP BY event_name, radio_type
ORDER BY event_name, radio_type;

디스크에서 특정 유형 파일을 로딩하는 경우의 캐시 적중률 계산

이 분석에서는 file-extension이라는 맞춤 속성과 cache-hit라는 추적 측정항목(캐시 적중인 경우 1, 캐시 부적중인 경우 0으로 설정)이 있는 디스크에서 로딩하는 맞춤 추적을 구성했다고 가정합니다.

예를 들어 디스크에서 PNG 파일을 로드하는 경우의 캐시 적중률을 계산할 수 있습니다.

SELECT AVG(trace_info.metric_info.metric_value) AS cache_hit_rate
FROM `table-name`
WHERE _PARTITIONTIME > TIMESTAMP("YYYY-MM-DD")
AND event_type = "TRACE_METRIC"
AND event_name = "cache-hit"
AND parent_trace_name = "loadFromDisk"
AND STRUCT("file-extension", "png") IN UNNEST(custom_attributes);

사용자가 네트워크 요청을 실행하는 시간대 확인

예를 들어 미국의 사용자가 앱에서 네트워크 요청을 실행하는 시간대를 확인할 수 있습니다.

SELECT
  count(1) AS hourly_count,
  EXTRACT(HOUR FROM event_timestamp) AS hour_of_day
FROM `table-name`
WHERE _PARTITIONTIME > TIMESTAMP("YYYY-MM-DD")
AND event_type = "NETWORK_REQUEST"
AND country = "US"
GROUP BY 2 ORDER BY 2;

어디서나 Performance Monitoring 데이터 가져오기

서버 측에서 Performance Monitoring 데이터에 액세스하거나 다른 타사 솔루션으로 푸시해야 하는 경우가 있을 수 있습니다. 현재 데이터를 내보내는 데 부과되는 요금은 없습니다.

다음과 같은 방법으로 데이터를 내보낼 수 있습니다.

  • BigQuery 웹 UI 사용
  • CLI 명령어 bq extract 실행
  • API 또는 클라이언트 라이브러리를 통해 추출 작업 제출

가격 책정

Performance Monitoring에서 데이터를 내보낼 때는 요금이 부과되지 않으며, BigQuery는 넉넉한 무료 사용 한도를 제공합니다. 자세한 내용은 BigQuery 가격 책정 또는 BigQuery 샌드박스를 참조하세요.