SQL para observabilidad y análisis de eventos
La observabilidad SQL significa responder preguntas operativas y de productos a partir de eventos estructurados con consultas visibles y revisables. En lugar de buscar un mensaje ilimitado y esperar que todos los productores lo formateen de la misma manera, usted define campos útiles como route, status_code, latency_ms, account_id, release y outcome, y luego agrega esas columnas directamente.
Esto no hace que los registros de texto, las métricas o los seguimientos queden obsoletos. Proporciona a los equipos de software una capa de análisis relacional para preguntas que abarcan la confiabilidad, el comportamiento del producto, el costo y el impacto en el cliente.
La versión corta
Un flujo de trabajo útil de observabilidad del SQL consta de cinco partes:
- Registre un evento terminal para una operación significativa.
- Mantenga un pequeño conjunto estable de dimensiones, medidas e identificadores de correlación.
- Almacene el evento en una tabla escrita con una marca de tiempo confiable.
- Utilice SQL de solo lectura para filtrar, agrupar, unir y comparar las filas.
- Convierta el resultado en un gráfico, panel, alerta o informe programado vinculado a una decisión.
Telemetry sigue esa forma: envía eventos JSON, inspecciona la tabla inferida, ejecuta DataFusion SQL y publica el resultado. El Biblioteca de recetas SQL hace que la ruta completa sea inspeccionable con contratos escritos, entradas sintéticas, salidas esperadas, gráficos y casos extremos.
Por qué SQL es útil para la observabilidad
Las preguntas operativas a menudo se vuelven relacionales incluso cuando comienzan como registros:
- ¿Qué rutas se volvieron más lentas después del lanzamiento
2026.07.28? - ¿Qué cuentas se vieron afectadas por un incidente de pago?
- ¿Los reintentos recuperaron la entrega del webhook o solo aumentaron la carga?
- ¿Qué característica de IA tiene el mayor costo por resultado aceptado?
- ¿Qué trabajos en cola fallan repetidamente después del tiempo de espera de visibilidad?
Estas preguntas necesitan agrupación, agregación condicional, uniones, identidad estable y ventanas de tiempo explícitas. SQL hace visibles esas opciones. Un revisor puede ver si una tarifa utiliza filas o solicitudes únicas, si se incluye el depósito parcial más nuevo y si una combinación interna eliminó silenciosamente datos no coincidentes.
SQL también es portátil como habilidad. Los nombres de las funciones y la sintaxis de la marca de tiempo varían entre los motores, pero SELECT, WHERE, GROUP BY, CASE, las uniones y las funciones de ventana forman un modelo mental duradero.
Modelar operaciones como eventos, no como mensajes.
Comience con una operación significativa, como una solicitud API, un intento de pago, un trabajo en segundo plano, una entrega de webhook o una respuesta de modelo. Emite un evento terminal cuando se conoce su resultado.
{
"event_name": "api_request_completed",
"request_id": "req_01J...",
"account_id": "acct_42",
"route": "/v1/orders/:id",
"method": "GET",
"status_code": 503,
"latency_ms": 842,
"release": "2026.07.28",
"region": "us-west",
"outcome": "error",
"error_type": "upstream_timeout"
}
Este es un evento amplio: mantiene el contexto necesario para explicar la operación sin requerir una cadena de análisis de mensajes frágiles. Utilice categorías delimitadas para campos como route, error_type y outcome. Mantenga secretos, cuerpos de solicitud sin procesar, mensajes de texto y contenido privado del cliente fuera de forma predeterminada.
Telemetry agrega timestamp_utc durante la ingestión. Si también envía una marca de tiempo comercial, asígnele un nombre según su significado (como scheduled_at, completed_at o invoice_period_start) en lugar de crear un segundo timestamp ambiguo.
Dimensiones, medidas e identidad.
Un contrato práctico separa tres tipos de campos:
| amable | Ejemplos | Lo que permite |
|---|---|---|
| Dimensiones | route, release, region, plan, outcome |
Filtros, agrupaciones y comparaciones. |
| Medidas | latency_ms, bytes, input_tokens, cost_usd |
Sumas, promedios, percentiles y presupuestos |
| Identidad | request_id, account_id, job_id, trace_id |
Deduplicación, uniones y cronogramas |
Elija la identidad deliberadamente. Contar filas es correcto sólo cuando una fila es igual a la unidad que desea contar. Los reintentos de telemetría, flujos de trabajo de varios pasos y instantáneas periódicas suelen generar varias filas para una operación lógica.
Para obtener detalles sobre el diseño del esquema, utilice Diseñar un esquema de evento, ID de correlación y Campos de alta cardinalidad.
Cinco patrones SQL cubren muchas investigaciones
1. Filtrar a la ventana de decisión.
SELECT *
FROM api_request_completed
WHERE timestamp_utc >= now() - INTERVAL '24 hours'
AND route = '/v1/orders/:id'
ORDER BY timestamp_utc DESC
LIMIT 200;
Comience con filas sin rematar. Confirme las unidades, la nulidad, la normalización de rutas y los valores de resultados antes de crear un agregado.
2. Calcular una tasa con un denominador explícito
SELECT
route,
COUNT(*) AS requests,
SUM(CASE WHEN status_code >= 500 THEN 1 ELSE 0 END) AS errors,
ROUND(
100.0 * SUM(CASE WHEN status_code >= 500 THEN 1 ELSE 0 END)
/ NULLIF(COUNT(*), 0),
2
) AS error_rate_pct
FROM api_request_completed
WHERE timestamp_utc >= now() - INTERVAL '24 hours'
GROUP BY route
ORDER BY error_rate_pct DESC, requests DESC;
El denominador son todas las filas de solicitud coincidentes. Si los productores emiten reintentos como filas nuevas, decida si el panel debe mostrar intentos o solicitudes lógicas únicas.
3. Comparar un límite de liberación
SELECT
release,
COUNT(*) AS requests,
approx_percentile_cont(latency_ms, 0.95) AS p95_latency_ms,
ROUND(
100.0 * SUM(CASE WHEN status_code >= 500 THEN 1 ELSE 0 END)
/ NULLIF(COUNT(*), 0),
2
) AS error_rate_pct
FROM api_request_completed
WHERE timestamp_utc >= now() - INTERVAL '7 days'
GROUP BY release
ORDER BY release;
Las comparaciones de lanzamientos necesitan participación de tráfico y tiempo de implementación. Un canario de bajo volumen no debe interpretarse como un despliegue completo de la producción.
4. Une el impacto técnico a una cuenta estable
SELECT
r.account_id,
a.plan,
COUNT(*) AS failed_requests
FROM api_request_completed r
LEFT JOIN account_dimension a
ON r.account_id = a.account_id
WHERE r.timestamp_utc >= now() - INTERVAL '2 hours'
AND r.status_code >= 500
GROUP BY r.account_id, a.plan
ORDER BY failed_requests DESC;
La unión izquierda preserva las cuentas afectadas incluso si el enriquecimiento se retrasa. Mantenga explícita la frescura de la dimensión y la regla de una fila por clave.
5. Reconstruir una línea de tiempo correlacionada
Utilice request_id, job_id u otro identificador de flujo de trabajo para unir o unir eventos en orden temporal. Una línea de tiempo suele ser más útil durante un incidente que un solo agregado porque muestra el intento, el reintento, el resultado de la dependencia y el estado terminal.
El Laboratorio conectado SQL proporciona seis tablas sintéticas y lecciones guiadas para uniones, embudos, costos de IA, confiabilidad y recuperación. Se ejecuta completamente en el navegador.
Relaciona la visualización con la pregunta.
El resultado de la consulta debe determinar lo visual, y no al revés.
| Pregunta | Forma del resultado | Visualización útil |
|---|---|---|
| ¿Una señal cambia con el tiempo? | período de tiempo más una o más medidas | línea o área apilada |
| ¿Qué categoría contribuye más? | categoría más medida | barra horizontal ordenada |
| ¿Cuál es el estado actual exacto? | pequeño conjunto de filas y columnas | tabla |
| ¿Cómo se distribuye un valor? | cubo más recuento o resumen percentil | histograma o línea percentil |
| ¿Dónde se detienen los usuarios? | hito ordenado más recuento o tasa | embudo |
Mantenga siempre la tabla de resultados disponible junto a un gráfico. La información sobre herramientas y los ejes pueden ocultar redondeos, nulos y denominadores pequeños que son obvios en las filas subyacentes.
Cada receta pública de Telemetry incluye una tabla de resultados rastreable, una vista previa visual, accesorios JSON y CSV, y un gráfico estático. Comience con Tasa de error API por ruta, consultas lentas a bases de datos por huella digital o Costo de LLM por característica.
Donde SQL debería complementar otra telemetría
Utilice métricas para señales agregadas continuas y económicas y alertas con etiquetas estrictamente controladas. Utilice seguimientos para comprender la ruta crítica distribuida de una solicitud. Utilice registros de texto cuando el mensaje de diagnóstico exacto sea importante o la forma no se conozca de antemano. Utilice tablas de eventos estructuradas cuando el equipo necesite dimensiones flexibles, contexto empresarial, uniones o cálculos auditables.
Los sistemas pueden compartir ID de correlación. Un resultado SQL puede identificar la versión afectada y la cohorte de cuentas; un rastro puede entonces explicar una solicitud lenta representativa; un registro de texto puede mostrar el error de dependencia exacto.
No copie cada tramo de seguimiento o línea de registro en un segundo almacén sin una decisión que respalde. La recopilación duplicada genera costos y definiciones contradictorias.
Una secuencia de adopción segura
Elija un flujo de trabajo incierto y escriba la decisión que los datos deberían respaldar. Defina su evento terminal, instrumentelo en modo sombra, compare los recuentos de eventos con una fuente existente e inspeccione las filas sin procesar. Sólo entonces publique el agregado.
Para una transición gradual de la búsqueda de mensajes, siga Migrar de registros ad hoc a eventos estructurados y SQL. Si el equipo actual utiliza LogQL, KQL o SPL, el guía de migración de lenguaje de consulta asigna patrones comunes sin pretender que los idiomas sean intercambiables.
Revisar la lista de verificación
Antes de que una consulta entre en funcionamiento:
- confirme el grano de la fila y el denominador;
- documentar el comportamiento nulo y de llegada tardía;
- limitar el rango de tiempo;
- validar unidades y marcar la hora de la zona horaria;
- conservar filas no coincidentes cuando el enriquecimiento pueda retrasarse;
- decidir cómo cuentan los reintentos y los duplicados;
- excluir o anotar períodos de tiempo incompletos;
- probar el umbral con datos históricos o sintéticos;
- mantenga un enlace del gráfico al SQL y al contrato del evento.
El Metodología de prueba SQL explica lo que demuestran las comprobaciones automatizadas del Telemetry y lo que aún requiere criterio empresarial.