BigQuery에 Performance Monitoring 데이터 내보내기

BigQuery로 Apple 및 Android 앱의 Performance Monitoring 데이터를 내보내 추가 분석을 할 수 있습니다. BigQuery를 사용하면 BigQuery SQL로 데이터를 분석하고 데이터를 다른 클라우드 제공업체로 내보내거나 커스텀 ML 모델에 사용할 수 있습니다.

BigQuery 내보내기 사용 설정

  1. Firebase Console의 통합 페이지로 이동한 다음 BigQuery 카드에 있는 연결을 클릭합니다.

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

    Performance MonitoringBigQuery 내보내기를 사용 설정하면 다음 상황이 발생합니다.

    • Firebase에서 BigQuery기존 데이터의 사본을 내보냅니다. 내보내기용 데이터의 초기 전파를 완료하는 데 최대 48시간이 걸릴 수 있습니다.

    • 데이터 세트를 만든 후에는 위치를 변경할 수 없지만 데이터 세트를 다른 위치에 복사하거나 다른 위치에서 데이터 세트를 수동으로 이동(다시 만들기)할 수 있습니다. 자세한 내용은 데이터 세트 위치 변경을 참조하세요.

    • Firebase에서 Firebase 프로젝트와 BigQuery 간의 정기적인 데이터 동기화를 설정합니다. 이러한 일일 내보내기 작업은 일반적으로 예약 후 24시간 내에 완료됩니다.

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

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

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

내보내기를 실행하면 캡처된 모든 성능 이벤트를 포함하는 테이블이 각각의 앱마다 생성됩니다. 테이블의 각 행이 단일 성능 이벤트로 다음 중 하나가 될 수 있습니다.

  • 기간 trace — 기본적으로 앱 시작, 포그라운드 앱, 백그라운드 앱이 포함된 '기간'의 측정항목과 개발자가 계측한 커스텀 코드 tace를 수집하는 trace입니다.

    • event_typeDURATION_TRACE입니다.
    • event_name은 trace 이름과 동일합니다.
  • trace 측정항목 — 개발자 계측 커스텀 코드 trace와 연결된 커스텀 측정항목입니다.

    • event_typeTRACE_METRIC입니다.
    • event_name은 측정항목의 이름입니다.
    • parent_trace_name은 이 측정항목을 포함하는 trace 이름입니다.
  • 화면 trace — 화면의 전체 기간 trace(화면 렌더링 trace)입니다.

    • event_typeSCREEN_TRACE입니다.
    • event_name_st_ 프리픽스에 실제 화면 이름이 추가된 것입니다.
  • 네트워크 요청 - 네트워크 요청의 전체 기간 trace(HTTP 네트워크 요청 trace)입니다.

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

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

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

세부 데이터 스키마

필드 이름 유형 설명
event_timestamp 타임스탬프 이벤트가 클라이언트 기기에서 시작(trace 시작, 네트워크 시작 등)된 시점으로, 에포크 이후의 타임스탬프입니다.
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').
국가 문자열 이벤트가 발생한 국가의 두 자리 국가 코드입니다(예: 'US', 알 수 없는 국가의 경우 'ZZ').
carrier 문자열 클라이언트 기기의 이동통신사입니다.
radio_type 문자열 이벤트가 발생한 시점에 활성화된 무선 연결의 유형입니다(예: 'Wi-Fi').
custom_attributes ARRAY<RECORD> 이벤트에 연결된 모든 커스텀 속성입니다.
custom_attributes.key 문자열 커스텀 속성의 키입니다.
custom_attributes.value 문자열 커스텀 속성의 값입니다.
event_type 문자열 이벤트 유형으로, 가능한 값은 다음과 같습니다.
  • DURATION_TRACE — 기본적으로 앱 시작, 포그라운드 앱, 백그라운드 앱이 포함된 '기간'의 측정항목과 개발자가 계측한 커스텀 코드 tace를 수집하는 trace입니다.
  • SCREEN_TRACE — 화면의 전체 기간에 걸친 trace(화면 렌더링 trace)입니다.
  • TRACE_METRIC - 개발자 계측 커스텀 코드 trace와 연결된 커스텀 측정항목입니다.
  • NETWORK_REQUEST — 네트워크 요청의 전체 기간에 걸친 trace(HTTP 네트워크 요청 trace)입니다.
event_name 문자열 이벤트 이름입니다.
  • DURATION_TRACE — trace 이름
  • TRACE_METRIC — 커스텀 측정항목 이름
  • SCREEN_TRACE_st_와 trace 이름으로 구성
  • NETWORK_REQUEST — 네트워크 요청 URL 패턴
parent_trace_name 문자열 trace 측정항목이 있는 상위 trace의 이름입니다.
TRACE_METRIC에만 제공됩니다.
trace_info RECORD DURATION_TRACE, SCREEN_TRACE, TRACE_METRIC에만 제공됩니다.
trace_info.duration_us int64
  • DURATION_TRACESCREEN_TRACE — trace의 시작부터 끝까지의 시간('기간')
  • TRACE_METRIC — 상위 trace의 시작부터 끝까지의 시간('기간')
단위: 마이크로초
trace_info.screen_info RECORD SCREEN_TRACE에만 제공됩니다.
trace_info.screen_info.slow_frame_ratio float64 화면 trace의 느린 프레임 비율입니다(0에서 1 사이). 예를 들어 값이 0.05이면 이 화면 인스턴스의 프레임 중 5%가 렌더링에 16ms보다 오래 걸린다는 것을 의미합니다.
trace_info.screen_info.frozen_frame_ratio float64 화면 trace의 정지된 프레임 비율입니다(0에서 1 사이). 예를 들어 값이 0.05이면 이 화면 인스턴스의 프레임 중 5%가 렌더링에 700ms보다 오래 걸린다는 것을 의미합니다.
trace_info.metric_info RECORD TRACE_METRIC에만 제공됩니다.
trace_info.metric_info.metric_value int64 trace 측정항목의 값입니다.
network_info RECORD 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에서 실행할 수 있는 쿼리의 예시가 나와 있습니다.

Console에 표시된 데이터와 일치시키기

Firebase 대시보드는 America/Los_Angeles 시간대를 기준으로 일일 데이터를 집계합니다. Console에 표시된 내용과 일치하도록 날짜 함수는 America/Los_Angeles를 시간대로 명시적으로 설정해야 합니다. 그러지 않으면 날짜 함수는 기본적으로 UTC를 사용합니다.

SELECT
  DATE(event_timestamp, 'America/Los_Angeles') AS daily_date,
  APPROX_QUANTILES(trace_info.duration_us, 100)[OFFSET(90)] / 1000000 AS p90_seconds,
FROM `TABLE_NAME`
WHERE
  DATE(event_timestamp, 'America/Los_Angeles')
    >= DATE_SUB( PARSE_DATE('%Y%m%d', 'YYYY-MM-DD'), INTERVAL 7 DAY)
  AND DATE(event_timestamp, 'America/Los_Angeles')
    <= PARSE_DATE('%Y%m%d', 'YYYY-MM-DD')
  AND event_name = '_app_start'
GROUP BY 1
ORDER BY 1 DESC;

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

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;

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

예를 들어 다양한 무선 연결(Wi-Fi, 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라는 TRACE_METRIC 커스텀 측정항목(캐시 적중인 경우 1, 캐시 부적중인 경우 0으로 설정)이 있는 디스크에서 로딩하는 커스텀 코드 trace를 계측한 것으로 간주합니다.

예를 들어 디스크에서 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 샌드박스를 참조하세요.