数据源

SDV 遥测支持多种类型的数据源。本页面概述了这些类型,并介绍了 Telemetry 针对每种数据源类型支持的功能。

您可以在 system/software_defined_vehicle/samples/telemetry 目录中找到数据源实现的示例代码。

指标配置中的数据源定义

指标配置用于定义要从中收集指标的一个或多个数据源。每个数据源都由其 source_identifier 标识。source_identifier 格式取决于数据源:

数据源 格式 说明 示例
SDV 服务 Protobuf 消息名称 完全限定的 protobuf 消息名称。如果服务有多个实例,请附加服务单元名称,并以竖线 (|) 分隔。 "com.sdv.google.example.TellTale|com-sdv-google-example-tell-tale-status-hibeam"
包含服务单元名称的完全限定实例名称 (FQIN) FQIN 和服务单元名称之间以竖线 (|) 分隔。 "vm-cdc:com.google.android.sdv.pubsub.SomeService/instance1|tire-pressure"
基于可配置的发布者注册表的发布者 发布商名称 用于在可配置的发布商注册表中注册发布商的确切 serviceName 任何字符串均有效。

对于每个数据源,您可以使用以下选项来对消息检索进行参数化。您可以在同一指标配置中多次定义同一数据源,但使用不同的选项。例如,您可以让部分边缘处理使用与其他部分边缘处理不同的子采样间隔。

选项 类型 说明
connection_type SUBSCRIPTIONON_DEMAND 如果设置为 SUBSCRIPTION,遥测服务会订阅相应数据源。如果设置为 ON_DEMAND,遥测服务仅在需要时从数据源中提取消息。
configuration google.protobuf.Any 如果设置,Telemetry 服务会在与数据源通信时将配置对象传递给数据源。
sub_sampling_interval google.protobuf.Duration 如果设置了此属性,系统会对消息进行子采样,以便遥测服务最多每隔 sub_sampling_interval 时长处理一次消息。
fetch_last_message bool 如果设置,即使消息是过去发布的,遥测服务也会在订阅数据源时检索最后发布的消息。

根据数据源的类型(请参阅以下部分),遥测服务仅支持部分参数。下表提供了相关概览。

选项 RPC SDV 服务 发布-订阅 (pub/sub) SDV 服务 基于可配置的发布商注册表的发布商
connection_type: SUBSCRIPTION 支持 1 支持 支持
connection_type: ON_DEMAND 支持 2 支持 支持 3
configuration 支持 不适用 支持
sub_sampling_interval 不支持 支持 4 不支持
fetch_last_message 不支持 支持 5 不支持
1 如果您实现 CreateSubscription 方法,则支持此功能。
2 如果您实现 GetLatestMessage 方法,则受支持。
3 如果 PublisherInfo.supportsGettrue,则支持。
4 支持 connection_type: SUBSCRIPTION,不适用于 connection_type: ON_DEMAND
5 支持 connection_type: SUBSCRIPTION,不适用于 connection_type: ON_DEMAND

SDV 服务(通过 SDV 通信堆栈)

遥测服务可以从其他 SDV 服务收集数据。支持 RPC 和发布/订阅 SDV 服务。由于遥测服务在构建时不知道它将订阅的服务列表,因此它依赖 Protobuf 反射来解码从 SDV 服务收到的消息。

SDV 服务默认不提供反射元数据。如需将 SDV 服务用作遥测数据源,您必须启用服务 VSIDL 目录的运行时配置生成。如需了解详情,请参阅面向服务软件包开发者的 VSIDL 提供程序指南

仅出于测试和评估目的,您可以在服务软件包定义中将 register_reflection_metadata 选项设置为 true。如需了解详情,请参阅服务包

RPC SDV 服务

遥测对 RPC SDV 服务的支持有限。如需了解详情,请参阅定义 RPC 服务。若要从 RPC SDV 服务收集数据,该服务必须公开以下一项或两项 RPC 方法:

  • CreateSubscription 会返回用户定义的一系列响应:

    rpc CreateSubscription(<configuration>) returns (stream <response>)
    
  • GetLatestMessage 会返回用户定义的回答:

    rpc GetLatestMessage(<configuration>) returns (<response>)
    

您可以使用配置实参来对数据源的行为进行参数化,例如,请求不同的发布频率或选择要订阅的实体(例如,要读取哪个轮胎的胎压)。

在指标配置中将 RPC SDV 服务定义为数据源时,您可以在数据源定义中指定一个 configuration 值,该值将用作相应 RPC 的实参。遥测服务会以透明方式处理配置对象,并传递您定义的任何内容。

这两种方法的配置实参类型可以是 google.protobuf.Any,也可以是用户定义的类型。如果您同时提供这两种方法,则参数类型必须相同。如果这些 RPC 方法不需要配置实参,请使用 google.protobuf.Empty

根据指标配置的数据源定义中指定的 connection_type,遥测服务会调用 CreateSubscription(对于 connection_type: SUBSCRIPTION)或 GetLatestMessage(对于 connection_type: ON_DEMAND)。

Pub/sub SDV 服务

遥测完全支持监控 SDV 服务公开的 VSIDL 中定义的发布/订阅渠道,无需任何额外配置。如需了解详情,请参阅向服务包添加发布商

除了订阅 pub/sub 频道之外,Telemetry 还支持按需检索发布到频道的最新消息。

可配置的发布者注册表

除了使用 SDV 通信堆栈从 SDV 服务收集数据之外,遥测还支持从在遥测服务的可配置发布方注册数据库中注册发布方的应用和服务收集数据。此功能在 IVI 上最为有用,因为 IVI 上没有 SDV 通信堆栈。

可配置的发布者注册表也可用于调试和原型设计,而无需编写 SDV 服务软件包。如需了解详情,请参阅可配置的发布者注册表