添加新的遥测探针

在 Firefox 中,遥测系统会收集 Firefox 性能、硬件、使用情况和自定义设置等各种指标,并将其提交给 Mozilla。本文概述了添加任何新的遥测数据收集所需的信息。

重要

Firefox 中的每个新数据收集都需要来自数据收集同行的 数据收集审查。只需为其中一位数据同行设置 feedback? 标记即可。他们会尝试在工作日内回复。

你的目标是什么?

我们提供了各种 数据收集工具,每个工具都满足不同的需求。在深入了解技术细节之前,最好先退一步,考虑一下你需要实现的目标。

你的目标可能是回答诸如“有多少人使用功能 X?”或“服务 Y 的错误率是多少?”之类产品问题。你也可以专注于回答工程问题,例如“哪些 Web 功能使用最多?”或“引擎 Z 的性能如何?”。

由此,你应该问的问题是

  • 哪些是最少的数据可以回答你的问题?

  • 你需要从多少人那里获取这些数据?

  • 预发布渠道的数据是否足够?

这也会影响 数据收集审查,该审查需要一个关于如何使用数据的计划。所有新的数据收集都需要进行数据收集审查。

数据收集级别

我们的大部分数据收集都属于以下两个级别之一:发布预发布

发布数据在所有渠道上默认记录,用户需要明确选择退出才能禁用它。这对我们可以收集的数据有 更严格的限制。“大多数”用户会提交这些数据。

预发布数据不会在发布版上记录,但会在我们的预发布渠道(Beta 和 Nightly)上默认收集,因此可能会存在偏差。

这些级别涵盖了 Firefox 隐私声明中所述内容。对于其他需求,可能存在需要用户明确选择加入并显示收集哪些数据的自定义机制。

丰富数据 & 聚合数据

对于数据的记录和传输,我们提供了各种数据类型。我们可以将这些数据类型分为两大类。

聚合数据在客户端进行聚合,发送、处理和分析的成本低廉。例如,这可能是标签打开次数的简单计数,或者显示在标签之间切换所需时间的直方图。这应该是你的默认选择,并且在我们的分析工具中得到了很好的支持。

丰富数据用于无法从聚合数据中获得答案的问题。当我们发送更详细的数据时,我们可以例如看到特定的 UI 交互何时发生以及在什么上下文中发生。

作为一般规则,你可以根据你的目标来确定数据类型的选择,如下所示

目标

收集类型

实现

持续监控

健康跟踪

KPI 影响

聚合数据

直方图

标量

环境数据

详细的用户行为

漏斗分析

诊断

丰富数据

事件遥测

详细的自定义 ping

日志

崩溃数据

聚合数据

我们的大部分数据收集都是通过 标量直方图 进行的。

  • 标量允许收集简单值,例如计数、布尔值和字符串。

  • 直方图允许收集多个不同的值,但将它们聚合到一定数量的桶中。每个桶都有一个值范围和一个我们记录了多少值的计数。

标量和直方图都允许通过键进行记录。这允许更灵活的两级数据收集。

我们还收集 环境数据。这主要由捕获 Firefox 会话“工作环境”的标量值组成,包括例如硬件、操作系统、附加组件和一些设置方面的数据。任何属于“工作环境”的一部分或需要拆分 子会话 的数据都应该包含在其中。

丰富数据

聚合数据可以告诉你某些事情发生了,但通常缺乏关于究竟发生了什么的细节。当需要更多细节时,我们可以使用其他工具收集效率较低的数据。这通常意味着由于成本和性能方面的考虑,我们无法为所有用户启用数据收集。

有多种机制可以收集丰富数据

堆栈收集有助于例如诊断挂起。堆栈数据记录到 chrome 挂起和线程挂起统计信息中。为了诊断很少使用的代码是从哪里调用的,你可以使用堆栈捕获。

事件遥测 提供了一种记录何时以及发生了什么的方法。这例如可以实现使用情况的漏斗分析。

自定义 ping 用于其他现有数据收集无法满足你的需求时。提交自定义 ping 使你能够提交自己的 JSON 包,该包将被传递到遥测服务器。但是,这会让你无法访问现有的工具,并使你的数据更难与其他来源合并。

设置 & 构建

每个 Firefox 构建都启用了遥测。没有自定义构建标志的本地开发人员构建将记录所有遥测数据,但不会发送出去。

添加任何新的标量、直方图或事件时,都需要构建 Firefox。即使代码更改仅限于 JavaScript,目前也不支持工件构建。

通常,你不需要发送数据来添加新的遥测。在极少数情况下你需要这样做,你需要在你的 .mozconfig 中添加以下内容

MOZ_TELEMETRY_REPORTING=1
MOZILLA_OFFICIAL=1

测试

本地确认

你的第一步始终应该是本地确认你的新数据收集。

about:telemetry 页面允许查看你在过去 60 天内提交给遥测的任何数据,无论是在现有的 ping 中还是在新自定义 ping 中。你可以在左上角选择要显示的 ping。

如果你需要确认 ping 何时或是否正在发送,则可以在本地运行 gzipServer 的实例。它大致模拟了官方遥测服务器的响应方式,并将所有接收到的 ping 保存到磁盘以供检查。

测试覆盖率

任何需要根据其进行决策的数据收集都需要有测试覆盖率。使用 JS,你可以访问数据收集的记录值。你可以使用以下函数

如果你需要测试 ping 是否已正确传递到遥测,则可以使用 TelemetryArchiveTesting

验证

虽然确认数据收集在你的机器上是否有效很重要,但 Firefox 用户群体非常多样化。在根据任何新数据做出决策之前,应对其进行验证。这可能采取各种形式。

对于使用现有遥测数据类型的新数据收集,传输机制已经过测试。验证传入的值就足够了。这可以通过 Redash 或通过 自定义分析 来实现。

对于新的自定义 ping,你需要检查模式验证结果,以及内容是否有效。

获取帮助

你可以在 telemetry.mozilla.org 上找到所有重要的遥测资源。

遥测团队随时准备帮助解决任何问题。你可以通过以下方式联系我们