A continuación se muestran algunos detalles técnicos sobre cómo funciona el rastreo distribuido de New Relic:
- Cómo funciona el muestreo de trazas
- Cómo estructuramos los datos de traza
- Cómo almacenamos los datos de traza
- Cómo se pasa el contexto de traza entre aplicaciones
Muestro de trazas
La forma en que se muestreen sus trazas dependerá de su configuración y de la herramienta de seguimiento de New Relic que esté utilizando. Por ejemplo, es posible que esté utilizando un servicio de telemetría de terceros (como OpenTelemetry) para implementar el muestreo de traza antes de que nos lleguen sus datos. O, si está utilizando Infinite Tracing, probablemente nos enviará todos sus datos de traza y confiará en nuestro muestreo.
Tenemos algunas estrategias de muestreo disponibles:
- muestreo al inicio (rastreo distribuido estándar)
- muestreo al tail-based
- Sin muestreo
Muestreo al inicio (rastreo distribuido estándar)
Con la excepción de nuestra característica Infinite Tracing , la mayoría de nuestras herramientas de rastreo utilizan un enfoque de muestreo al inicio. Esto aplica filtros a tramos individuales antes de que lleguen todos los tramos de una traza, lo que significa que las decisiones sobre si se aceptan tramos se toman al principio (el "cabezal") del proceso de filtrado. Utilizamos esta estrategia de muestreo para capturar una muestra representativa de la actividad y al mismo tiempo evitar problemas de almacenamiento y rendimiento.
Aquí hay algunos detalles sobre cómo se implementa muestreo al inicio en nuestras herramientas estándar de rastreo distribuido:
Tail-based sampling (Infinite Tracing)
Nuestra característica Infinite Tracing utiliza un enfoque de muestreo tail-based. muestreo al final" significa que las decisiones de retención de trazas se toman al final del procesamiento, después de que hayan llegado todos los tramos de una traza.
Con Infinite Tracing, puede enviarnos el 100% de sus datos de traza desde su aplicación o servicio de telemetría de terceros, e Infinite Tracing determinará qué datos de traza son más importantes. Y puede configurar el muestreo para garantizar que se conserve la traza importante para usted.
Importante
Debido a que Infinite Tracing puede recopilar y reenviar más datos de traza desde su aplicación o servicio de telemetría de terceros, es posible que, como resultado, sus costos de salida aumenten. Le recomendamos que esté atento a esos costos a medida que implementa Infinite Tracing para asegurarse de que esta solución sea adecuada para usted.
Sin muestreo
Algunas de nuestras herramientas no utilizan muestreo. Detalles de muestreo para estas herramientas:
Límites de trazas
Nuestros sistemas de procesamiento de datos están equipados con límites internos para proteger nuestra infraestructura de aumentos inesperados de datos. Esta capa protectora no solo mantiene la integridad de nuestra plataforma sino que también garantiza una experiencia confiable y consistente para todos nuestros clientes. Si bien estos límites se ajustan según sea necesario en función de diversas condiciones, se establecen con un enfoque prospectivo. A medida que nuestra base de usuarios y nuestra ingesta de datos crecen, ampliamos nuestra capacidad de infraestructura. Este compromiso garantiza que capturamos todos los datos de los clientes que nos envían y le ofrecemos una vista clara e ininterrumpida de sus datos de traza.
Cómo se estructuran los datos de traza
Comprender la estructura de un rastreo distribuido puede ayudarte a:
- Comprenda cómo se muestran las trazas en nuestra UI
- Ayudarte a consultar datos de traza.
Un rastreo distribuido tiene una estructura en forma de árbol, con un "tramo secundario" que se refiere a un "tramo principal". Este diagrama muestra algunas relaciones de tramo importantes en una traza:
Este diagrama muestra cómo se relacionan entre sí los tramos de un rastreo distribuido.
Este diagrama muestra varios conceptos importantes:
Trace root.
El primer servicio o proceso en una traza se denomina servicio o proceso
root
.
Process boundaries
. Un proceso representa la ejecución de un fragmento de código lógico. Ejemplos de un proceso incluyen un servicio backend o una función Lambda. Los tramos dentro de un proceso se clasifican como uno de los siguientes:
Entry span
: el primer tramo de un proceso.
Exit span
: un intervalo se considera un intervalo de salida si a) es el padre de un intervalo de entrada, ob) tiene el atributo
http.
odb.
y, por lo tanto, representa una llamada externa.In-process span
: un intervalo que representa una función o llamada a un método interno y que no es un intervalo de entrada o salida.
Client spans
. Un lapso de cliente representa una llamada a otra entidad o dependencia externa. Actualmente, existen dos tipos de clientes:
Datastore
. Si un tramo de cliente tiene un atributo con el prefijo
db.
(comodb.statement
), se clasifica como un tramo de almacenamiento de datos.External
. Si un tramo de cliente tiene un atributo con el prefijo
http.
(comohttp.url
) o tiene un tramo secundario en otro proceso, se clasifica como un tramo externo. Esta es una categoría general para cualquier llamada externa que no sea consulta de almacenamiento de datos. Si un intervalo externo contienehttp.url
onet.peer.name
, se indexa en la página de servicios externos .
Trace duration
. La duración total de una traza está determinada por el tiempo transcurrido desde el inicio del primer tramo hasta la finalización del último tramo.
Puede consultar datos de relaciones abarcadas con el explorador NerdGraph GraphiQL en api.newrelic.com/graphiql.
Cómo se almacenan los datos de traza
Comprender cómo almacenamos los datos de traza puede ayudarle a consultar sus datos de traza.
Guardamos los datos de la traza como:
Span
: Un tramo representa operaciones que forman parte de un rastreo distribuido. Las operaciones que puede representar un lapso incluyen interacción del lado del navegador, almacenamiento de datos consulta, llamadas a otros servicios, temporización a nivel de método y función Lambda. Un ejemplo: en un servicio HTTP, se crea un intervalo al inicio de una solicitud HTTP y se completa cuando el servidor HTTP devuelve una respuesta. El atributo Span contiene información importante sobre esa operación (como duración, datos del host, etc.), incluidos detalles de la relación de traza (como traceId, guid). Para obtener datos relacionados con el intervalo, consulte atributo span.Transaction
: Si una entidad en una traza es monitoreada por un agente, una solicitud a esa entidad genera un único eventoTransaction
. La transacción permite vincular los datos de la traza a otras características de New Relic. Para obtener datos relacionados con transacciones, consulte atributo de transacción.- Metadatos contextuales. Almacenamos metadatos que muestran cálculos sobre una traza y las relaciones entre sus tramos. Para consultar estos datos, utilice el explorador NerdGraph GraphiQL.
Cómo se pasa el contexto de traza entre aplicaciones
Admitimos el estándar W3C Trace Context, que facilita la trazabilidad de transacciones entre redes y servicios. Cuando habilita el rastreo distribuido, el agente New Relic agrega encabezados HTTP a las solicitudes salientes de un servicio. Los encabezados HTTP actúan como pasaportes en un viaje internacional: identifican la traza de su software y transportan información importante mientras viajan a través de diversas redes, procesos y sistemas de seguridad.
Los encabezados también contienen información que nos ayuda a vincular los tramos más adelante: metadatos como el ID de traza, el ID de tramo, el ID de cuenta de New Relic e información de muestreo. Consulte la siguiente tabla para obtener más detalles sobre el encabezado:
Artículo | Descripción |
---|---|
| Esta es su ID de cuenta de New Relic. Sin embargo, solo aquellos en su cuenta y los administradores de New Relic pueden asociar esta identificación con la información de su cuenta de alguna manera. |
| Este es el ID de la aplicación que genera el encabezado de rastreo. Al igual que |
| Con rastreo distribuido, cada segmento de trabajo en una traza está representado por un |
Tipo de padre | La fuente del encabezado de rastreo, como en móvil, browser, aplicación Ruby, etc. Este se convierte en el atributo |
Prioridad | Un valor de clasificación de prioridad generado aleatoriamente que ayuda a determinar qué datos se muestrean cuando se alcanzan los límites de muestreo. Este es un valor flotante establecido por el primer agente de New Relic que forma parte de la solicitud, por lo que todos los datos en la traza tendrán el mismo valor de prioridad. |
Muestreado | Un valor booleano que le indica al agente si se deben recopilar datos de traza para la solicitud. Esto también se agrega como un atributo en cualquier período y datos de transacción recopilados. |
Timestamp | Timestamp de Unix en milisegundos cuando se creó la carga útil. |
| El ID único (una cadena generada aleatoriamente) se utiliza para identificar una única solicitud cuando cruza los límites entre procesos e intraprocesos. Este ID permite la vinculación de tramos en un rastreo distribuido. Esto también se agrega como un atributo en los datos de intervalo y transacción. |
| El identificador único del evento de transacción. |
Clave de cuenta confiable | Esta es una clave que ayuda a identificar cualquier otra cuenta asociada con su cuenta. Entonces, si tiene varias subcuentas que cruza la traza, podemos confirmar que cualquier dato incluido en la traza proviene de una fuente confiable y nos dice qué usuario debe tener acceso a los datos. |
Versión y clave de datos | Esto identifica las versiones principales/menores, por lo que si un agente recibe un encabezado de rastreo de una versión con cambios importantes respecto a la actual, puede rechazar ese encabezado e informar el rechazo y el motivo. |
Esta información del encabezado se pasa a lo largo de cada tramo de una traza, a menos que el progreso sea detenido por algo como middleware o agente que no reconoce el formato del encabezado (consulte la Figura 1).
Figura 1
Para abordar el problema de la propagación de encabezados, admitimos la especificación W3C Trace Context que requiere dos encabezados estandarizados. Nuestros últimos agentes W3C New Relic envían y reciben estos dos encabezados requeridos y, de forma predeterminada, también envían y reciben el encabezado del agente New Relic anterior:
- W3C (
traceparent
): El encabezado principal que identifica la traza completa (ID de traza) y el servicio de llamada (ID de tramo). - W3C (
tracestate
): un encabezado obligatorio que contiene información específica del proveedor y rastrea dónde ha estado una traza. - New Relic (
newrelic
): el encabezado propietario original que aún se envía para mantener la compatibilidad con versiones anteriores del agente New Relic anterior.
Esta combinación de tres cabeceras permite que la traza se propague a través de servicios instrumentados con estos tipos de agente:
- Agente New Relic del W3C
- Agente New Relic que no pertenece al W3C
- Agente compatible con contexto de seguimiento W3C
Importante
Si sus solicitudes solo tocan al agente compatible con W3C Trace Context, puede optar por desactivar el encabezado New Relic. Consulte la documentación de configuración del agente para obtener detalles sobre cómo desactivar el encabezado newrelic
.
Los escenarios siguientes muestran varios tipos de propagación exitosa de encabezados.
Si aún no lo ha hecho, cree su cuenta New Relic gratuita a continuación para comenzar a monitorear sus datos hoy.