Associer RUM à vos traces

RUM et traces

L’intégration d’APM avec la fonctionnalité Real User Monitoring vous permet de lier les requêtes de vos applications Web et mobiles aux traces backend correspondantes. Avec cette association, vous pouvez visualiser toutes vos données frontend et backend sous un seul angle.

Grâce aux données frontend de la fonctionnalité RUM et aux données relatives au backend, à l’infrastructure et aux logs provenant de l’injection d’ID de trace, vous pouvez identifier la cause de vos problèmes, où qu’ils se trouvent dans votre pile. Ainsi, vous saisissez parfaitement l’expérience que vous offrez à vos utilisateurs.

Utilisation

Prérequis

  • Vous devez avoir configuré le tracing APM pour les services ciblés par vos applications RUM.
  • Vos services utilisent un serveur HTTP.
  • Vos serveurs HTTP utilisent une bibliothèque prenant en charge le tracing distribué.
  • Vous disposez de ressources XMLHttpRequest (XHR) ou Fetch dans le RUM Explorer pour votre paramètre allowedTracingOrigins.
  • Vous disposez de traces correspondants aux requêtes vers allowedTracingOrigins.

Configurer RUM

  1. Configurez la surveillance Browser RUM.

  2. Initialisez le SDK RUM. Configurez le paramètre d’initialisation allowedTracingOrigins à l’aide de la liste des origines internes first party appelées par votre application Browser.

    import { datadogRum } from '@datadog/browser-rum'
    
    datadogRum.init({
        applicationId: '<DATADOG_APPLICATION_ID>',
        clientToken: '<DATADOG_CLIENT_TOKEN>',
        ...otherConfig,
        service: "my-web-application",
        allowedTracingOrigins: ["https://api.example.com", /https:\/\/.*\.my-api-domain\.com/]
    })
    

Pour associer RUM à vos traces, vous devez indiquer votre application Browser dans le champ service.

Remarque : allowedTracingOrigins accepte les chaînes JavaScript et les expressions régulières ; ces dernières doivent correspondre aux origines appelées par votre application Browser, qui sont définies comme suit : <schéma> "://" <hostname> [ ":" <port> ].

Le tracing de bout en bout est disponible pour les requêtes déclenchées après l'initialisation du SDK Browser. Le tracing de bout en bout du document HTML initial ainsi que des premières requêtes Browser n'est pas pris en charge.
  1. Configurez la surveillance Android RUM.

  2. Configurez l’intercepteur OkHttpClient à l’aide de la liste des origines internes first party appelées par votre application Android.

    val tracedHosts =  listOf("example.com", "example.eu")
    
    val okHttpClient = OkHttpClient.Builder()
        .addInterceptor(DatadogInterceptor(tracedHosts))
        .addNetworkInterceptor(TracingInterceptor(tracedHosts))
        .eventListenerFactory(DatadogEventListener.Factory())
       .build()
    

Remarque : par défaut, tous les sous-domaines des hosts répertoriés sont tracés. Par exemple, si vous ajoutez example.com, vous activez également le tracing de api.example.com et foo.example.com.

  1. Configurez la surveillance iOS RUM.

  2. Configurez le paramètre d’initialisation firstPartyHosts à l’aide de la liste des origines internes first party appelées par votre application iOS.

    Datadog.initialize(
    appContext: .init(),
    configuration: Datadog.Configuration
        .builderUsing(rumApplicationID: "<rum_app_id>", clientToken: "<client_token>", environment: "<env_name>")
        .set(firstPartyHosts: ["example.com", "api.yourdomain.com"])
        .build()
    )
    
  3. Initialisez URLSession tel qu’indiqué à la rubrique Configuration :

    let session =  URLSession(
        configuration: ...,
        delegate: DDURLSessionDelegate(),
        delegateQueue: ...
    )
    

Remarque : par défaut, tous les sous-domaines des hosts répertoriés sont tracés. Par exemple, si vous ajoutez example.com, vous activez également le tracing de api.example.com et foo.example.com.

Bibliothèques compatibles

Les bibliothèques de tracing Datadog suivantes sont prises en charge :

BibliothèqueVersion minimale
Python0.22.0
Go1.10.0
Java0.24.1
Ruby0.20.0
JavaScript0.10.0
PHP0.33.0
.NET1.18.2

Comment les ressources RUM sont-elles associées aux traces ?

Datadog utilise un protocole de tracing distribué et configure les en-têtes HTTP suivants :

x-datadog-trace-id
Généré à partir du SDK RUM. Permet à Datadog de lier la trace à la ressource RUM.
x-datadog-parent-id
Généré à partir du SDK RUM. Permet à Datadog de générer la première span depuis la trace.
x-datadog-origin: rum
Permet de s’assurer que les traces générées à partir de la fonctionnalité RUM ne rentrent pas en compte dans le calcul de vos spans indexées APM.
x-datadog-sampling-priority: 1
Permet de s’assurer que l’Agent conserve la trace.

Remarque : ces en-têtes HTTP ne sont pas ajoutés à la liste blanche du mécanisme CORS. Vous devez donc configurer Access-Control-Allow-Headers sur le serveur traitant les requêtes que le SDK surveille. Le serveur doit également accepter les requêtes préliminaires (requêtes OPTIONS), qui sont transmises par le SDK avant chaque requête.

Cela a-t-il une incidence sur les quotas de l’APM ?

L’en-tête x-datadog-origin: rum indique au backend APM que les traces sont générées depuis la fonctionnalité RUM. Les traces générées n’ont par conséquent aucun impact sur le calcul de vos spans indexées.

Combien de temps les traces sont-elles conservées ?

Ces traces sont conservées aussi longtemps comme vos traces APM standard.