Google 致力于为黑人社区推动种族平等。查看具体举措

将 Performance Monitoring 数据导出到 BigQuery

您可以将 Performance Monitoring 数据从 iOS 和 Android 应用导出到 BigQuery 以供进一步分析。 借助 BigQuery,您可以使用 BigQuery SQL 来分析数据,将数据导出到其他云服务商,甚至可以将这些数据用于您的自定义机器学习模型。

启用 BigQuery Export

  1. 转到 Firebase 控制台中的“集成”页面,然后点击 BigQuery 卡片中的关联

  2. 按照屏幕上的说明启用 BigQuery。

当您将项目关联到 BiqQuery 时:

  • Firebase 会将您的现有数据的副本导出到 BigQuery。

    • 初始关联时,Firebase 会自动安排 BigQuery 表回填过去 7 天的数据,以便您可以立即开始试用。请等待几小时,直到 BigQuery 中有可用的初始数据。

    • 您也可以手动安排数据回填(最近 30 天内)。

  • Firebase 会安排每日将您的数据从 Firebase 项目同步到 BigQuery。

  • 默认情况下,您项目中的所有应用都会关联到 BigQuery,而且您以后向项目中添加的所有应用也都会自动关联到 BigQuery。您可以管理哪些应用可发送数据

如需停用 BigQuery 导出,请在 Firebase 控制台中取消关联您的项目

哪些数据会导出至 BigQuery?

对于项目中的每个应用,导出操作会创建一个表,其中包含所有捕获的性能事件。表中的每一行都是一个性能事件,可以是以下任一值:

  • 时长跟踪记录 - 默认情况下收集“时长”指标的跟踪记录,包括应用启动、应用前台活动、应用后台活动以及开发者插桩的任何自定义代码跟踪记录

    • event_typeDURATION_TRACE
    • event_name 与跟踪记录名称相同
  • 跟踪记录指标 - 与开发者插桩的自定义代码跟踪记录关联的自定义指标

    • event_typeTRACE_METRIC
    • event_name 是指标的名称
    • parent_trace_name 是包含该指标的跟踪记录名称
  • 屏幕跟踪记录 - 涵盖屏幕生命周期的跟踪记录(屏幕呈现跟踪记录)

    • event_typeSCREEN_TRACE
    • event_name 是前缀 _st_ 加上实际的屏幕名称
  • 网络请求 - 涵盖网络请求生命周期的跟踪记录(HTTP 网络请求跟踪记录)

    • event_typeNETWORK_REQUEST
    • event_name 是网络请求网址的分类格式

每个性能事件都包含该事件的属性(例如客户端设备的国家/地区和运营商)以及事件特定信息:

  • 时长跟踪记录、跟踪记录指标和屏幕跟踪记录包含 trace_info
  • 跟踪记录指标包含 trace_info.metric_info
  • 屏幕跟踪记录包含 trace_info.screen_info
  • 网络跟踪记录包含 network_info

详细的数据架构

字段名称 类型 说明
event_timestamp 时间戳 事件在客户端设备上开始后所经过周期的时间戳(跟踪记录启动、网络启动等)
app_display_version 字符串 应用的显示版本(例如“4.1.7”)
  • 对于 Android 设备 - VersionName
  • 对于 iOS 设备 - CFBundleShortVersionString
app_build_version 字符串 应用的版本号(例如“1523456”)
  • 对于 Android 设备 - VersionCode
  • 对于 iOS 设备 - CFBundleVersion
os_version 字符串 客户端设备的操作系统版本
  • 对于 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 - 涵盖网络请求生命周期的跟踪记录(HTTP 网络请求跟踪记录)
event_name 字符串 事件名称
  • 对于 DURATION_TRACE - 跟踪记录名称
  • 对于 TRACE_METRIC - 自定义指标名称
  • 对于 SCREEN_TRACE - _st_ 后跟跟踪记录名称
  • 对于 NETWORK_REQUEST - 网络请求网址格式
parent_trace_name 字符串 含有跟踪记录指标的父跟踪记录的名称
仅适用于 TRACE_METRIC
trace_info RECORD 仅适用于 DURATION_TRACESCREEN_TRACETRACE_METRIC
trace_info.duration_us int64
  • 对于 DURATION_TRACESCREEN_TRACE - 从跟踪记录开始到结束的时间长度(“时长”)
  • 对于 TRACE_METRIC - 从父跟踪记录开始到结束的时间长度(“时长”)
单位:微秒
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(网络响应完成时)之后所经历的微秒数
单位:微秒

您可以对导出的数据执行哪些操作?

以下部分提供了您可以针对导出的性能监控数据在 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;

随时随地获取 Performance Monitoring 数据

有时,您想要访问性能监控数据服务器端或将其推送到另一个第三方解决方案。目前,您可免费导出数据。

您可以通过以下方式导出数据:

价格

从性能监控导出数据是免费的,并且 BigQuery 提供宽裕的免费使用限额。如需了解详情,请参阅 BigQuery 价格BigQuery 沙盒