获取我们在 Firebase 峰会上发布的所有信息,了解 Firebase 可如何帮助您加快应用开发速度并满怀信心地运行应用。了解详情

将性能监控数据导出到 BigQuery

您可以将性能监控数据从 Apple 和 Android 应用导出到BigQuery以进行进一步分析。 BigQuery 允许您使用 BigQuery SQL 分析数据,将其导出到另一个云提供商,甚至可以将数据用于您的自定义 ML 模型。

启用 BigQuery 导出

  1. 转到 Firebase 控制台中的集成页面,然后点击BigQuery卡中的链接

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

    当您为性能监控启用 BigQuery 导出时,会发生以下情况:

    • Firebase将现有数据的副本导出到 BigQuery。用于导出的数据的初始传播最多可能需要 48 小时才能完成。

      • 您可以手动将数据回填时间安排到过去 30 天或启用 BigQuery 导出的最近日期(以最近的日期为准)。
    • 创建数据集后,位置无法更改,但您可以将数据集复制到其他位置或手动将数据集移动(重新创建)到其他位置。要了解更多信息,请参阅更改数据集位置

    • Firebase 会定期将您的数据从 Firebase 项目同步到 BigQuery。这些日常导出操作通常在预定后的 24 小时内完成。

    • 默认情况下,您项目中的所有应用都链接到 BigQuery。您稍后添加到项目中的任何应用都会自动链接到 BigQuery。您可以管理哪些应用程序发送数据

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

哪些数据会导出到 BigQuery?

对于项目中的每个应用程序,导出会创建一个包含所有捕获的性能事件的表。表中的每一行都是一个单独的性能事件,可以是以下之一:

  • 持续时间跟踪- 默认情况下收集“持续时间”指标的跟踪,包括应用程序启动、应用程序在前台和应用程序在后台,以及任何开发人员检测的自定义代码跟踪

    • event_typeDURATION_TRACE
    • event_name与跟踪名称相同
  • Trace metric — 与开发人员检测的自定义代码跟踪相关联的自定义指标

    • event_typeTRACE_METRIC
    • event_name是指标的名称
    • parent_trace_name是包含此指标的跟踪名称
  • 屏幕跟踪— 跨越屏幕生命周期的跟踪(屏幕渲染跟踪)

    • event_typeSCREEN_TRACE
    • event_name是前缀_st_加上实际的屏幕名称
  • 网络请求——跨越网络请求生命周期的跟踪(HTTP 网络请求跟踪)

    • event_typeNETWORK_REQUEST
    • event_name是网络请求 URL 的分类模式

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

  • 持续时间跟踪、跟踪指标和屏幕跟踪包含trace_info
  • 跟踪指标包含trace_info.metric_info
  • 屏幕跟踪包含trace_info.screen_info
  • 网络跟踪包含network_info

详细的数据架构

字段名称类型描述
event_timestamp时间戳自 Epoch 在客户端设备上启动事件时的时间戳(跟踪启动、网络启动等)
app_display_version细绳显示应用程序的版本(例如,“4.1.7”)
  • 对于 Android - VersionName
  • 对于 iOS — CFBundleShortVersionString
app_build_version细绳应用程序的构建版本(例如,“1523456”)
  • 对于 Android - VersionCode
  • 对于 iOS — CFBundleVersion
操作系统版本细绳客户端设备的操作系统版本
  • 对于 Android - Android API 级别(例如“26”)
  • 对于 iOS - iOS 版本(例如“11.4”)
设备名称细绳客户端设备的名称(例如,“Google Pixel”)
国家细绳事件发生所在国家/地区的两个字母的国家/地区代码(例如,“US”或“ZZ”代表未知国家)
载体细绳客户端设备的运营商
radio_type细绳事件发生时的活动无线电类型(例如,“WIFI”)
自定义属性数组<记录>附加到此事件的所有自定义属性
custom_attributes.key细绳自定义属性的键
custom_attributes.value细绳自定义属性的值
事件类型细绳事件类型;可能的值:
  • DURATION_TRACE — 默认情况下收集“持续时间”指标的跟踪,包括应用程序启动、应用程序在前台和应用程序在后台,以及任何开发人员检测的自定义代码跟踪
  • SCREEN_TRACE — 跨越屏幕生命周期的跟踪(屏幕渲染跟踪)
  • TRACE_METRIC — 与开发人员检测的自定义代码跟踪关联的自定义指标
  • NETWORK_REQUEST — 跨越网络请求生命周期的跟踪(HTTP 网络请求跟踪)
事件名称细绳活动名称
  • 对于DURATION_TRACE — 跟踪名称
  • 对于TRACE_METRIC — 自定义指标名称
  • 对于SCREEN_TRACE_st_后跟跟踪名称
  • 对于NETWORK_REQUEST — 网络请求 URL 模式
parent_trace_name细绳携带跟踪指标的父跟踪的名称
仅适用于TRACE_METRIC
跟踪信息记录仅适用于DURATION_TRACESCREEN_TRACETRACE_METRIC
trace_info.duration_us整数64
  • 对于DURATION_TRACESCREEN_TRACE — 从跟踪开始到结束的时间长度(“持续时间”)
  • 对于TRACE_METRIC — 从父跟踪开始到结束的时间长度(“持续时间”)
单位:微秒
trace_info.screen_info记录SCREEN_TRACE
trace_info.screen_info.slow_frame_ratio浮动64此屏幕跟踪的慢帧比率,介于 0 和 1 之间(例如,值 0.05 表示此屏幕实例的 5% 帧的渲染时间超过 16 毫秒)
trace_info.screen_info.frozen_frame_ratio浮动64此屏幕跟踪的冻结帧比率,介于 0 和 1 之间(例如,值 0.05 表示此屏幕实例的 5% 的帧花费了超过 700 毫秒的时间来渲染)
trace_info.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 提供了慷慨的免费使用限制。有关详细信息,请参阅BigQuery 定价BigQuery 沙盒