Crashlytics 데이터를 BigQuery로 내보내 추가 분석을 수행할 수 있습니다. BigQuery를 사용하면 BigQuery SQL로 데이터를 분석하여 다른 클라우드 제공업체로 내보내거나, Google 데이터 스튜디오의 시각화 및 커스텀 대시보드에 데이터를 사용할 수 있습니다.
BigQuery 내보내기 사용 설정
- Firebase Console의 통합 페이지로 이동합니다.
- BigQuery 카드에서 연결을 클릭합니다.
- 화면의 안내에 따라 BigQuery를 사용 설정합니다.
프로젝트를 BigQuery에 연결하면 Firebase는 다음과 같이 작동합니다.
- Firebase에서 Firebase 프로젝트와 BigQuery 간의 일일 데이터 동기화를 설정합니다.
- 기본적으로 프로젝트에 있는 모든 앱은 BigQuery에 연결되며 나중에 프로젝트에 추가한 앱은 BigQuery에 자동으로 연결됩니다. 데이터를 전송하는 앱을 별도로 관리할 수 있습니다.
- Firebase에서 BigQuery로 기존 데이터의 사본을 내보냅니다. 여기에는 연결된 각 앱에서 일일 데이터 동기화로 생성된 데이터가 있는 배치 테이블이 포함됩니다.
- Crashlytics BigQuery 스트리밍 내보내기를 사용 설정한 경우 연결된 모든 앱에 지속적으로 업데이트되는 데이터가 있는 실시간 테이블도 포함됩니다.
BigQuery 내보내기를 중지하려면 Firebase Console에서 프로젝트를 연결 해제합니다.
어떤 유형의 데이터를 BigQuery로 내보내나요?
Firebase Crashlytics는 firebase_crashlytics
라는 BigQuery 데이터 세트로 데이터를 내보냅니다. 기본적으로 개별 테이블은 프로젝트에 있는 각 앱의 Crashlytics 데이터 세트에 생성됩니다. Firebase는 앱의 번들 식별자에 따라 테이블의 이름을 지정하며, 마침표를 밑줄로 변환하고 마지막에 플랫폼 이름을 붙입니다.
예를 들어 ID가 com.google.test
인 앱의 데이터는 com_google_test_ANDROID
라는 이름의 테이블에 포함되게 됩니다. 이 배치 테이블은 하루에 한 번 업데이트됩니다. Crashlytics BigQuery 스트리밍 내보내기를 사용 설정한 경우 Firebase Crashlytics 데이터도 com_google_test_ANDROID_REALTIME
으로 실시간 스트리밍됩니다.
테이블의 각 행은 비정상 종료, 심각하지 않은 오류, ANR을 포함하여 앱에서 발생한 이벤트를 나타냅니다.
Crashlytics BigQuery 스트리밍 내보내기 사용 설정
BigQueryStreaming을 사용하여 Crashlytics 데이터를 실시간으로 스트리밍할 수 있습니다. 실시간 대시보드에 정보를 표시하거나, 출시 라이브를 보거나, 알림 및 커스텀 워크플로를 트리거하는 애플리케이션 문제를 모니터링하는 등 실시간 데이터가 필요한 모든 상황에서 사용할 수 있습니다.
BigQuery 샌드박스에서는 Crashlytics BigQuery 스트리밍 내보내기를 사용할 수 없습니다.
Crashlytics BigQuery 스트리밍 내보내기를 사용 설정하면 배치 테이블 외에 실시간 테이블도 포함됩니다. 다음은 각 테이블 간의 차이점입니다.
배치 테이블 | 실시간 테이블 |
---|---|
|
|
배치 테이블은 이벤트를 쓰기 전에 영구적으로 저장하므로 장기 분석 및 경과에 따른 트렌드를 식별하는 데 유용하며 최대 90일 전부터 테이블에 백필할 수 있습니다. 실시간 테이블에 데이터를 쓰면 BigQuery에 즉시 기록되므로 실시간 대시보드와 커스텀 알림에 적합합니다. 이 두 테이블을 병합 쿼리로 결합하면 두 테이블의 이점을 모두 누릴 수 있습니다. 아래의 예시 9 쿼리를 참조하세요.
기본적으로 실시간 테이블의 파티션 만료 시간은 30일입니다. 이를 수정하는 방법은 파티션 만료 업데이트를 참조하세요.
Crashlytics BigQuery 스트리밍 사용 설정
스트리밍을 사용 설정하려면 BigQuery 통합 페이지의 Crashlytics 섹션으로 이동하여 스트리밍 포함 체크박스를 선택합니다.
데이터 스튜디오 템플릿
데이터 스튜디오 템플릿에서 실시간 데이터를 사용 설정하려면 내보낸 Crashlytics 데이터를 데이터 스튜디오로 시각화하기의 안내를 따르세요.
뷰
BigQuery UI를 사용하여 아래의 쿼리 예시를 뷰로 변환할 수 있습니다. 자세한 안내는 뷰 만들기를 참조하세요.
내보낸 데이터로 무엇을 할 수 있나요?
BigQuery로 내보낸 데이터에는 기기 유형, 운영체제, 예외(Android 앱) 또는 오류(Apple 앱), Crashlytics 로그를 비롯한 원시 비정상 종료 데이터뿐만 아니라 기타 다른 데이터도 포함됩니다.
BigQuery에서 Firebase Crashlytics 데이터로 작업하기
다음의 예는 Crashlytics 데이터에서 실행할 수 있는 쿼리를 보여줍니다. 이러한 쿼리는 Crashlytics 대시보드에 제공되지 않는 보고서를 생성합니다.
Crashlytics 쿼리의 예
다음의 예는 비정상 종료 이벤트 데이터를 집계하여 더 이해하기 쉽게 요약한 보고서를 어떻게 생성하는지 보여줍니다.
예시 1: 날짜별 비정상 종료
수석 개발자는 버그를 최대한 해결한 후 드디어 팀이 신규 사진 공유 앱을 출시할 준비가 되었다고 생각합니다. 출시 전에 팀은 지난 달의 일일 비정상 종료 횟수를 확인하여, 그 동안 진행한 버그 수정 작업을 통해 앱이 얼마나 더 안정화되었는지 알아보려고 합니다.
SELECT COUNT(DISTINCT event_id) AS number_of_crashes, FORMAT_TIMESTAMP("%F", event_timestamp) AS date_of_crashes FROM `projectId.firebase_crashlytics.package_name_ANDROID` GROUP BY date_of_crashes ORDER BY date_of_crashes DESC LIMIT 30;
예시 2: 가장 심각한 비정상 종료 파악
프로젝트 관리자는 프로덕션 계획의 우선순위를 적절하게 설정하기 위해 제품에서 가장 심각한 비정상 종료 중 상위 10개가 무엇인지 파악하는 방법에 대해 고민합니다. 팀은 다음과 같이 데이터의 관련 포인트를 제공하는 쿼리를 생성합니다.
SELECT DISTINCT issue_id, COUNT(DISTINCT event_id) AS number_of_crashes, COUNT(DISTINCT installation_uuid) AS number_of_impacted_user, blame_frame.file, blame_frame.line FROM `projectId.firebase_crashlytics.package_name_ANDROID` WHERE event_timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(),INTERVAL 168 HOUR) AND event_timestamp < CURRENT_TIMESTAMP() GROUP BY issue_id, blame_frame.file, blame_frame.line ORDER BY number_of_crashes DESC LIMIT 10;
예시 3: 비정상 종료가 가장 많이 발생한 상위 10개 기기
가을은 신규 스마트폰이 출시되는 시기입니다. 개발자는 이때가 기기별로 새로운 문제가 발견되는 시기이기도 하다는 것을 알고 있습니다. 앞으로 발생할 호환성 문제를 성공적으로 해결하기 위해, 팀은 지난 주에 비정상 종료가 가장 많이 발생했던 10대의 기기를 식별하는 쿼리를 다음과 같이 작성합니다.
SELECT device.model, COUNT(DISTINCT event_id) AS number_of_crashes FROM `projectId.firebase_crashlytics.package_name_ANDROID` WHERE event_timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 168 HOUR) AND event_timestamp < CURRENT_TIMESTAMP() GROUP BY device.model ORDER BY number_of_crashes DESC LIMIT 10;
예시 4: 커스텀 키별 필터링
게임 개발자는 게임의 어느 레벨에서 비정상 종료가 가장 많이 발생하는지 알고 싶어 합니다. 팀은 상태를 추적하기 위해 커스텀 Crashlytics 키 current_level
을 설정한 후 사용자가 새 레벨에 도달할 때마다 이 키를 업데이트합니다.
Objective-C
CrashlyticsKit setIntValue:3 forKey:@"current_level";
Swift
Crashlytics.sharedInstance().setIntValue(3, forKey: "current_level");
자바
Crashlytics.setInt("current_level", 3);
그런 다음 BigQuery 내보내기에 이 키를 포함시키고, 각 비정상 종료 이벤트와 연결된 current_level
값의 분산을 보고하는 쿼리를 다음과 같이 작성합니다.
SELECT COUNT(DISTINCT event_id) AS num_of_crashes, value FROM `projectId.firebase_crashlytics.package_name_ANDROID` UNNEST(custom_keys) WHERE key = "current_level" GROUP BY key, value ORDER BY num_of_crashes DESC
예시 5: 사용자 ID 추출
개발자는 사전 체험판 앱을 하나 갖고 있습니다. 사용자 대부분은 이 앱을 좋아하지만 세 명의 사용자에게는 이례적으로 자주 비정상 종료가 발생했습니다. 문제의 원인을 파악하기 위해, 팀은 사용자 ID를 사용하여 사용자에게 발생하는 모든 비정상 종료 이벤트를 가져오는 쿼리를 다음과 같이 작성합니다.
SELECT * FROM `projectId.firebase_crashlytics.package_name_ANDROID` WHERE user.id IN ("userid1", "userid2", "userid3") ORDER BY user.id
예시 6: 특정 비정상 종료 문제를 경험한 모든 사용자 파악
개발자는 베타 테스터 그룹을 대상으로 주요 버그를 배포했습니다. 팀은 위의 예시 2의 쿼리를 사용하여 특정 비정상 종료 문제 ID를 파악할 수 있었습니다. 이제 이들은 이 비정상 종료의 영향을 받은 앱 사용자 목록을 추출하는 다음과 같은 쿼리를 실행합니다.
SELECT user.id as user_id FROM `projectId.firebase_crashlytics.package_name_ANDROID` WHERE issue_id = "YOUR_ISSUE_ID" AND application.display_version = "" AND user.id != "" ORDER BY user.id;
예시 7: 비정상 종료 문제의 영향을 받은 사용자 수(국가별 분류)
이제 팀은 새 버전 출시 중 주요 버그를 탐지했습니다. 이들은 위의 예시 2의 쿼리를 사용하여 특정 비정상 종료 문제 ID를 파악할 수 있었습니다. 이제 이 비정상 종료가 전 세계 여러 국가의 사용자에게 확산되는지 여부를 관찰하려고 합니다.
이 쿼리를 작성하려면 팀에서는 다음을 수행해야 합니다.
Google 애널리틱스에서 BigQuery 내보내기를 사용 설정합니다. BigQuery에 프로젝트 데이터 내보내기를 참조하세요.
사용자 ID가 Google 애널리틱스 SDK 및 Crashlytics SDK에 모두 전달되도록 앱을 업데이트합니다.
Objective-C
CrashlyticsKit setUserIdentifier:@"123456789"; FIRAnalytics setUserID:@"12345678 9";
Swift
Crashlytics.sharedInstance().setUserIdentifier("123456789"); Analytics.setUserID("123456789");
자바
Crashlytics.setUserIdentifier("123456789"); mFirebaseAnalytics.setUserId("123456789");
사용자 ID 필드를 사용하여 Crashlytics BigQuery 데이터 세트에서 비정상 종료가 발생한 경우 Google 애널리틱스 BigQuery 데이터 세트의 이벤트를 조인하는 쿼리를 작성합니다.
SELECT DISTINCT c.issue_id, a.geo.country, COUNT(DISTINCT c.user.id) as num_users_impacted FROM `projectId.firebase_crashlytics.package_name_ANDROID` c INNER JOIN `projectId.analytics_YOUR_TABLE.events_*` a on c.user.id = a.user_id WHERE c.issue_id = "YOUR_ISSUE_ID" AND a._TABLE_SUFFIX BETWEEN '20190101' AND '20200101' GROUP BY c.issue_id, a.geo.country, c.user.id
예시 8: 상위 5개 문제(오늘 기준)
Crashlytics BigQuery 스트리밍 내보내기를 사용 설정해야 함
SELECT issue_id, COUNT(DISTINCT event_id) AS events FROM `your_project.firebase_crashlytics.package_name_ANDROID_REALTIME` WHERE DATE(event_timestamp) = CURRENT_DATE() GROUP BY issue_id ORDER BY events DESC LIMIT 5;
예시 9: 상위 5개 문제(DATE~오늘)
Crashlytics BigQuery 스트리밍 내보내기를 사용 설정해야 함
이 예시에서는 배치 테이블과 실시간 테이블을 결합하여 안정적인 일괄 데이터에 실시간 정보를 추가합니다. event_id
는 기본 키이므로 DISTINCT event_id
를 사용하여 두 테이블에서 공통 이벤트를 중복 삭제할 수 있습니다.
SELECT issue_id, COUNT(DISTINCT event_id) AS events FROM ( SELECT issue_id, event_id, event_timestamp FROM `your_project.firebase_crashlytics.package_name_ANDROID_REALTIME` UNION ALL SELECT issue_id, event_id, event_timestamp FROM `your_project.firebase_crashlytics.package_name_ANDROID`) WHERE event_timestamp >= "2020-01-13" GROUP BY issue_id ORDER BY events DESC LIMIT 5;
BigQuery의 Firebase Crashlytics 스키마 이해하기
Crashlytics를 BigQuery와 연결하면 Firebase는 연결 이틀 전까지의 이벤트를 포함한 최근 이벤트(비정상 종료, 심각하지 않은 오류, ANR)를 내보냅니다. 최대 90일까지 백필할 수 있는 옵션도 제공됩니다.
Firebase는 이 시점부터 연결을 해제할 때까지 매일 Crashlytics 이벤트를 내보냅니다. 매번 내보내기를 실행한 후 BigQuery에서 데이터를 사용할 수 있을 때까지 몇 분이 소요될 수 있습니다.
데이터 세트
Firebase Crashlytics는 Crashlytics 데이터마다 BigQuery에 새 데이터 세트를 만듭니다. 이 데이터 세트는 프로젝트에 여러 개의 앱이 있더라도 프로젝트 전체를 포함합니다.
테이블
Firebase Crashlytics는 특정 앱의 데이터 내보내기를 제외하지 않는 한, 데이터 세트에 프로젝트의 앱별 테이블을 생성합니다. Firebase는 앱의 번들 식별자에 따라 테이블의 이름을 지정하며, 마침표를 밑줄로 변환하고 마지막에 플랫폼 이름을 붙입니다.
예를 들어 ID가 com.google.test
인 Android 앱의 데이터는 com_google_test_ANDROID
라는 이름의 테이블에 포함되고, 실시간 데이터(사용 설정된 경우)는 com_google_test_ANDROID_REALTIME
이라는 테이블에 포함되게 됩니다.
테이블에는 개발자가 정의한 Crashlytics 커스텀 키 외에 표준 Crashlytics 데이터 세트가 포함됩니다.
행
테이블의 각 행은 앱에 발생한 오류를 나타냅니다.
열
비정상 종료, 심각하지 않은 오류, ANR의 테이블 열은 동일합니다. Crashlytics BigQuery 스트리밍 내보내기가 사용 설정되어 있으면 실시간 테이블에 배치 테이블과 동일한 열이 포함됩니다. 내보내기 파일의 열은 다음과 같습니다.
스택 트레이스 제외
스택 추적이 없는 이벤트를 나타내는 행에 있는 열입니다.
필드 이름 | 데이터 유형 | 설명 |
---|---|---|
platform | 문자열 | Apple 또는 Android 앱 |
bundle_identifier | 문자열 | 번들 ID(예: com.google.gmail) |
event_id | 문자열 | 이벤트의 고유 ID |
is_fatal | 부울 | 앱의 비정상 종료 여부 |
error_type | 문자열 | 이벤트의 오류 유형(FATAL, NON_FATAL, ANR) |
issue_id | 문자열 | 이벤트와 관련된 문제 |
variant_id | 문자열 | 이 이벤트와 관련된 문제 변형 모든 이벤트에 관련된 문제 변형이 있는 것은 아닙니다. |
event_timestamp | 타임스탬프 | 이벤트가 발생한 시점 |
device | 레코드 | 이벤트가 발생한 기기 |
device.manufacturer | 문자열 | 기기 제조업체 |
device.model | 문자열 | 기기 모델 |
device.architecture | 문자열 | X86_32, X86_64, ARMV7, ARM64, ARMV7S 또는 ARMV7K |
memory | 레코드 | 기기의 메모리 상태 |
memory.used | INT64 | 메모리 사용량(바이트) |
memory.free | INT65 | 남은 메모리(바이트) |
storage | 레코드 | 기기의 영구 스토리지 |
storage.used | INT64 | 스토리지 사용량(바이트) |
storage.free | INT64 | 남은 스토리지(바이트) |
operating_system | 레코드 | 기기의 OS 세부사항 |
operating_system.display_version | 문자열 | OS 버전 |
operating_system.name | 문자열 | OS 이름 |
operating_system.modification_state | 문자열 | MODIFIED 또는 UNMODIFIED(예: 탈옥/루팅 기기인지 여부) |
operating_system.type | 문자열 | 기기의 운영체제 유형 (예: IOS, MACOS) |
operating_system.device_type | 문자열 | 기기 유형 (예: MOBILE, TABLET, TV) |
application | 레코드 | 이벤트를 생성한 앱 |
application.build_version | 문자열 | 앱의 빌드 버전 |
application.display_version | 문자열 | |
user | 레코드 | 선택사항: 앱 사용자에 대해 수집된 정보 |
user.name | 문자열 | 선택사항: 사용자의 이름 |
user.email | 문자열 | 선택사항: 사용자의 이메일 주소 |
user.id | 문자열 | 선택사항: 사용자와 연결된 앱별 ID |
custom_keys | 반복 레코드 | 개발자가 정의한 키-값 쌍 |
custom_keys.key | 문자열 | 개발자가 정의한 키 |
custom_keys.value | 문자열 | 개발자가 정의한 값 |
installation_uuid | 문자열 | 고유의 앱 및 기기 설치를 식별하는 ID |
crashlytics_sdk_versions | 문자열 | 이벤트를 생성한 Crashlytics SDK 버전 |
app_orientation | 문자열 | PORTRAIT, LANDSCAPE, FACE_UP 또는 FACE_DOWN |
device_orientation | 문자열 | PORTRAIT, LANDSCAPE, FACE_UP 또는 FACE_DOWN |
process_state | 문자열 | BACKGROUND 또는 FOREGROUND |
logs | 반복 레코드 | Crashlytics 로거에서 생성한 타임스탬프가 적용된 로그 메시지(사용 설정된 경우) |
logs.timestamp | 타임스탬프 | 로그가 작성된 시점 |
logs.message | 문자열 | 로깅된 메시지 |
breadcrumbs | 반복 레코드 | 타임스탬프가 적용된 Google Analytics 탐색경로(사용 설정된 경우) |
breadcrumbs.timestamp | 타임스탬프 | 탐색경로와 연결된 타임스탬프 |
breadcrumbs.name | 문자열 | 탐색경로와 연결된 이름 |
breadcrumbs.params | 반복 레코드 | 탐색경로와 연결된 매개변수 |
breadcrumbs.params.key | 문자열 | 탐색경로와 연결된 매개변수 키 |
breadcrumbs.params.value | 문자열 | 탐색경로와 연결된 매개변수 값 |
blame_frame | 레코드 | 비정상 종료나 오류의 근본 원인으로 확인된 프레임 |
blame_frame.line | INT64 | 프레임 파일의 줄 번호 |
blame_frame.file | 문자열 | 프레임 파일의 이름 |
blame_frame.symbol | 문자열 | 수화 기호 또는 원시 기호(수화될 수 없는 경우) |
blame_frame.offset | INT64 | 자바 예외에 대해 설정되지 않은 코드가 포함된 바이너리 이미지로의 바이트 오프셋 |
blame_frame.address | INT64 | 자바 예외에 대해 설정되지 않은 코드가 포함된 바이너리 이미지의 주소 |
blame_frame.library | 문자열 | 프레임을 포함하는 라이브러리의 표시 이름 |
blame_frame.owner | 문자열 | DEVELOPER, VENDOR, RUNTIME, PLATFORM 또는 SYSTEM |
blame_frame.blamed | 부울 | Crashlytics의 분석 결과 이 프레임이 비정상 종료나 오류의 근본 원인인지 여부 |
exceptions | 반복 레코드 | Android 전용: 이 이벤트 중에 발생한 예외. 중첩된 예외는 최신순으로 표시(읽기: 마지막 레코드가 처음 발생한 예외) |
exceptions.type | 문자열 | 예외 유형(예: java.lang.IllegalStateException) |
exceptions.exception_message | 문자열 | 예외와 관련된 메시지 |
exceptions.nested | 부울 | 마지막으로 발생한 예외를 제외하고 모두 True(예: 첫 번째 레코드) |
exceptions.title | 문자열 | 스레드의 제목 |
exceptions.subtitle | 문자열 | 스레드의 부제목 |
exceptions.blamed | 부울 | Crashlytics에서 예외를 오류 또는 비정상 종료의 원인으로 판단한 경우 True |
exceptions.frames | 반복 레코드 | 예외와 관련된 프레임 |
exceptions.frames.line | INT64 | 프레임 파일의 줄 번호 |
exceptions.frames.file | 문자열 | 프레임 파일의 이름 |
exceptions.frames.symbol | 문자열 | 수화 기호 또는 원시 기호(수화될 수 없는 경우) |
exceptions.frames.offset | INT64 | 자바 예외에 대해 설정되지 않은 코드가 포함된 바이너리 이미지로의 바이트 오프셋 |
exceptions.frames.address | INT64 | 자바 예외에 대해 설정되지 않은 코드가 포함된 바이너리 이미지의 주소 |
exceptions.frames.library | 문자열 | 프레임을 포함하는 라이브러리의 표시 이름 |
exceptions.frames.owner | 문자열 | DEVELOPER, VENDOR, RUNTIME, PLATFORM 또는 SYSTEM |
exceptions.frames.blamed | 부울 | Crashlytics의 분석 결과 이 프레임이 비정상 종료나 오류의 근본 원인인지 여부 |
오류 | 반복 레코드 | Apple 앱만 해당: 심각하지 않은 오류 |
error.queue_name | 문자열 | 스레드가 실행 중인 큐 |
error.code | INT64 | 앱에서 커스텀 로깅된 NSError와 관련된 오류 코드 |
error.title | 문자열 | 스레드의 제목 |
error.subtitle | 문자열 | 스레드의 부제목 |
error.blamed | 부울 | Crashlytics의 분석 결과 이 프레임이 오류의 근본 원인인지 여부 |
error.frames | 반복 레코드 | 스택 추적의 프레임 |
error.frames.line | INT64 | 프레임 파일의 줄 번호 |
error.frames.file | 문자열 | 프레임 파일의 이름 |
error.frames.symbol | 문자열 | 수화 기호 또는 원시 기호(수화될 수 없는 경우) |
error.frames.offset | INT64 | 코드가 포함된 바이너리 이미지로의 바이트 오프셋 |
error.frames.address | INT64 | 코드가 포함된 바이너리 이미지의 주소 |
error.frames.library | 문자열 | 프레임을 포함하는 라이브러리의 표시 이름 |
error.frames.owner | 문자열 | DEVELOPER, VENDOR, RUNTIME, PLATFORM 또는 SYSTEM |
error.frames.blamed | 부울 | Crashlytics의 분석 결과 이 프레임이 오류의 근본 원인인지 여부 |
threads | 반복 레코드 | 이벤트 발생 시점에 표시된 스레드 |
threads.crashed | 부울 | 스레드의 비정상 종료 여부 |
threads.thread_name | 문자열 | 스레드의 이름 |
threads.queue_name | 문자열 | Apple 앱만 해당: 스레드가 실행 중인 큐 |
threads.signal_name | 문자열 | 앱의 비정상 종료를 유발한 신호의 이름(비정상 종료된 네이티브 스레드에만 있음) |
threads.signal_code | 문자열 | 앱의 비정상 종료를 유발한 신호의 코드(비정상 종료된 네이티브 스레드에만 있음) |
threads.crash_address | INT64 | 앱의 비정상 종료를 유발한 신호의 주소(비정상 종료된 네이티브 스레드에만 있음) |
threads.code | INT64 | Apple 앱만 해당: 애플리케이션에서 커스텀 로깅된 NSError의 오류 코드 |
threads.title | 문자열 | 스레드의 제목 |
threads.subtitle | 문자열 | 스레드의 부제목 |
threads.blamed | 부울 | Crashlytics의 분석 결과 이 프레임이 비정상 종료나 오류의 근본 원인인지 여부 |
threads.frames | 반복 레코드 | 스레드의 프레임 |
threads.frames.line | INT64 | 프레임 파일의 줄 번호 |
threads.frames.file | 문자열 | 프레임 파일의 이름 |
threads.frames.symbol | 문자열 | 수화 기호 또는 원시 기호(수화될 수 없는 경우) |
threads.frames.offset | INT64 | 코드가 포함된 바이너리 이미지로의 바이트 오프셋 |
threads.frames.address | INT64 | 코드가 포함된 바이너리 이미지의 주소 |
threads.frames.library | 문자열 | 프레임을 포함하는 라이브러리의 표시 이름 |
threads.frames.owner | 문자열 | DEVELOPER, VENDOR, RUNTIME, PLATFORM 또는 SYSTEM |
threads.frames.blamed | 부울 | Crashlytics의 분석 결과 이 프레임이 오류의 근본 원인인지 여부 |
unity_metadata.unity_version | 문자열 | 이 기기에서 실행 중인 Unity 버전 |
unity_metadata.debug_build | 부울 | 디버그 빌드인 경우 |
unity_metadata.processor_type | 문자열 | 프로세서 유형 |
unity_metadata.processor_count | INT64 | 프로세서 수(코어) |
unity_metadata.processor_frequency_mhz | INT64 | 프로세서의 주파수(MHz) |
unity_metadata.system_memory_size_mb | INT64 | 시스템의 메모리 크기(MB) |
unity_metadata.graphics_memory_size_mb | INT64 | 그래픽 메모리(MB) |
unity_metadata.graphics_device_id | INT64 | 그래픽 기기의 식별자 |
unity_metadata.graphics_device_vendor_id | INT64 | 그래픽 프로세서 공급업체의 식별자 |
unity_metadata.graphics_device_name | 문자열 | 그래픽 기기의 이름 |
unity_metadata.graphics_device_vendor | 문자열 | 그래픽 기기의 공급업체 |
unity_metadata.graphics_device_version | 문자열 | 그래픽 기기의 버전 |
unity_metadata.graphics_device_type | 문자열 | 그래픽 기기의 유형 |
unity_metadata.graphics_shader_level | INT64 | 그래픽의 셰이더 수준 |
unity_metadata.graphics_render_target_count | INT64 | 그래픽 렌더링 대상 수 |
unity_metadata.graphics_copy_texture_support | 문자열 | Unity API에 정의된 대로 그래픽 텍스처 복사 지원 |
unity_metadata.graphics_max_texture_size | INT64 | 렌더링 텍스처 전용 최대 크기 |
unity_metadata.screen_size_px | 문자열 | 너비x높이 형식의 화면 크기(픽셀) |
unity_metadata.screen_resolution_dpi | 문자열 | 화면의 DPI(부동 소수점 수) |
unity_metadata.screen_refresh_rate_hz | INT64 | 화면 재생 빈도(Hz) |
내보낸 Crashlytics 데이터를 데이터 스튜디오로 시각화하기
Google 데이터 스튜디오는 BigQuery의 Crashlytics 데이터 세트를 읽기 쉽고 공유하기 쉬우며 완벽하게 맞춤설정이 가능한 보고서로 바꿔줍니다.
데이터 스튜디오의 사용에 관한 자세한 내용은 데이터 스튜디오 빠른 시작 가이드, Data Studio에 오신 것을 환영합니다를 참조하세요.
Crashlytics 보고서 템플릿 사용하기
데이터 스튜디오는 내보낸 Crashlytics BigQuery 스키마의 포괄적인 측정기준 및 측정항목 세트를 포함하는 Crashlytics 샘플 보고서를 제공합니다. Crashlytics BigQuery 스트리밍 내보내기를 사용 설정한 경우 데이터 스튜디오 템플릿의 실시간 트렌드에서 해당 데이터를 볼 수 있습니다.이 샘플을 템플릿으로 사용하면 내 앱의 원시 비정상 종료 데이터를 기반으로 새로운 보고서를 빠르게 작성하고 시각화할 수 있습니다.
- Crashlytics 데이터 스튜디오 대시보드 템플릿을 엽니다.
- 오른쪽 상단의 템플릿 사용을 클릭합니다.
- 새 데이터 소스 드롭다운에서 새 데이터 소스 만들기를 선택합니다.
- BigQuery 카드에서 선택을 클릭합니다.
- 내 프로젝트 > [your-project-name] > firebase_crashlytics > [your-table-name]을 선택하여 내보낸 Crashlytics 데이터가 포함된 테이블을 선택합니다. 배치 테이블은 언제든지 선택할 수 있습니다. Crashlytics BigQuery 스트리밍 내보내기가 사용 설정된 경우 실시간 테이블을 대신 선택할 수 있습니다.
- 구성 아래에서, Crashlytics 템플릿 수준을 기본값으로 설정합니다.
- 연결을 클릭하여 새 데이터 소스를 만듭니다.
- 보고서에 추가를 클릭하여 Crashlytics 템플릿으로 돌아갑니다.
- 마지막으로 보고서 작성을 클릭하여 Crashlytics 데이터 스튜디오 대시보드 템플릿의 사본을 만듭니다.