采样器 - 诊断数据转发器

采样器将 Inspect 诊断数据转发到 Cobalt 遥测系统。

如果您的组件使用 Inspect 进行插桩,只需更改配置文件即可使用 Cobalt 遥测(舰队监控)!如果您希望实现低门槛的舰队监控(没有新的 FIDL 集成、不需要新的数据模型,并且没有复杂的组件流控制),Sampler 就是您的理想之选!

我能得到什么?

Sampler 提供了一种复杂性更低的方法,可将舰队级监控功能添加到每个组件的调试工具包中。

集中式数据模型

许多开发者发现,需要维护两个单独的数据模型,一个用于设备端或崩溃报告调试,另一个用于舰队监控等用途,这会带来麻烦。

借助 Sampler,您可以将单个诊断数据模型 (Inspect) 作为所有诊断数据分支的来源。

避免直接集成的复杂性

对于某些组件(如驱动程序),其工作负载对系统来说非常重要,因此找到“合适的时间”来执行诊断报告等非基本工作是一项复杂的任务。通过将采样集中到采样器,我们能够将工作分流到可在非高峰用户负载期间运行的程序。即使对于不提供系统关键服务的组件,与 Sampler 集成也可以实现更明智的采样调度,从而使 Fuchsia 更加健康。

直接与 Cobalt 集成要求组件作者将其流控制视为向 Cobalt 设备端转发器发送请求的客户端。流控制在 Sampler 中是隐式的,因此您可以专注于上传通用指标类型,而无需添加新的服务依赖项。

使用入门

  1. 如果您是 V2 组件,请务必向诊断平台公开 diagnostics 目录。
  2. 注册您想要将 Inspect 指标转换为的 Cobalt 指标
  3. 创建采样器配置,定义从 Inspect 到 Cobalt 的转换。查看现有配置文件

采样器配置

我们将使用 FVM 集成作为示例配置。

{
  "project_id": 3676913920,
  "poll_rate_sec": 3600,
  "metrics": [
    {
      "selector": "bootstrap/driver_manager:root/fvm/partitions/blobfs:total_slices_reserved",
      "metric_id": 3000,
      "metric_type": "Integer",
      "event_codes": [0]
    },
    {
      "selector": "bootstrap/driver_manager:root/fvm/partitions/minfs:total_slices_reserved",
      "metric_id": 3000,
      "metric_type": "Integer",
      "event_codes": [1]
    }
  ]
}

Sampler 配置会指定一个顶级项目 ID,该 ID 指定了 Sampler 代表其进行采样和转发的 Cobalt 客户端。 它还指定了顶级 spot_rate_seconds,但在采样器 v1.1 中,此轮询速率将代表客户端迁移到针对每个指标的配置。

接下来,配置需要指标转换列表。在这些配置中,客户端会提供用于标识相关检查指标的选择器,以及代表客户端转发检查所需的 Cobalt 元数据。

  1. metric_type 是请求的指标转换类型。
    • 如果您的 Cobalt 指标的类型为 OCCURRENCE 用于跟踪数值聚合,请使用 metric_type 发生类型。
    • 如果您的 Cobalt 指标的类型为 INTEGER 用于跟踪原始整数(例如 cpu_load、thermal_temp),请使用 metric_type Integer
    • 如果您的 Cobalt 指标的类型为 INTEGER_HISTOGRAM,请使用 metric_type IntHistogram
    • 如果您的 Cobalt 指标的类型为 STRING,请使用 metric_type String
  2. metric_id 是您在 Cobalt yaml 文件中注册指标时使用的 ID。
  3. event_codes 是您注册 Cobalt 指标时指定的维度值列表。在 FVM 中,每个指标都有一个与其分区类型相对应的维度值。

注意:采样器配置中维度值的顺序必须与维度在 yaml 定义中声明的顺序一致。