1. Pregunta
Una plataforma recibe métricas de series temporales etiquetadas por servicio, inquilino (tenant) y región. La depuración a corto plazo necesita datos a nivel de segundos, mientras que los reportes a largo plazo necesitan tendencias por minutos u horas. La ingesta sigue creciendo. Conserve 15 días de muestras sin procesar y 2 años de agregados mientras controla los costos y evita que una alta cardinalidad abrume las consultas.
2. Restricciones y aclaraciones
- Confirme el intervalo de raspado (scrape), la cantidad y cardinalidad de etiquetas, los rangos de consulta, los SLO, el retraso de datos aceptable y los requisitos de eliminación.
- Separe las muestras sin procesar, los agregados de ventana fija, los resultados de reglas de registro (recording rules) y los archivos a largo plazo.
- No reemplace contadores, histogramas o cuantiles con un promedio simple; la agregación debe preservar la semántica de las métricas.
- Defina la ingesta al menos una vez (at-least-once), las muestras duplicadas, las marcas de tiempo fuera de orden y el aislamiento de inquilinos.
3. Arquitectura principal
La capa de ingesta aplica listas de permitidos de etiquetas, presupuestos de cardinalidad y compresión por lotes antes de escribir en el almacenamiento caliente particionado por tiempo. La capa de consulta enruta por rango y paso (step): los rangos cortos leen bloques sin procesar, los rangos largos leen bloques preagregados y los rangos mixtos se combinan con metadatos de resolución. Un trabajo de ventana reproducible lee datos sin procesar, escribe bloques de agregados versionados, los verifica y solo entonces elimina los bloques sin procesar caducados.
4. Flujo de referencia
ingest(sample):
series = canonicalize(metric_name, sorted_labels)
enforce_cardinality_budget(series)
append_to_time_partition(series, sample)
downsample(window):
raw = read_raw(window)
agg = aggregate_by_metric_semantics(raw, resolution=5m)
write_versioned_block(window, agg, source_watermark)
verify_counts_checksums_and_watermark(agg)
query(range, step):
blocks = choose_resolution(range, step)
return merge_with_gap_and_resolution_metadata(blocks)Para los contadores, preserve los incrementos y los reinicios; para los gauges, preserve mínimo/máximo/promedio; para los histogramas, fusione los buckets o las estructuras nativas de histogramas. Devuelva la resolución real, la cobertura y las brechas para que los usuarios no confundan los datos con downsampling con la precisión sin procesar.
5. Compensaciones de consistencia y costo
Las muestras tardías o la ejecución repetida pueden cambiar un agregado, por lo que los trabajos necesitan marcas de agua (watermarks), versiones y escrituras idempotentes, además de un período de corrección definido tras el cierre de la ventana. Las etiquetas de alta cardinalidad multiplican los costos de memoria, índices y consultas; limite las etiquetas arbitrarias de los usuarios con cuotas por inquilino o preagregación. Una mayor resolución, una retención más prolongada y una menor latencia de consulta tienen costos directos de almacenamiento y cómputo.
6. Verificación y observabilidad
- Valide los recuentos de muestras de entrada/salida, los incrementos de contadores, los totales de buckets, las sumas de verificación (checksums) y las marcas de agua para cada ventana.
- Reproduzca la misma ventana repetidamente y confirme la idempotencia y las versiones de resultados reemplazables.
- Monitoree la tasa de rechazo de ingesta, el recuento de series, las muestras de consulta, el retraso del downsampling, la tasa de brechas y el costo de almacenamiento.
- Compare los resultados sin procesar y los agregados para incidentes reales para garantizar que los picos, los reinicios y las anomalías no se diluyan al promediar.
7. Errores comunes
- Promediar cada métrica por tiempo y romper la semántica de contadores, cuantiles o histogramas.
- Usar cadenas de etiquetas no ordenadas como clave de serie, creando series duplicadas y una cardinalidad incorrecta.
- Eliminar bloques sin procesar antes de verificar el downsampling, imposibilitando la reproducción o la corrección de datos tardíos.
- Enrutar únicamente por rango de tiempo e ignorar el paso, las brechas y los metadatos de resolución.
8. Puntos de evaluación en entrevistas
Define un modelo de datos por niveles
El candidato separa los datos sin procesar, los preagregados y los archivados, e indica la resolución, la retención y el propósito de consulta de cada nivel.
Preserva la semántica de las métricas
El candidato trata los contadores, gauges, histogramas y cuantiles de forma diferente en lugar de aplicar una única función de promedio a todos los tipos.
Controla la cardinalidad y el costo
El candidato propone reglas de etiquetas, cuotas de inquilinos, rechazo en la ingesta y presupuestos de almacenamiento, explicando luego la relación entre consultas y costos.
Diseña una validación reproducible
El candidato utiliza marcas de agua, versiones, escrituras idempotentes y comprobaciones de reproducción mientras monitorea las brechas, el retraso y la fidelidad de las anomalías.