Ir al contenido

Consulta y retención de telemetry

Esta página es la referencia para leer telemetry de vuelta desde CORE-M y para los controles de gobierno de datos que la rodean: cuánto tiempo se conservan los datos, cómo se agregan en rollups, cómo se exportan y cómo se eliminan sin falsificar pruebas en blockchain. Para saber cómo se escriben los datos en primer lugar, consulta Enviar telemetry.

CORE-M admite consultar múltiples dispositivos y múltiples métricas sobre un rango de tiempo, con agregación, downsampling, bucketing consciente del timezone y paginación. Una consulta devuelve una serie por cada par dispositivo/métrica.

ParámetroDescripción
devicesUno o más device IDs.
metricsUno o más nombres de métrica.
start / endLímites del rango de tiempo (ISO 8601).
aggregationReducción por bucket, p. ej. avg, min, max, sum, count.
intervalAncho del bucket, p. ej. 5m, 1h, 1d.
timezoneTimezone de alineación de buckets (por defecto el timezone del tenant).
fillCómo se representan los buckets faltantes (fill policy).
POST /api/v1/telemetry (query via QueryTelemetrySeries)
{
"devices": ["D1", "D2"],
"metrics": ["temperature", "humidity"],
"start": "2026-05-01T00:00:00Z",
"end": "2026-05-08T00:00:00Z",
"aggregation": "avg",
"interval": "5m"
}

Cuando un interval de agregación es una unidad de calendario (un día, por ejemplo), los límites de bucket se alinean con los días locales del tenant, no con UTC. Una consulta diaria que abarca una transición de horario de verano sigue produciendo buckets de día local correctamente alineados, y la respuesta lleva metadata de timezone para que el cliente pueda interpretarlos.

Una consulta que devolvería más puntos en crudo que el max_query_points del tenant se rechaza en lugar de servirse parcialmente.

CondiciónResultado
Resultado estimado dentro de max_query_pointsLa consulta se ejecuta
Resultado estimado excede max_query_pointsRESOURCE_EXHAUSTED; la respuesta sugiere un interval más grueso que satisfaría el límite

CORE-M mantiene rollups con downsampling en resoluciones fijas para que los dashboards y las consultas de rango largo nunca escaneen telemetry en crudo.

ResoluciónUso
1mVistas de rango corto y alto detalle
5mVistas de rango medio
1hVistas de varios días a varias semanas
1dVistas de varios meses
  • Los rollups se calculan como agregados continuos de TimescaleDB y se indexan en Aerospike (namespace telemetry, set rollups).
  • Un scheduler refresca los agregados a medida que llega nueva telemetry y actualiza la métrica corem_telemetry_rollup_lag_seconds.
  • El planner de consultas selecciona el rollup apropiado automáticamente. Por ejemplo, una petición horaria de 90 días se resuelve contra el rollup 1h, y la metadata de la respuesta reporta source="rollup_1h".

La retención está guiada por políticas y se aplica por selector. Una política nunca elimina registros de prueba en blockchain necesarios para verificar datos ya anclados.

CampoSignificado
policy_idIdentificador de la política
tenant_idTenant propietario
selectorA qué apunta la política — dispositivo, grupo/perfil, métrica o tag
raw_retention_daysCuánto tiempo se conserva la telemetry en crudo
rollup_retention_daysCuánto tiempo se conservan los rollups
proof_retentionRetención de los registros de prueba (preservada de forma independiente de los datos en crudo)
delete_behaviorQué hace la limpieza al expirar: redact, delete o archive
legal_holdSi está activo, suspende toda eliminación para el selector
created_at / updated_atTimestamps de audit
EscenarioResultado
Telemetry en crudo más allá de raw_retention_days, el punto es finalLas filas en crudo de TimescaleDB pueden eliminarse; la fila de prueba y la metadata de prueba portable permanecen; el registro de proof lifecycle permanece o se compacta a un resumen final
Selector bajo legal holdNo se elimina ningún dato raw, rollup, prueba, alarma ni audit; la limpieza reporta un conteo skipped_legal_hold
Política actualizada (p. ej. 90 → 365 días)La limpieza futura usa el nuevo valor; el evento de audit retention.policy.updated registra los valores antiguo y nuevo

legal_hold en un selector congela la eliminación por completo. Mientras un dispositivo, grupo o tenant esté bajo hold, la limpieza de retención omite toda su telemetry en crudo, rollups, pruebas, alarmas y datos de audit, y reporta el conteo omitido en las métricas de limpieza. Levantar el hold reanuda la limpieza normal guiada por políticas.

Los exports son jobs asíncronos que cubren telemetry, rollups, alarmas, audit logs y bundles de prueba. Los registros de job viven en el namespace telemetry de Aerospike, set export_jobs, con clave {tenant_id}:{job_id}.

PasoComportamiento
CreateRequiere el permiso exports; el job se crea con status="queued" y se publica el evento export.requested.{tenant}.{job}
BuildUn worker escribe un manifiesto de archivos de telemetry más referencias de bundle de prueba (cuando include_proofs=true)
Size guardSi el tamaño estimado excede max_export_size_bytes, el job se rechaza con RESOURCE_EXHAUSTED, devolviendo estimated_size_bytes y max_export_size_bytes
DownloadEl job completado expone una URL de descarga firmada y con expiración (p. ej. 24 h); tras la expiración, un usuario autorizado puede regenerar una

Eliminación de cumplimiento con preservación de pruebas

Sección titulada «Eliminación de cumplimiento con preservación de pruebas»

La eliminación operacional y la preservación de pruebas inmutables están deliberadamente separadas. Eliminar telemetry por cumplimiento no debe falsificar ni remover los hechos de prueba en blockchain.

EscenarioResultado
Redactar un campo personal (p. ej. operator_name) de un dispositivoLas APIs de consulta dejan de devolver el campo; los registros de prueba conservan los hashes y la metadata necesarios para probar la existencia histórica; la verificación revela que el payload en crudo ya no se retiene
Solicitar la eliminación de una fila de prueba finalRechazado. El sistema rechaza la eliminación directa de pruebas, sugiere flujos de redacción/export y escribe el evento de audit proof.delete.denied

Consulta Seguridad y cumplimiento para los flujos de derechos del titular de los datos y el rastro de audit en torno a la eliminación.

Las quotas se aplican por recurso y rechazan con RESOURCE_EXHAUSTED cuando se exceden. Son distintas del rate limit de peticiones por tenant del gateway (consulta Visión general de la API).

QuotaSe aplica sobre
Tasa de ingestaPuntos por minuto aceptados en la ingesta
AlmacenamientoTotal de bytes almacenados por tenant
Rango de consultamax_query_points por consulta
Tamaño de exportmax_export_size_bytes por job de export
Conexiones de dashboardConexiones WebSocket concurrentes
Peticiones de APITasa de peticiones por tenant
Backlog de anchoringLotes (batch) pendientes por tenant
EscenarioResultado
Quota de ingesta excedidaLa petición de telemetry se rechaza con RESOURCE_EXHAUSTED; no se crea ningún registro de proof lifecycle; corem_quota_rejections_total{quota="ingest_points"} se incrementa
Almacenamiento al 85% de la quotaSe publica el evento quota.warning.{tenant}.storage; los admins del tenant ven una advertencia en settings

CORE-M rastrea el uso por tenant para poder razonar sobre quotas y facturación.

ContadorGranularidadDescripción
Puntos ingeridospor díaPuntos de datos aceptados por tenant por día
Almacenamientopor díaBytes almacenados por tenant por día