Información general

El rastreo móvil nativo te ofrece un control preciso de las operaciones que se miden mediante la instrumentación manual de tramos (spans) en el código de tu aplicación para iOS o Android. Esta estrategia funciona independientemente de Datadog RUM, pero también se puede utilizar junto a Datadog RUM para obtener una visibilidad más profunda de las experiencias de usuario, el rendimiento a nivel de código y las interacciones de backend. También puedes utilizar OpenTelemetry para iOS o OpenTelemetry para Android para una instrumentación personalizada.

El SDK de rastreo de Datadog para iOS y Android te permite añadir tramos a tus aplicaciones móviles. Esta guía cubre el uso, los casos de uso clave y las frecuencias de muestreo, con o sin el uso del SDK de Datadog RUM.

Nota: Cuando se utiliza el SDK de rastreo de forma independiente (sin el SDK de RUM), los tramos raíz de solicitudes de red salientes no se crean automáticamente. Por lo tanto, es necesario iniciar y detener manualmente los tramos del lado del cliente para crear trazas APM distribuidas de frontend a backend.

Esta guía se centra en las aplicaciones nativas para iOS y Android. Para otras plataformas móviles, consulta la documentación siguiente:

Para obtener información general de la correlación de RUM con otros datos de telemetría, consulta Correlacionar RUM con otros datos de telemetría.

Casos prácticos

Envolver una traza distribuida de frontend a backend bajo un tramo nativo

Puedes crear trazas distribuidas que vayan desde tu frontend móvil a tus servicios backend. El SDK de RUM ofrece una forma automatizada de generar tramos de cliente para solicitudes de red salientes. El SDK de rastreo de Datadog proporciona una funcionalidad similar, pero también te permite envolver una o más trazas de frontend a backend bajo tramos creados manualmente.

Utiliza la propagación manual del contexto (consultar el paso 8) para inyectar cabeceras en solicitudes de red. Utiliza setActive() para vincular tramos secundarios a la (referencia de la API) del tramo principal.

Utiliza ayudantes de tramos principales OkHttp (consultar el paso 10 en la página vinculada) o OpenTelemetry addParentSpan para vincular tramos a través de subprocesos.

Nota: Envolver tramos de recursos RUM bajo un tramo nativo funciona automáticamente si el tramo principal está en el mismo subproceso que la llamada de red. De lo contrario, utiliza los ayudantes proporcionados para configurar el tramo principal manualmente.

Perfiles de rendimiento de aplicaciones nativas

Instrumentar varios tramos nativos y vincularlos (utilizando setActive en iOS o activateSpan en Android) te permite perfilar partes clave de tu aplicación. Esto te ayuda a:

  • Comprender cómo interactúan los distintos métodos y componentes
  • Acabar con los cuellos de botella en el rendimiento
  • Obtener información práctica sobre el comportamiento de las aplicaciones

A continuación se explica cómo instrumentar manualmente un tramo en tu aplicación móvil utilizando el SDK de rastreo:

let span = tracer.startSpan(operationName: "<span_name>")
// ... code to measure ...
span.finish()

Consulta más ejemplos de iOS.

The Datadog Tracer implements the OpenTelemetry standard, and Datadog recommends using it as an interface for tracing your application because it’s vendor-neutral, supports many languages and frameworks, and unifies traces, metrics, and logs under one standard. See instructions on setting up OpenTelemetry integration with the SDK.

Note: The OpenTelemetry specification library requires desugaring to be enabled for projects with a minSdk < 26. If you cannot enable desugaring in your project, you can still use the Trace product with the Datadog API instead.

Note: The Datadog API implementation helps you transition from OpenTracing to OpenTelemetry.

Estrategia OpenTelemetry (recomendado):

import io.opentelemetry.api.GlobalOpenTelemetry
import io.opentelemetry.api.trace.Tracer

val tracer: Tracer = GlobalOpenTelemetry.get().getTracer("<tracer_name>")
val span = tracer.spanBuilder("<span_name>").startSpan()

span.end()

Estrategia API Datadog:

import com.datadog.android.trace.GlobalDatadogTracer
import com.datadog.android.trace.api.tracer.DatadogTracer

val tracer: DatadogTracer = GlobalDatadogTracer.get()
val span = tracer.buildSpan("<span_name>").start()

span.finish()

Consulta más ejemplos de Android.

Muestreo

El muestreo en el rastreo móvil nativo controla qué tramos y trazas se ingieren en Datadog, lo que te ayuda a equilibrar la visibilidad con el volumen de datos. Cuando instrumentas manualmente los tramos en tu aplicación, los que se muestrean pasan por los filtros de retención de APM, lo que determina cuáles acaban mostrándose para su análisis en la interfaz de Datadog.

Funcionamiento del muestreo

El muestreo afecta a distintos tipos de tramos que creas en tu aplicación móvil:

Nota: El comportamiento de muestreo descrito a continuación se aplica a los SDK de iOS v2.9.0+ y a los SDK de Android v1.18.0+ . Para versiones anteriores, consulta la documentación respectiva del SDK para conocer el comportamiento de muestreo específico de la plataforma.

  • El muestreo local de tramos se aplica a los tramos instrumentados manualmente (como los tramos de perfiles de rendimiento). Está controlado por el parámetro Trace.sampleRate. Por ejemplo, si defines esta frecuencia en 50, el Trace SD produce tramos en el 50% de los casos y los envía todos a Datadog. La visibilidad de estos tramos en la interfaz de usuario depende de tus filtros de retención APM. Cada evento de tramo incluye el campo _dd.agent_psr (la frecuencia de muestreo) y metrics._sampling_priority_v1 (1 para muestreado, 0 para no muestreado).

  • El muestreo distribuido de trazas se aplica a las trazas que cruzan los límites del servicio, como las solicitudes de red a tu backend (relevante para el caso de uso “Envolver una traza distribuida de frontend a backend”). Esto se controla mediante el parámetro urlSessionTracking.firstPartyHostsTracing.sampleRate para iOS y el parámetroDatadogInterceptor.Builder.setTraceSampler para Android. Si se define en 50, solo la mitad de las solicitudes de backend tienen el indicador de muestreo establecido en true, como indica el contexto de rastreo. Todos los Datadog Agents respetan esta decisión, por lo que verás el 50% de las trazas distribuidas en la interfaz de usuario.

Las frecuencias de muestreo se aplican de forma independiente. La frecuencia más restrictiva determina qué datos son visibles en la interfaz de usuario para una sesión o traza determinada. Por ejemplo:

  • Si defines una frecuencia de muestreo de sesiones RUM baja (por ejemplo, 1%), solo el 1% de las sesiones de usuario se registran para RUM, pero aún puedes rastrear todas las solicitudes de red dentro de esas sesiones definiendo la frecuencia de muestreo del rastreo de red en 100%.
  • Si defines una frecuencia de muestreo de rastreo alta pero una frecuencia de muestreo RUM baja, es posible que veas trazas sin los datos RUM correspondientes.

Escenario de ejemplo Para muestrear el 1% de todas las sesiones de aplicaciones y rastrear todas las solicitudes de red API dentro de esas sesiones:

  • Configura RUM.sessionSampleRate = 1 (solo controla el muestreo de sesiones RUM).
  • Configura urlSessionTracking.firstPartyHostsTracing.sampleRate = 100 (controla la frecuencia de muestreo de solicitudes de red).

Las decisiones de muestreo se comunican a través de cabeceras de trazas, lo que garantiza que todos los servicios de una traza distribuida utilicen la misma opción de muestreo.

Parámetros de muestreo

Los siguientes parámetros de frecuencia de muestreo controlan diferentes aspectos de la recopilación de datos:

ParámetroDescripciónEjemplo
Trace.Configuration.sampleRateControla el porcentaje de tramos instrumentados manualmente, recopilados por el rastreador.50 = 50% de los tramos
urlSessionTracking.firstPartyHostsTracing.sampleRateControla el porcentaje de solicitudes de red rastreadas para hosts propios.100 = 100% de las solicitudes

Nota: RUM.sessionSampleRate controla el muestreo de sesiones RUM y no afecta a las frecuencias de muestreo de trazas. Cuando se utiliza el SDK de rastreo independientemente de RUM, el muestreo de trazas se controla únicamente mediante los parámetros indicados anteriormente.

ParámetroDescripciónEjemplo
OtelTracerProvider.Builder.setSampleRate()Estrategia OpenTelemetry (recomendado). Controla el porcentaje de tramos instrumentados manualmente, recopilados por el rastreador.50 = 50% de los tramos
DatadogTracerBuilder.withSampleRateEnfoque API Datadog. Controla el porcentaje de tramos instrumentados, recopilados manualmente recogidos por el rastreador.50 = 50% de los tramos
DatadogInterceptor.Builder.setTraceSamplerControla el porcentaje de solicitudes de red rastreadas para hosts propios.100 = 100% de las solicitudes

Nota: RUM.sessionSampleRate controla el muestreo de sesiones RUM y no afecta a las frecuencias de muestreo de trazas. Cuando se utiliza el SDK de rastreo independientemente de RUM, el muestreo de trazas se controla únicamente mediante los parámetros indicados anteriormente.

Referencias adicionales