将 Firefox 遥测迁移到 Glean¶
本指南旨在帮助您将各个数据收集从 Firefox 遥测 通过 Firefox on Glean 迁移到 Glean。
这旨在作为参考,以帮助您填写 迁移工作表,或在心理上将遥测概念转换为 Glean 概念。
需要牢记的一般事项¶
您应该熟悉 有关向 Firefox 桌面添加新指标的指南。它的建议与本指南中包含的建议相叠加,因为(一旦您弄清楚了哪种类型)您确实将添加新的指标。
还有一些其他与将 Firefox 遥测内容迁移到 Glean 内容相关的广泛主题。
进程无关性:不再有 record_in_processes
字段¶
Glean(以及 FOG)不知道任何关于进程的信息,除了确保所有数据都发送到父进程所需的信息外。Firefox 遥测非常关心哪个进程正在收集哪些特定数据,并将它们分开。
如果您在多个进程中收集数据并希望将每个进程类型的数据分开,则需要自己提供这种分离。
请参阅 此开发文档,了解如何执行此操作的示例。
渠道无关性:不再有 release_channel_collection: opt-out
¶
FOG 不会区分预发布版 Firefox 和正式版 Firefox,除非必须将正确的渠道放入 client_info.app_channel
中。
这意味着所有数据都在所有构建配置中收集。
如果您希望或需要仅在预发布版 Firefox 中收集数据,请使用 EARLY_BETA_OR_EARLIER
#define
或 AppConstant
。
文件级产品包含/排除:不再有 products
字段¶
Glean 通过 依赖项树确定哪些指标在哪些产品中记录。这意味着 FOG 不会在每个产品的级别区分产品。
如果您的某些指标在不同的产品集中记录(例如,您的某些指标在 Firefox 桌面版和 Firefox for Android 中都收集,但其他指标是 Firefox 桌面版特有的),则必须将它们分成单独的 定义文件。
许多定义文件¶
预计每个组件都拥有并维护其自己的 指标定义文件。没有集中的 Histograms.json
或 Scalars.yaml
或 Events.yaml
。
相反,正在检测的组件将拥有自己的 metrics.yaml
(以及任何 [自定义 Ping][custom-pings] 的 pings.yaml
),您将在其中定义数据。
有关详细信息,请参阅 本指南。
测试¶
Firefox 遥测对测试检测代码的支持非常不均衡。FOG 有更好的支持。您可以在任何可以检测的地方进行测试。
它就像调用 testGetValue
一样简单。
所有迁移的集合都应进行测试。如果您无法测试它们,那么您最好有一个非常好的理由说明为什么不能。
有关更多详细信息,请参阅 检测工具测试文档。
我应该使用哪种 Glean 指标类型?¶
Glean 使用比 Firefox 遥测更高的指标类型。这使得迁移变得复杂,因为 Firefox 遥测中的“只是一个数字”可能映射到任何数量的 Glean 指标类型。
请选择最能解决您问题的特定指标类型。这将使分析更容易,因为
其他人将更多地了解如何从更具体的类型分析指标。
工具将能够仅针对更具体的类型显示相关操作。
示例
直方图¶
直方图 是最古老的 Firefox Telemetry 数据类型,因此它们积累了 (哈!) 最多的使用方法。
直方图中的标量值:kind flag
和 count
¶
如果您有一个恰好记录一个值的直方图,请向下滚动并查看相关标量的迁移指南。
对于 kind 为
flag
的直方图,请参阅“kind 为bool
的标量”。对于 kind 为
count
的直方图,请参阅“kind 为uint
的标量”。
连续分布:kind linear
和 exponential
¶
如果您要迁移的直方图由多个桶组成,这些桶共同形成一个连续范围(例如,您有 1-5、6-10、11-19 和 20-50 这些桶 - 它们形成了 1-50 的范围),那么您需要在 Glean 中使用“分布”指标类型。哪种“分布”指标类型取决于样本是什么。
计时样本 - 使用 Glean 的 timing_distribution
¶
Firefox Telemetry 中最常见的连续分布类型是计时样本的直方图,例如 GC_MS
。
在 Glean 中,此类数据使用 timing-distribution
指标类型进行记录。
您将不再需要担心值的范围或桶的数量或分布(由直方图定义中的 low
、high
、n_buckets
或 kind
表示)。Glean 使用 巧妙的自动分桶算法 取而代之。
因此,对于一个像这样记录计时样本的直方图
"GC_MS": {
"record_in_processes": ["main", "content"],
"products": ["firefox"],
"alert_emails": ["[email protected]", "[email protected]"],
"expires_in_version": "never",
"releaseChannelCollection": "opt-out",
"kind": "exponential",
"high": 10000,
"n_buckets": 50,
"bug_numbers": [1636419],
"description": "Time spent running JS GC (ms)"
},
您将迁移到一个像这样的 timing_distibution
指标类型
js:
gc:
type: timing_distribution
time_unit: millisecond
description: |
Time spent running the Javascript Garbage Collector.
Migrated from Firefox Telemetry's `GC_MS`.
bugs:
- https://bugzilla.mozilla.org/show_bug.cgi?id=1636419
data_reviews:
- https://bugzilla.mozilla.org/show_bug.cgi?id=1636419#c8
data_sensitivity:
- technical
notification_emails:
- [email protected]
- [email protected]
expires: never
GIFFT:这种类型的收集可以通过 用于 Firefox Telemetry 的 Glean 接口 镜像回 Firefox Telemetry。请参阅 指南 获取说明。
内存样本 - 使用 Glean 的 memory_distribution
¶
Firefox Telemetry 中 linear
或 exponential
直方图的另一个常见内容是内存样本。例如,MEMORY_TOTAL
的样本以千字节为单位。
在 Glean 中,此类数据使用 memory-distribution
指标类型进行记录。
您将不再需要担心值的范围或桶的数量或分布(由直方图定义中的 low
、high
、n_buckets
或 kind
表示)。Glean 使用 巧妙的自动分桶算法 取而代之。
因此,对于一个像这样记录内存样本的直方图
"MEMORY_TOTAL": {
"record_in_processes": ["main"],
"products": ["firefox", "thunderbird"],
"alert_emails": ["[email protected]", "[email protected]"],
"bug_numbers": [1198209, 1511918],
"expires_in_version": "never",
"kind": "exponential",
"low": 32768,
"high": 16777216,
"n_buckets": 100,
"description": "Total Memory Across All Processes (KB)",
"releaseChannelCollection": "opt-out"
},
您将迁移到一个像这样的 memory_distribution
指标类型
memory:
total:
type: memory_distribution
memory_unit: kilobyte
description: |
The total memory allocated across all processes.
Migrated from Telemetry's `MEMORY_TOTAL`.
bugs:
- https://bugzilla.mozilla.org/show_bug.cgi?id=1198209
- https://bugzilla.mozilla.org/show_bug.cgi?id=1511918
data_reviews:
- https://bugzilla.mozilla.org/show_bug.cgi?id=1511918#c9
data_sensitivity:
- technical
notification_emails:
- [email protected]
- [email protected]
expires: never
GIFFT:这种类型的收集可以通过 用于 Firefox Telemetry 的 Glean 接口 镜像回 Firefox Telemetry。请参阅 指南 获取说明。
百分比样本 - 在 bug 1657467 上发表评论¶
Firefox 桌面中一个非常常见的直方图是百分比样本的分布。 例如,GC_SLICE_DURING_IDLE
。
Glean 目前没有一个好的指标类型来处理这种情况。但是我们 打算添加一个。如果您正在迁移此类型的收集,请在错误报告中添加一条评论,详细说明您正在迁移哪个探测器,以及您需要在何时迁移。我们将根据此优先级添加此指标类型。
其他 - 使用 Glean 的 custom_distribution
¶
连续分布直方图已经存在足够长的时间,以至于变得很奇怪。如果您正在迁移其中一个具有像 “像素平方根乘以毫秒” 这样的单位的直方图,我们有一个“万能”的指标类型供您使用:自定义分布。
遗憾的是,您必须关心此分桶算法和桶范围。因此,对于一个具有手工样本的直方图,例如
"CHECKERBOARD_SEVERITY": {
"record_in_processes": ["main", "content", "gpu"],
"products": ["firefox"],
"alert_emails": ["[email protected]", "[email protected]"],
"bug_numbers": [1238040, 1539309, 1584109],
"releaseChannelCollection": "opt-out",
"expires_in_version": "never",
"kind": "exponential",
"high": 1073741824,
"n_buckets": 50,
"description": "Opaque measure of the severity of a checkerboard event"
},
您将将其迁移到一个像这样的 custom_distribution
gfx.checkerboard:
severity:
type: custom_distribution
range_max: 1073741824
bucket_count: 50
histogram_type: exponential
unit: Opaque unit
description: >
An opaque measurement of the severity of a checkerboard event.
This doesn't have units, it's just useful for comparing two checkerboard
events to see which one is worse, for some implementation-specific
definition of "worse". The larger the value, the worse the
checkerboarding.
Migrated from Telemetry's `CHECKERBOARD_SEVERITY`.
bugs:
- https://bugzilla.mozilla.org/show_bug.cgi?id=1238040
- https://bugzilla.mozilla.org/show_bug.cgi?id=1539309
- https://bugzilla.mozilla.org/show_bug.cgi?id=1584109
data_reviews:
- https://bugzilla.mozilla.org/show_bug.cgi?id=1584109#c1
notification_emails:
- [email protected]
- [email protected]
data_sensitivity:
- technical
expires: never
待办事项 Bug 1677447:自定义分布尚未在 FOG 中实现。我们正在努力。完成后,我们将看看它们是否像其他分布一样支持 GIFFT。
具有连续样本分布的键控直方图 - 在 #glean:mozilla.org 上寻求帮助¶
Glean 目前没有一个好的指标类型来处理像按编解码器键控的视频播放时间这样的键控连续分布。请 联系我们 解释您的用例。我们将帮助您在 Glean 目前提供的功能范围内工作,或者 为您设计一个新的指标类型。
离散分布:kind categorical
、enumerated
或 boolean
- 使用 Glean 的 labeled_counter
¶
如果样本不落在连续范围内,而是落在已知的桶数量中,Glean 为这些情况提供了 带标签的计数器。
只需在 labeled_counter
中将离散类别枚举为 labels
。
例如,对于一个 kind 为 categorical
的直方图,例如
"AVIF_DECODE_RESULT": {
"record_in_processes": ["main", "content"],
"products": ["firefox"],
"alert_emails": ["[email protected]", "[email protected]"],
"expires_in_version": "never",
"releaseChannelCollection": "opt-out",
"kind": "categorical",
"labels": [
"success",
"parse_error",
"no_primary_item",
"decode_error",
"size_overflow",
"out_of_memory",
"pipe_init_error",
"write_buffer_error",
"alpha_y_sz_mismatch",
"alpha_y_bpc_mismatch"
],
"description": "Decode result of AVIF image",
"bug_numbers": [1670827]
},
您将迁移到一个像这样的 labeled_counter
avif:
decode_result:
type: labeled_counter,
description: |
Each AVIF image's decode result.
Migrated from Telemetry's `AVIF_DECODE_RESULT`.
labels:
- success
- parse_error
- no_primary_item
- decode_error
- size_overflow
- out_of_memory
- pipe_init_error
- write_buffer_error
- alpha_y_sz_mismatch
- alpha_y_bpc_mismatch
bugs:
- https://bugzilla.mozilla.org/show_bug.cgi?id=1670827
data_reviews:
- https://bugzilla.mozilla.org/show_bug.cgi?id=1670827#c9
data_sensitivity:
- technical
notification_emails:
- [email protected]
- [email protected]
expires: never
GIFFT:这种类型的收集可以通过 用于 Firefox Telemetry 的 Glean 接口 镜像回 Firefox Telemetry。请参阅 指南 获取说明。注意:这将镜像回 kind 为 uint
的键控标量,而不是任何类型的直方图,因此您最初未迁移的直方图不能用作镜像。
具有离散样本分布的键控直方图:"keyed": true
和 kind categorical
、enumerated
或 boolean
- 在 bug 1657470 上发表评论¶
Glean 目前没有一个好的指标类型来处理这种情况。但是我们 打算添加一个。如果您正在迁移此类型的收集,请在错误报告中添加一条评论,详细说明您正在迁移哪个探测器,以及您需要在何时迁移。我们将根据此优先级添加此指标类型。
标量¶
标量 是具有多种用途的低级单个数据收集。
您对其调用 scalarAdd
的 kind: uint
的标量 - 使用 Glean 的 counter
¶
最常见的标量类型是 kind: uint
。此类标量最常见的用法是,在可计数的事情发生时重复对其调用 scalarAdd
。
可计数事物的 Glean 指标类型是 counter
指标类型。
因此,对于一个像这样的标量
script.preloader:
mainthread_recompile:
bug_numbers:
- 1364235
description:
How many times we ended up recompiling a script from the script preloader
on the main thread.
expires: "100"
keyed: false
kind: uint
notification_emails:
- [email protected]
- [email protected]
release_channel_collection: opt-out
products:
- 'firefox'
- 'fennec'
record_in_processes:
- 'main'
- 'content'
您将迁移到一个像这样的 counter
指标类型
script.preloader:
mainthread_recompile:
type: counter
description: |
How many times we ended up recompiling a script from the script preloader
on the main thread.
Migrated from Telemetry's `script.preloader.mainthread_recompile`.
bugs:
- https://bugzilla.mozilla.org/show_bug.cgi?id=1364235
data_reviews:
- https://bugzilla.mozilla.org/show_bug.cgi?id=1364235#c25
data_sensitivity:
- technical
notification_emails:
- [email protected]
- [email protected]
expires: "100"
GIFFT:这种类型的收集可以通过 用于 Firefox Telemetry 的 Glean 接口 镜像回 Firefox Telemetry。请参阅 指南 获取说明。
您对其调用 scalarAdd
的 kind: uint
的键控标量 - 使用 Glean 的 labeled_counter
¶
标量的另一个非常常见的用法是具有 kind: uint
的键控标量。这通常用于跟踪 UI 使用情况。
这由 Glean labeled_counter
指标类型 支持。
因此,对于一个像这样的 kind: uint
的键控标量
urlbar:
tips:
bug_numbers:
- 1608461
description: >
A keyed uint recording how many times particular tips are shown in the
Urlbar and how often their confirm and help buttons are pressed.
expires: never
kind: uint
keyed: true
notification_emails:
- [email protected]
release_channel_collection: opt-out
products:
- 'firefox'
record_in_processes:
- main
您将将其迁移到一个像这样的 labeled_counter
urlbar:
tips:
type: labeled_counter
description: >
A keyed uint recording how many times particular tips are shown in the
Urlbar and how often their confirm and help buttons are pressed.
Migrated from Telemetry's `urlbar.tips`.
bugs:
- https://bugzilla.mozilla.org/show_bug.cgi?id=1608461
data_reviews:
- https://bugzilla.mozilla.org/show_bug.cgi?id=1608461#c42
data_sensitivity:
- interaction
expires: never
notification_emails:
- [email protected]
现在,如果您的键控标量具有已知键的列表,您应该使用 labels
属性将其提供给 labeled_counter
,如下所示
urlbar:
tips:
type: labeled_counter
labels:
- tabtosearch_onboard_shown
- tabtosearch_shown
- searchtip_onboard_shown
...
GIFFT:这种类型的收集可以通过 用于 Firefox Telemetry 的 Glean 接口 镜像回 Firefox Telemetry。请参阅 指南 获取说明。
您对其调用 scalarSet
的 kind: uint
的标量 - 使用 Glean 的 quantity
¶
与作为部分总和的计数不同,您设置的 kind: uint
的标量可能包含任何内容。最佳指标类型取决于您正在设置的数据类型(请参阅“其他类似标量的类型”以了解一些可能性)。
如果它是一个您正在设置的数值,那么您很有可能最适合使用 Glean 的 quantity
指标类型。
对于一个这样的定量标量,例如
gfx.display:
primary_height:
bug_numbers:
- 1594145
description: >
Height of the primary display, takes device rotation into account.
expires: never
kind: uint
notification_emails:
- [email protected]
- [email protected]
products:
- 'firefox'
record_in_processes:
- 'main'
release_channel_collection: opt-out
您将将其迁移到一个像这样的 quantity
gfx.display:
primary_height:
type: quantity
unit: pixels
description: >
Height of the primary display, takes device rotation into account.
Migrated from Telemetry's `gfx.display.primary_height`.
bugs:
- https://bugzilla.mozilla.org/show_bug.cgi?id=1594145
- https://bugzilla.mozilla.org/show_bug.cgi?id=1687219
data_reviews:
- https://bugzilla.mozilla.org/show_bug.cgi?id=1594145#c4
data_sensitivity:
- technical
notification_emails:
- [email protected]
expires: never
请注意必需的 unit
属性。
GIFFT:这种类型的收集可以通过 用于 Firefox Telemetry 的 Glean 接口 镜像回 Firefox Telemetry。请参阅 指南 获取说明。
IPC 注意:由于 set
不是 交换操作,因此在非父进程上使用 quantity
是禁止的。这是一个优先考虑正确性而不是友好的限制,如果足够多的用例需要,我们可能会重新考虑。如果您希望我们这样做,请 联系我们。
您对其调用 scalarSet
的 kind: uint
的键控标量 - 在 #glean:mozilla.org 上寻求帮助¶
Glean 目前没有针对带键数量的良好指标类型。请联系我们解释您的用例。我们将帮助您在 Glean 当前提供的功能范围内工作,或者为您设计新的指标类型。
您称为 scalarSetMaximum
或某些操作组合的 kind: uint
类型的标量 - 请在 #glean:mozilla.org 上寻求帮助¶
Glean 目前没有针对处理最大值或同时计数和设置值的良好指标类型。请联系我们解释您的用例。我们将帮助您在 Glean 当前提供的功能范围内工作,或者为您设计新的指标类型。
kind: string
类型的标量 - 使用 Glean 的 string
¶
如果您的字符串值是唯一标识符,则首先考虑Glean 的 uuid
指标类型。
如果字符串标量值不适合该类型或任何其他更具体的指标类型,则Glean 的 string
指标类型 可以使用。
对于像这样的 kind: string
类型的标量
widget:
gtk_version:
bug_numbers:
- 1670145
description: >
The version of Gtk 3 in use.
kind: string
expires: never
notification_emails:
- [email protected]
release_channel_collection: opt-out
products:
- 'firefox'
record_in_processes:
- 'main'
您将将其迁移到像这样的 string
指标
widget:
gtk_version:
type: string
description: >
The version of Gtk 3 in use.
Migrated from Telemetry's `widget.gtk_version`.
bugs:
- https://bugzilla.mozilla.org/show_bug.cgi?id=1670145
data_reviews:
- https://bugzilla.mozilla.org/show_bug.cgi?id=1670145#c7
data_sensitivity:
- technical
notification_emails:
- [email protected]
expires: never
GIFFT:这种类型的收集可以通过 用于 Firefox Telemetry 的 Glean 接口 镜像回 Firefox Telemetry。请参阅 指南 获取说明。
IPC 注意:由于 set
不是交换操作,因此禁止在非父进程上使用 string
。这是一个优先考虑正确性而非友好的限制,如果足够多的用例需要,我们可能会重新考虑。如果您希望我们这样做,请联系我们。
kind: boolean
类型的标量 - 使用 Glean 的 boolean
¶
如果您需要存储简单的真/假值,Glean 的 boolean
指标类型 可能是最佳选择。
如果您需要存储的不仅仅是 true
和 false
,您可能更倾向于使用 labeled_counter
。
对于像这样的 kind: boolean
类型的标量
widget:
dark_mode:
bug_numbers:
- 1601846
description: >
Whether the OS theme is dark.
expires: never
kind: boolean
notification_emails:
- [email protected]
- [email protected]
release_channel_collection: opt-out
products:
- 'firefox'
- 'fennec'
record_in_processes:
- 'main'
您将迁移到像这样的 boolean
指标类型
widget:
dark_mode:
type: boolean
description: >
Whether the OS theme is dark.
Migrated from Telemetry's `widget.dark_mode`.
bugs:
- https://bugzilla.mozilla.org/show_bug.cgi?id=1601846
data_reviews:
- https://bugzilla.mozilla.org/show_bug.cgi?id=1601846#c5
data_sensitivity:
- technical
notification_emails:
- [email protected]
- [email protected]
expires: never
GIFFT:这种类型的收集可以通过 用于 Firefox Telemetry 的 Glean 接口 镜像回 Firefox Telemetry。请参阅 指南 获取说明。
IPC 注意:由于 set
不是交换操作,因此禁止在非父进程上使用 boolean
。这是一个优先考虑正确性而非友好的限制,如果足够多的用例需要,我们可能会重新考虑。如果您希望我们这样做,请联系我们。
带键的 kind: boolean
类型的标量 - 使用 Glean 的 labeled_boolean
¶
如果您有多个相关的真/假值,您可能已将它们放在带键的 kind: boolean
类型的标量中。
最匹配的类型是Glean 的 labeled_boolean
指标类型。
对于像这样的带键的 kind: boolean
类型的标量
devtools.tool:
registered:
bug_numbers:
- 1447302
- 1503568
- 1587985
description: >
Recorded on enable tool checkbox check/uncheck in Developer Tools options
panel. Boolean stating if the tool was enabled or disabled by the user.
Keyed by tool id. Current default tools with their id's are defined in
https://searchfox.org/mozilla-central/source/devtools/client/definitions.js
expires: never
kind: boolean
keyed: true
notification_emails:
- [email protected]
- [email protected]
release_channel_collection: opt-out
products:
- 'firefox'
- 'fennec'
record_in_processes:
- 'main'
您将迁移到像这样的 labeled_boolean
devtools.tool:
registered:
type: labeled_boolean
description: >
Recorded on enable tool checkbox check/uncheck in Developer Tools options
panel. Boolean stating if the tool was enabled or disabled by the user.
Migrated from Telemetry's `devtools.tool`.
labels:
- options
- inspector
- webconsole
- jsdebugger
- styleeditor
- performance
- memory
- netmonitor
- storage
- dom
- accessibility
- application
- dark
- light
bugs:
- https://bugzilla.mozilla.org/show_bug.cgi?id=1447302
- https://bugzilla.mozilla.org/show_bug.cgi?id=1503568
- https://bugzilla.mozilla.org/show_bug.cgi?id=1587985
data_reviews:
- https://bugzilla.mozilla.org/show_bug.cgi?id=1447302#c17
- https://bugzilla.mozilla.org/show_bug.cgi?id=1503568#c3
- https://bugzilla.mozilla.org/show_bug.cgi?id=1587985#c5
data_sensitivity:
- interaction
notification_emails:
- [email protected]
- [email protected]
expires: never
GIFFT:这种类型的收集可以通过 用于 Firefox Telemetry 的 Glean 接口 镜像回 Firefox Telemetry。请参阅 指南 获取说明。
IPC 注意:由于 set
不是交换操作,因此禁止在非父进程上使用 labeled_boolean
。这是一个优先考虑正确性而非友好的限制,如果足够多的用例需要,我们可能会重新考虑。如果您希望我们这样做,请联系我们。
其他类似标量的类型:rate
、timespan
、datetime
、uuid
¶
Glean SDK 为特定数据提供了一些非常方便的高级指标类型。如果您的数据
是两个或多个相关的数字(如失败次数与总数),则考虑Glean 的
rate
指标类型。是单个持续时间或时间跨度(如 Firefox 启动需要多长时间),则考虑Glean 的
timespan
指标类型。是单个时间点(如最近的同步时间),则考虑Glean 的
datetime
指标类型。是唯一标识符(如会话 ID),则考虑Glean 的
uuid
指标类型。
GIFFT:这些类型的收集可以通过用于 Firefox 遥测的 Glean 接口镜像回 Firefox 遥测。有关说明,请参阅指南。
事件 - 使用 Glean 的 event
¶
遥测事件 是 Firefox 桌面中使用较少的一种数据收集形式。Glean 旨在消除仪表员在Glean 的 event
指标类型中使用事件时面临的一些障碍。
不要担心启用事件类别。在 Glean 中,所有
events
始终处于启用状态。不再有事件
name
。Glean 中的事件遵循与其他指标相同的category.name.metric_name
命名结构。不再有
method
/object
/value
。Glean 中的事件仅是其标识符和一个extras
键值字典。
由于这两种事件类型并不完全类似,您需要决定您的事件
是否更倾向于将其
method
/object
/value
放入extras
字典中是否更倾向于将其
method
/object
/value
折叠到其标识符中
GIFFT:事件可以通过用于 Firefox 遥测的 Glean 接口镜像回 Firefox 遥测。有关说明,请参阅指南。
其他:环境、崩溃注释、使用计数器等 - 请在 #glean:mozilla.org 上寻求帮助¶
遥测有很多收集子系统构建在已提及的那些旁边。我们有针对常见子系统的解决方案,但它们完全取决于具体的用例。请联系我们解释它,以便我们能够帮助您在 Glean 当前提供的功能范围内工作,或者为您设计新的指标类型。