Conceptos de configuración de métricas

Las configuraciones de métricas definen las campañas de telemetría que ejecuta el servicio de Telemetría. Una configuración de métricas es una instancia de un mensaje de búfer de protocolo (protobuf) MetricsConfig. Los parámetros de configuración de métricas especifican cómo recopilar, procesar y generar informes de los datos. Los OEM pueden activar la configuración de métricas a través de la API del servicio de Telemetría. Se pueden ejecutar varias configuraciones de forma simultánea.

Antes de comenzar, familiarízate con la arquitectura de SDV, que es una arquitectura orientada a servicios en la que los servicios publican datos como mensajes de protobuf. Estos mensajes se comunican a través de la pila de comunicación del SDV mediante RPC o publicación-suscripción.

Términos clave

Una configuración de métricas coordina la recopilación de datos definiendo fuentes de datos, reglas de procesamiento y mecanismos de informes. Uno de los principales beneficios de este procesamiento perimetral es la reducción del uso de datos móviles. Al procesar datos de alta frecuencia en el dispositivo y subir solo agregados o estadísticas, reduces significativamente la cantidad de datos que se transmiten a la nube.

La definición de una configuración de métricas comienza con una lista de las fuentes de datos que se usarán en la configuración. Son servicios que ponen datos a disposición a través de la pila de comunicación del SDV. Cuando activas una configuración, el servicio de Telemetría se conecta a estas fuentes para transmitir o recuperar datos según sea necesario.

El núcleo de una configuración es su capacidad de procesamiento de datos perimetrales, que se administra a través de agregadores de datos con estado. Cada agregador usa un compilador de mensajes que mantiene una instancia de mensaje proto con estado. Cada campo de este mensaje se completa evaluando una expresión, que define qué datos se deben leer de otras fuentes de datos o agregadores y qué operaciones matemáticas, lógicas o de agregación se deben aplicar a los datos. Puedes aplicar agregaciones adicionales al resultado de una expresión.

Los activadores son fundamentales para controlar este proceso. Se pueden activar periódicamente, en respuesta a datos nuevos o cuando se cumplen condiciones basadas en datos. Los activadores determinan cuándo los agregadores evalúan su compilador de mensajes, cuándo se generan los informes de métricas y pueden influir en el ciclo de vida de la configuración, por ejemplo, iniciando o deteniendo la recopilación de datos.

Los informes de métricas son el resultado final. Cada informe incluye la carga útil de datos definida por un compilador de mensajes, junto con metadatos como marcas de tiempo y el ID del informe. Puedes generar informes en momentos específicos del ciclo de vida de la configuración, como cuando se activa o desactiva una configuración. Los informes generados se almacenan en la memoria, y se notifica al cliente para que los recupere a través del canal de notificación del estado del informe.

En la siguiente figura, se proporciona un ejemplo conceptual de cómo pueden interactuar los componentes dentro de una configuración de métricas:

Diagrama conceptual que ilustra las fuentes de datos, el procesamiento y la generación de informes dentro de una configuración de métricas

Figura 1: Fuentes de datos, procesamiento y generación de informes dentro de una configuración de métricas.

Componentes de la configuración de métricas

Puedes usar las configuraciones de métricas para definir tareas de recopilación de datos y canalizaciones de procesamiento complejas en el dispositivo. En esta sección, se detallan los componentes principales que se usan para definir una campaña de métricas. Los componentes se presentan en el orden en que los datos fluyen por el sistema, desde la entrada hasta la salida. Puedes definir estos componentes en cualquier orden. El procesamiento de datos con agregadores y la administración del ciclo de vida son opcionales.

  • Cómo definir fuentes de datos
  • Procesa datos con agregadores
  • Controla el flujo de ejecución con activadores
  • Generar informes de métricas
  • Administra el ciclo de vida de la recopilación de datos

Cómo definir fuentes de datos

La base de cualquier campaña de métricas son los datos. En una configuración de métricas, el mecanismo de recepción de datos se abstrae y solo debes especificar el nombre con el que se puede identificar una fuente de datos y el modo de conexión (suscripción o a pedido). Las fuentes de datos pueden ser cualquier servicio que ponga datos a disposición a través de la pila de comunicaciones del SDV o que se registre en el Registro de publicadores configurables, lo que permite la recopilación de datos de apps en las que el middleware del SDV no está disponible. Cada fuente de datos debe tener un nombre único dentro de la configuración para que otros componentes de configuración de métricas, como los activadores o los agregadores, puedan hacer referencia a ella. Puedes configurar cómo se conecta, con qué frecuencia recibe datos y proporcionar un objeto de configuración específico del servicio.

Configuración de fuentes de datos

El servicio de telemetría puede conectarse a una fuente de datos de dos maneras:

  • Getter: Este método recupera datos a pedido cada vez que una expresión definida en la configuración de métricas necesita leer datos de esta fuente. Esto es útil para las fuentes de datos que no proporcionan un flujo continuo o cuando necesitas instantáneas de datos poco frecuentes.
  • Suscripción: Este es el método predeterminado. Establece un flujo de datos continuo desde la fuente. Este tipo de conexión es obligatorio si planeas usar un activador de datos que se active cuando lleguen mensajes nuevos de esta fuente.

Cuando usas una suscripción, puedes configurar lo siguiente:

  • Submuestreo: Para evitar la transferencia de datos con demasiada frecuencia, puedes definir un intervalo de tiempo mínimo entre mensajes consecutivos de la misma fuente. Si la fuente publica datos más rápido que este intervalo, el servicio de Telemetría limita las notificaciones, y los activadores de datos solo se activan para los mensajes recibidos después de la limitación. Esto genera una submuestra de los datos de manera eficaz.
  • Recuperación inicial de mensajes: Puedes configurar el servicio para que recupere el mensaje más reciente de la fuente cuando establezca la suscripción. Como resultado, la fuente de datos se propaga con un valor de inmediato si hay uno disponible, en lugar de esperar a que se publique el primer mensaje nuevo. Esto es útil en activadores o agregadores condicionales que requieren un estado inicial o cuando la fuente de datos publica con poca frecuencia.

Independientemente del tipo, los mensajes se almacenan en caché de forma interna. Si varias expresiones o agregadores requieren datos de la misma fuente durante un solo ciclo de evaluación, el sistema recupera los datos solo una vez, ya sea desde la caché si llegó un mensaje nuevo a través de una suscripción o con una sola llamada a pedido.

Procesa datos con agregadores

Si bien las fuentes de datos proporcionan datos sin procesar, los agregadores realizan un procesamiento de datos con estado y en el borde. Consumen datos de fuentes de datos o de otros agregadores, los transforman y hacen que el resultado esté disponible para que los informes de métricas lo lean o para que otros agregadores lo procesen aún más. Esto permite compilar canalizaciones de procesamiento de varias etapas, por ejemplo, calcular estadísticas de velocidad en un agregador y usar esas estadísticas en otro componente que detecte patrones de comportamiento de conducción.

Los agregadores se activan para realizar sus cálculos con uno o más activadores. Cada vez que se activa uno de sus disparadores, el agregador evalúa sus reglas y actualiza su estado interno.

Puedes configurar un agregador para que restablezca su estado después de que otro componente haya leído su valor, lo que resulta útil para calcular estadísticas en períodos que no se superponen.

Un compilador de mensajes define la estructura y la lógica de un agregador. Un compilador de mensajes especifica cómo construir una instancia de un mensaje .proto describiendo cómo generar datos para cada uno de sus campos. Para cada campo, una expresión define cómo leer datos de las fuentes de datos y los agregadores, y cómo aplicar operaciones a estos datos. Además, puedes aplicar una agregación, que es una operación de cálculo o recopilación que se aplica a los resultados de la expresión a lo largo del tiempo.

Se admiten los siguientes tipos de agregación:

  • Matemática: Calcula estadísticas (promedio, mínimo, máximo, suma, desviación estándar y delta) sobre los valores que devuelve una expresión en cada activador. Delta es la diferencia entre el valor numérico actual y el anterior que devuelve una expresión.
  • Lista: Recopila los valores que devuelve una expresión en una lista. Puedes limitar el tamaño de la lista para crear una ventana progresiva (búfer de anillo) de valores recientes.
  • Recuento: Caso especial en el que no se especifica ninguna expresión. Indica cuántas veces se evalúa el campo (es decir, cuántas veces se activa el agregador o el informe).
  • Paso directo: Usa el resultado de una expresión directamente, sin aplicar una agregación. Esto es útil en las configuraciones de informes para acceder a los valores finales de los agregadores.

En la siguiente figura, se muestra un diagrama conceptual que ilustra la evaluación del agregador:

Diagrama conceptual que ilustra la evaluación del agregador.

Figura 2: Evaluación del agregador.

Realizar cálculos o definir condiciones con expresiones

Las expresiones se usan en los compiladores de mensajes y los activadores condicionales para realizar cálculos o definir condiciones. Cuando se usa el Generador de configuración de métricas (MCG) para crear objetos JSON de configuración de métricas, las expresiones se escriben como cadenas legibles que usan la notación de puntos para acceder a los campos de la fuente de datos (por ejemplo, vehicle_speed.speed_value) y aplicar una amplia variedad de operaciones. MCG traduce estas cadenas en una estructura de árbol optimizada, análoga a un árbol de sintaxis abstracta (AST), para una evaluación eficiente integrado en el dispositivo en el mensaje MetricsConfig final de protobuf.

Operadores y funciones

Las expresiones admiten el siguiente conjunto de operadores y funciones:

  • Aritmética: Admite suma, resta (binaria y unaria), multiplicación, división, módulo y potencia.
  • Lógica: Admite AND, OR, NOT y XOR.
  • Relacional: Admite la verificación de igualdad y la comparación mayor que y menor que.
  • Lista: Comprueba si una lista contiene o no un valor específico.
  • Timestamp: Devuelve la marca de tiempo en el momento de la evaluación en microsegundos. El tipo de reloj puede ser un reloj en tiempo real, un tiempo monotónico desde el inicio (incluido el tiempo de suspensión) o un tiempo monotónico desde el inicio o la última reanudación.
  • Valor absoluto: Muestra el valor absoluto de un número.
  • Redondeo: Redondea al número entero más cercano (round), devuelve el número entero más grande menor o igual que un número (floor) o devuelve el número entero más pequeño mayor o igual que un número (ceil).

A continuación, se incluye un ejemplo de una expresión que lee dos fuentes de datos y se evalúa como true si la velocidad del vehículo supera los 100 km/h y no hay advertencias sobre la presión de los neumáticos:

(vehicle_speed.speed_value * 3.6) > 100 && tire_pressure.warning == false

Controla el flujo de ejecución con activadores

Los activadores son los orquestadores de una configuración de métricas, ya que controlan cuándo se procesan los datos y cuándo se generan los informes. Cada activador debe tener un nombre único.

Existen tres tipos de activadores:

  • Activadores de datos: Se activan cuando una fuente de datos con una conexión de suscripción publica un mensaje nuevo (después del submuestreo, si se configuró).
  • Activadores periódicos: Se activan en un intervalo de tiempo fijo.
  • Activadores condicionales: Se activan cuando se cumple una condición lógica especificada.

Activadores condicionales

Los activadores condicionales escuchan otros activadores (de datos, periódicos o condicionales) y, cuando se activa uno de ellos, evalúan una expresión. El activador condicional se activa solo si el resultado de la expresión cumple con una condición específica.

Puedes configurar un activador condicional para que se active según varios tipos de condiciones:

  • Valor: Cuando la expresión se evalúa como true (o un valor distinto de cero) o false (o cero).
  • Flanco de subida: Cuando una expresión booleana cambia de false a true o cuando aumenta un valor numérico.
  • Flanco de bajada: Cuando una expresión booleana cambia de true a false, o cuando un valor numérico disminuye.
  • On change: Cada vez que el resultado de la expresión es diferente de su valor anterior.
Cómo filtrar los cambios de estado ruidosos

En el caso de los activadores basados en bordes o en cambios, puedes filtrar los cambios de estado breves o ruidosos (fallas) si exiges que la condición permanezca en el estado nuevo durante un período mínimo antes de que se active el activador.

Por ejemplo, puedes configurar un activador para que se dispare solo si vehicle_speed > 100 se convierte en true y permanece como true durante al menos 5 segundos. Esto evita que el activador se dispare debido a un aumento momentáneo en la lectura de velocidad. También puedes exigir que todos los valores que se vean durante este período de suspensión sean exactamente iguales.

Generar informes de métricas

Después de procesar los datos, defines cómo y cuándo se empaquetan en informes.

Los informes se definen con configuraciones de informes de métricas, que usan compiladores de mensajes para definir la estructura y el contenido de su resultado. Cuando se activa uno de los activadores del informe, el compilador de mensajes evalúa sus asignaciones de campos para construir la carga útil de datos del informe.

Cada informe generado es una instancia de un mensaje MetricsReport de Protobuf, que encapsula el resultado del compilador de mensajes en un campo payload y agrega metadatos. El servicio de telemetría agrega automáticamente los siguientes metadatos a cada MetricsReport:

  • Es un identificador único universal (UUID) para el informe.
  • Es un número de informe secuencial que aumenta para cada informe generado por esta configuración del informe.
  • Marca de tiempo de la generación del informe
  • Es el motivo de la generación (por ejemplo, se activó por una regla o se generó al apagar el dispositivo).
  • El UUID y la versión de la configuración de métricas que generó el informe
  • Nombre de la configuración del informe de métricas

Control de generación de informes

Si bien los informes suelen generarse en respuesta a activadores, también puedes configurarlos para que se generen en momentos específicos del ciclo de vida de la configuración de las métricas:

  • Generar informe sobre la activación: Si está habilitada, el sistema genera un informe inicial inmediatamente cuando se activa la configuración de métricas.
  • Informe final: Si está habilitado, el sistema genera un informe final cuando se pausa o detiene la recopilación de datos, o cuando se cierra el servicio de telemetría. Este informe contiene los datos agregados hasta ese punto, lo que ayuda a garantizar que no se pierdan datos al final de una sesión.

Administra el ciclo de vida de la recopilación de datos

De forma predeterminada, una configuración de métricas comienza a recopilar y procesar datos en cuanto un cliente la activa y continúa hasta que el cliente la desactiva. Sin embargo, puedes controlar este ciclo de vida de forma más detallada definiendo activadores que inicien o detengan la recopilación de datos o la configuración de métricas:

  • Activador de inicio: Si se define, la recopilación de datos comienza solo cuando se activa este activador. Si un activador de detención pausó la recopilación, el activador de inicio la reanuda.
  • Detener el activador: Si se define, este activador pausa la recopilación de datos. Las agregaciones y la generación de informes se detienen hasta que se vuelva a activar el disparador de inicio.
  • Desactivar el activador: Este activador desactiva la configuración de métricas de la misma manera que lo haría una llamada deactivate_metrics_config del cliente.

Por ejemplo, puedes definir un activador condicional que se active cuando vehicle_state cambie a DRIVING como activador de inicio y otro que se active cuando vehicle_state cambie a PARKED como activador de detención. Esto ayuda a garantizar que los datos se recopilen solo mientras el vehículo está en movimiento.