您可以将 Apple 和 Android 应用程序中的性能监控数据导出到BigQuery中以供进一步分析。 BigQuery 允许您使用 BigQuery SQL 分析数据,将其导出到另一个云提供商,甚至可以将数据用于您的自定义 ML 模型。
启用 BigQuery 导出
转到 Firebase 控制台中的集成页面,然后单击BigQuery卡中的链接。
按照屏幕上的说明启用 BigQuery。
当您为性能监控启用 BigQuery 导出时,会发生以下情况:
Firebase将现有数据的副本导出到 BigQuery。导出数据的初始传播最多可能需要 48 小时才能完成。
创建数据集后,位置无法更改,但您可以将数据集复制到其他位置或手动将数据集移动(重新创建)到其他位置。要了解更多信息,请参阅更改数据集位置。
Firebase 会定期将您的数据从您的 Firebase 项目同步到 BigQuery。这些日常导出操作通常会在计划后的 24 小时内完成。
默认情况下,您项目中的所有应用都链接到 BigQuery。您以后添加到项目中的任何应用程序都会自动链接到 BigQuery。您可以管理哪些应用程序发送数据。
要停用 BigQuery 导出,请在 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
是网络请求URL的分类模式
-
每个性能事件都包含事件的属性(例如客户端设备的国家和运营商),以及特定于事件的信息:
- 持续时间跟踪、跟踪指标和屏幕跟踪包含
trace_info
- 跟踪指标包含
trace_info.metric_info
- 屏幕痕迹包含
trace_info.screen_info
- 网络跟踪包含
network_info
详细的数据模式
字段名称 | 类型 | 描述 |
---|---|---|
事件时间戳 | 时间戳 | 自事件在客户端设备上开始(跟踪开始、网络开始等)的纪元以来的时间戳 |
app_display_version | 细绳 | 显示应用程序的版本(例如“4.1.7”)
|
app_build_version | 细绳 | 应用程序的构建版本(例如,“1523456”)
|
操作系统版本 | 细绳 | 客户端设备的操作系统版本
|
设备名称 | 细绳 | 客户端设备的名称(例如“Google Pixel”) |
国家 | 细绳 | 事件发生所在国家/地区的两个字母国家/地区代码(例如,“US”或“ZZ”表示未知国家/地区) |
载体 | 细绳 | 客户端设备的运营商 |
收音机类型 | 细绳 | 事件发生时的活动无线电类型(例如,“WIFI”) |
自定义属性 | 数组<记录> | 附加到此事件的所有自定义属性 |
自定义属性.key | 细绳 | 自定义属性的键 |
自定义属性值 | 细绳 | 自定义属性的值 |
事件类型 | 细绳 | 事件类型;可能的值:
|
事件名称 | 细绳 | 活动名称
|
parent_trace_name | 细绳 | 承载trace metric的父trace名称 仅针对 TRACE_METRIC 存在 |
跟踪信息 | 记录 | 仅针对DURATION_TRACE 、 SCREEN_TRACE 和TRACE_METRIC |
trace_info.duration_us | 整数64 |
|
trace_info.screen_info | 记录 | 仅针对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 毫秒) |
跟踪信息.metric_info | 记录 | 仅针对TRACE_METRIC 存在 |
trace_info.metric_info.metric_value | 整数64 | 跟踪指标的值 |
网络信息 | 记录 | 仅针对NETWORK_REQUEST 存在 |
network_info.response_code | 整数64 | 网络响应的 HTTP 响应代码(例如 200、404) |
network_info.response_mime_type | 细绳 | 网络响应的 MIME 类型(例如,“text/html”) |
network_info.request_http_method | 细绳 | 网络请求的 HTTP 方法(例如,“GET”或“POST”) |
network_info.request_payload_bytes | 整数64 | 网络请求负载的大小 单位:字节 |
network_info.response_payload_bytes | 整数64 | 网络响应负载的大小 单位:字节 |
network_info.request_completed_time_us | 整数64 | 网络请求发送完成后event_timestamp 后的微秒单位:微秒 |
network_info.response_initiated_time_us | 整数64 | 启动网络响应时event_timestamp 后的微秒单位:微秒 |
network_info.response_completed_time_us | 整数64 | 网络响应完成时event_timestamp 之后的微秒单位:微秒 |
您可以使用导出的数据做什么?
以下部分提供了一些查询示例,您可以在 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
的自定义指标( 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;
将您的性能监控数据带到任何地方
有时您想要访问您的性能监控数据服务器端或将其推送到另一个第三方解决方案。目前导出数据不收费。
您可以通过以下方式导出数据:
使用 BigQuery 网页界面
运行 CLI 命令
bq extract
通过 API 或客户端库提交提取作业。
价钱
从 Performance Monitoring 导出数据是免费的,BigQuery 提供慷慨的免费使用限制。有关详细信息,请参阅BigQuery 定价或BigQuery 沙盒。