您可以将 Performance Monitoring 数据从 Apple 和 Android 应用导出到 BigQuery 以供进一步分析。借助 BigQuery,您可以使用 BigQuery SQL 来分析数据,将数据导出至其他云提供商,甚至可以将这些数据用于您的自定义机器学习模型。
启用 BigQuery Export 功能
前往 Firebase 控制台中的“集成”页面,然后点击 BigQuery 卡片中的关联。
按照屏幕上的说明启用 BigQuery。
为 Performance Monitoring 启用 BigQuery Export 功能后,会出现以下情况:
Firebase 会将您的现有数据的副本导出到 BigQuery。导出数据的初始传播最长可能需要 48 小时才能完成。
- 您可以手动安排数据回填,该操作会针对过去 30 天内的数据或针对自您最近启用 BigQuery Export 功能后所产生的数据执行(以较近的日期为准)。
创建数据集后,将无法更改其位置,但可以将数据集复制到其他位置,或手动将数据集移动(重新创建)到其他位置。如需了解详情,请参阅更改数据集位置。
Firebase 会安排定期将您的数据从 Firebase 项目同步到 BigQuery。这些每日导出操作通常会在安排后的 24 小时内完成。
默认情况下,您项目中的所有应用都会关联到 BigQuery,而且您以后向项目中添加的所有应用也都会自动关联到 BigQuery。您可以管理哪些应用可发送数据。
如需停用 BigQuery Export 功能,请在 Firebase 控制台中解除与您的项目的关联。
哪些数据会导出到 BigQuery?
对于项目中的每个应用,导出操作会创建一个表,其中包含所有捕获的性能事件。表中的每一行都是一个性能事件,可以是以下任一值:
时长跟踪记录 - 默认情况下收集“时长”指标的跟踪记录,包括应用启动、应用前台活动、应用后台活动以及开发者插桩的任何自定义代码跟踪记录
event_type
为DURATION_TRACE
event_name
与跟踪记录名称相同
跟踪记录指标 - 与开发者插桩的自定义代码跟踪记录关联的自定义指标
event_type
为TRACE_METRIC
event_name
是指标的名称parent_trace_name
是包含该指标的跟踪记录名称
屏幕跟踪记录 - 涵盖屏幕生命周期的跟踪记录(屏幕呈现跟踪记录)
event_type
为SCREEN_TRACE
event_name
是前缀_st_
加上实际的屏幕名称
网络请求 - 涵盖网络请求生命周期的跟踪记录(HTTP 网络请求跟踪记录)
event_type
为NETWORK_REQUEST
event_name
是网络请求网址的分类格式
每个性能事件都包含该事件的特性(例如客户端设备的国家/地区和运营商)以及事件特定信息:
- 时长跟踪记录、跟踪记录指标和屏幕跟踪记录包含
trace_info
- 跟踪记录指标包含
trace_info.metric_info
- 屏幕跟踪记录包含
trace_info.screen_info
- 网络跟踪记录包含
network_info
详细的数据架构
字段名称 | 类型 | 说明 |
---|---|---|
event_timestamp | 时间戳 | 事件在客户端设备上开始后所经过周期的时间戳(跟踪记录启动、网络启动等) |
app_display_version | 字符串 | 应用的显示版本(例如“4.1.7”)
|
app_build_version | 字符串 | 应用的版本号(例如“1523456”)
|
os_version | 字符串 | 客户端设备的操作系统版本
|
device_name | 字符串 | 客户端设备的名称(例如“Google Pixel”) |
国家/地区 | 字符串 | 发生事件的国家/地区的双字母国家/地区代码(例如“US”,或使用“ZZ”表示未知国家/地区) |
运营商 | 字符串 | 客户端设备的运营商 |
radio_type | 字符串 | 事件发生时的活跃无线网络类型(例如“WIFI”) |
custom_attributes | ARRAY<RECORD> | 附加到此事件的所有自定义特性 |
custom_attributes.key | 字符串 | 自定义特性的键 |
custom_attributes.value | 字符串 | 自定义特性的值 |
event_type | 字符串 | 事件类型;可能的值:
|
event_name | 字符串 | 事件名称
|
parent_trace_name | 字符串 | 含有跟踪记录指标的父跟踪记录的名称 仅适用于 TRACE_METRIC |
trace_info | RECORD | 仅适用于 DURATION_TRACE 、SCREEN_TRACE 和 TRACE_METRIC |
trace_info.duration_us | int64 |
|
trace_info.screen_info | RECORD | 仅适用于 SCREEN_TRACE |
trace_info.screen_info.slow_frame_ratio | float64 | 此屏幕跟踪记录的慢帧比率,介于 0 和 1 之间(例如,值为 0.05 表示此屏幕实例的 5% 的帧需要超过 16 毫秒才能呈现) |
trace_info.screen_info.frozen_frame_ratio | float64 | 此屏幕跟踪记录的冻结帧的比率,介于 0 和 1 之间(例如,值为 0.05 表示此屏幕实例的 5% 的帧需要超过 700 毫秒才能呈现) |
trace_info.metric_info | RECORD | 仅适用于 TRACE_METRIC |
trace_info.metric_info.metric_value | int64 | 跟踪记录指标的值 |
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 中运行的查询示例。
匹配控制台中显示的数据
Firebase 信息中心会汇总 America/Los_Angeles
时区内的每日数据。为了与控制台中显示的内容一致,日期函数应明确将 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;
按各种条件检查冻结帧的比率
例如,您可以检查不同的无线网络类型(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
的自定义指标 (TRACE_METRIC
)(如果缓存命中,则设置为 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 网页界面
运行 CLI 命令
bq extract
通过 API 或客户端库提交提取作业。
价格
从 Performance Monitoring 导出数据是免费的,并且 BigQuery 提供宽裕的免费使用限额。如需了解详情,请参阅 BigQuery 价格或 BigQuery 沙盒。