采样器 - 诊断数据转发器

抽样器将检查诊断数据转发到 Cobalt 遥测系统。

如果您的组件已通过 Inspect 进行检测,只需更改配置文件,即可使用 Cobalt 遥测(机群监控)!如果您希望以较低的门槛开始进行设备群监控(无需新的 FIDL 集成、无需新的数据模型、组件中没有复杂的流量控制),那么 Sampler 非常适合您!

我能获得什么?

Sampler 提供了一种降低复杂性的方法,可将整个舰队的监控纳入每个组件的调试工具包中。

集中式数据模型

许多开发者发现,必须维护两个单独的数据模型(一个用于设备端或崩溃报告调试等,另一个用于机群监控等)非常麻烦。

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

避免直接集成的复杂性

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

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

使用入门

  1. 确保您使用 ComponentInspectorinspect_runtime 来提供 Inspect。
  2. 注册要将 Inspect 指标转换为的 Cobalt 指标
  3. 创建定义从 Inspect 到 Cobalt 的转换的采样器配置。查看现有配置文件

采样器配置

请考虑以下配置:

{
  "project_id": 3676913920,
  "poll_rate_sec": 3600,
  "metrics": [
    {
      "selector": "some/component:root/foo:bar",
      "metric_id": 3000,
      "metric_type": "Integer",
      "event_codes": [0]
    },
    {
      "selector": [
        "some/component:root:my_property",
        "some/other/component:root:my_property",
      ],
      "metric_id": 3000,
      "metric_type": "Integer",
      "event_codes": [1]
    }
  ]
}

采样器配置指定了顶级项目 ID,用于指定采样器正在代表哪个 Cobalt 客户端进行采样和转发。 它还指定了顶级 poll_rate_seconds,不过在 Sampler v1.1 中,此轮询速率将代表客户端迁移到每项指标的配置。

接下来,配置需要一个指标转换列表。在这些配置中,客户端提供一个或多个用于标识相关检查指标的选择器,以及代表客户端转发检查所需的 Cobalt 元数据。在每个采样周期,系统都会使用第一个匹配数据的选择器。

  1. metric_type 是所请求的指标转换类型。
    • 如果您的 Cobalt 指标属于用于跟踪数值汇总的 OCCURRENCE 类型,请使用 metric_type Occurrence
    • 如果您的 Cobalt 指标属于用于跟踪原始整数(例如 cpu_load、thermal_temp)的 INTEGER 类型,请使用 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 定义中声明维度的顺序一致。

柔和的过渡效果

配置中的 "selector" 字段可以接受选择器列表,而不是单个选择器。在这种情况下,系统将在每个采样周期使用第一个匹配任何数据的选择器。

此行为支持将指标从一个选择器过渡到另一个选择器。