- Qué operación inició la solicitud.
- Dónde pasó el tiempo la solicitud.
- Qué operación hija devolvió un error.
- Qué logs, incidencias, acciones y métricas tienen el mismo ID de traza.
- Qué servicio, entorno y release enviaron cada span.
Campos de trazas y spans
Un span raíz inicia una traza y no tiene padre. Los spans hijos tienen el mismo
ID de traza, sus propios ID de span y un ID de padre. Solo estos ID conectan
las operaciones. Las marcas de tiempo por sí solas no lo hacen. LogBrew cuenta
un span como span de error solo cuando su
status es error.
Una solicitud entre servicios
- El servicio web inicia un span de servidor para la ruta de pago.
- Un cliente de pagos crea un span hijo para su solicitud HTTP saliente.
- El servicio de pagos continúa la traza con su propio span de servidor.
- Un helper de base de datos registra un span hijo para la escritura.
- La app envía un log de error seguro dentro del span de pago activo.
Propaga el contexto
Los SDK de LogBrew usan el contexto de traza W3C. Por ejemplo, el SDK de Node.js continúa una cabeceratraceparent entrante válida con un nuevo span
de solicitud. Si la cabecera falta o no es válida, inicia una nueva raíz. Los
logs, incidencias, acciones y métricas capturados dentro del alcance de esa
solicitud llevan la traza de la solicitud.
La instrumentación saliente escribe una cabecera traceparent solo en los
destinos que configures, como tracePropagationTargets. Envía el contexto de
la traza solo a servicios de confianza e instrumentados. Un ID de traza
correlaciona operaciones. No sirve como autenticación.
Un mensaje de cola también puede llevar el contexto de la traza. En Node.js,
llama a createLogBrewQueueTraceHeaders() en la operación del productor para
añadir una cabecera traceparent al mensaje. En el consumidor, pasa esa
cabecera a queueOperationWithLogBrewSpan() como traceparent. Consulta
Trazado de colas en JavaScript.
Las integraciones de solicitudes entrantes y salientes de Node.js y Python no
registran en los spans los cuerpos de solicitud o respuesta, las query strings,
cabeceras arbitrarias ni el valor sin procesar de traceparent. Nombra los
spans según las plantillas de ruta, no según URL concretas. Para conocer las
integraciones de tu runtime, lee Integración del SDK.
Spans de captura
LogBrew guarda cada nuevo log, incidencia, acción y métrica con un ID de traza. Si una señal no hace referencia a un span del mismo envío, LogBrew añade un span de captura para ella:
Después, el
span_id de la señal identifica su span de captura. Si la señal
no tenía contexto de traza, LogBrew crea un nuevo ID de traza para ella. Esa
traza muestra que LogBrew guardó la señal. No muestra la ruta de una
solicitud. No interpretes los spans de captura de una traza como una sola
solicitud.
Los spans de captura cuentan en span_count y error_span_count. Por eso,
un log de error puede hacer que --status error seleccione una traza en la
que no falló ninguna operación de la aplicación. Lee la operation de cada
span de error antes de sacar una conclusión.
Lee una traza
Usa un ID de traza exacto de un log, una incidencia o una lista de trazas:--status error selecciona las trazas con al menos un span de error.
--status ok selecciona las trazas sin ningún span de error.
--min-duration-ms 500 selecciona las trazas que duraron 500 milisegundos o
más.
Lee primero la duración del span raíz. Después examina los spans hijos más
largos y los estados de error. Ten a la vista el proyecto, el servicio, el
entorno y el release, para que una traza de staging no se convierta en
evidencia sobre producción.
Una traza muestra una ejecución, no una referencia de rendimiento. Antes de
proponer un cambio de rendimiento, compara varias trazas con la tendencia de
la métrica relacionada.
Resumen de la traza
GET /api/telemetry/traces/{trace_id}/summary devuelve un resumen sin los
atributos de los spans:
Si
root_span.parent_span_id tiene un valor, el span raíz real no está en la
traza. No interpretes root_span como el inicio de la solicitud.
Explica una traza
logbrew explain trace devuelve una investigación de la traza:
analysis.causality es evidence_only. El análisis no demuestra una causa
raíz. La CLI solicita la versión 3 de la respuesta, en la que cada incidencia,
acción y métrica relacionada también tiene su span_id exacto.
Para examinar un span con su padre, sus hijos y los límites de servicio,
ejecuta:
topology.parent_chain_status te indica si la cadena de padres está completa:
Contexto de traza ausente
No todos los eventos tienen una traza de su solicitud. Lee el estado de la traza:not_linked no es un error. Una traza available también puede mostrar que
el evento no tenía contexto de solicitud. Si el span de captura del evento no
tiene parent_span_id, no había ningún span activo cuando la app capturó el
evento. El trabajo en segundo plano fuera del alcance de una solicitud suele
dar este resultado. Para encontrar una relación que falta:
- Lee el proyecto, el servicio, el entorno, el release y la hora del evento.
- Comprueba que el trabajo se ejecutó dentro de una solicitud u operación instrumentada.
- Comprueba que las integraciones de cliente y servidor propagan el contexto a través de ese límite.
- Después de corregir la instrumentación, captura un evento nuevo y léelo.
Planifica el trazado de un proyecto
Empieza con una solicitud o tarea importante, como el pago. Instrumenta un límite cada vez:- Crea un span para la solicitud entrante o la operación en segundo plano.
- Añade spans hijos para las llamadas salientes importantes.
- Continúa el contexto de traza W3C a través de los límites entre servicios de confianza.
- Envía un log seguro dentro del span activo.
- Lee ese log, abre su ID de traza y comprueba la raíz, los hijos, el servicio, el entorno, el release, el estado y la duración.
logbrew traces --project "<project_id>" --pagination cursor --json. El
objeto naming_quality cuenta las trazas de esa página con un nombre de raíz
genérico (generic_name_traces) o una ruta sin coincidencia
(unmatched_route_traces). Si los nombres necesitan atención,
naming_quality.next_action.code es improve_trace_naming.