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

将性能监控数据导出到 BigQuery

使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。

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

启用 BigQuery 导出

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

  2. 按照屏幕上的说明启用 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是网络请求URL的分类模式

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

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

详细的数据模式

字段名称类型描述
事件时间戳时间戳自事件在客户端设备上开始(跟踪开始、网络开始等)的纪元以来的时间戳
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”表示未知国家/地区)
载体细绳客户端设备的运营商
收音机类型细绳事件发生时的活动无线电类型(例如,“WIFI”)
自定义属性数组<记录>附加到此事件的所有自定义属性
自定义属性.key细绳自定义属性的键
自定义属性值细绳自定义属性的值
事件类型细绳事件类型;可能的值:
  • DURATION_TRACE — 默认情况下收集“持续时间”指标的跟踪,包括应用程序启动、应用程序在前台和应用程序在后台,以及任何开发人员检测的自定义代码跟踪
  • SCREEN_TRACE — 跨越屏幕生命周期的痕迹(屏幕渲染痕迹)
  • TRACE_METRIC — 与开发人员检测的自定义代码跟踪关联的自定义指标
  • NETWORK_REQUEST — 跨越网络请求生命周期的跟踪(HTTP 网络请求跟踪)
事件名称细绳活动名称
  • 对于DURATION_TRACE — 跟踪名称
  • 对于TRACE_METRIC — 自定义指标名称
  • 对于SCREEN_TRACE_st_后跟跟踪名称
  • 对于NETWORK_REQUEST — 网络请求 URL 模式
parent_trace_name细绳承载trace metric的父trace名称
仅针对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 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;

将您的性能监控数据带到任何地方

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

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

价钱

从 Performance Monitoring 导出数据是免费的,BigQuery 提供慷慨的免费使用限制。有关详细信息,请参阅BigQuery 定价BigQuery 沙盒