Mettre à jour le SDK Datadog Browser à la v6
Guide de migration systématique de v5 à v6. Suivez les étapes 1-6 dans l'ordre. Chaque étape inclut un motif de recherche pour trouver le code affecté.
Étape 1 : Mettre à jour la version du SDK
Configuration CDN — mettez à jour les URLs src du script :
| Motif v5 | Remplacement v6 |
|---|---|
datadoghq-browser-agent.com/us1/v5/datadog-rum.js |
datadoghq-browser-agent.com/us1/v6/datadog-rum.js |
datadoghq-browser-agent.com/us1/v5/datadog-logs.js |
datadoghq-browser-agent.com/us1/v6/datadog-logs.js |
datadoghq-browser-agent.com/us1/v5/datadog-rum-slim.js |
datadoghq-browser-agent.com/us1/v6/datadog-rum-slim.js |
Remplacez us1 par votre site : eu1, us3, us5, ap1, ap2. Pour US1-FED, le motif est plat sans préfixe de site : datadog-rum-v6.js, datadog-logs-v6.js, datadog-rum-slim-v6.js.
Recherche : grep -r "datadoghq-browser-agent.com.*v5" --include="*.html" --include="*.js" --include="*.ts" --include="*.tsx" --include="*.jsx"
Configuration npm — mettez à jour les dépendances package.json :
"@datadog/browser-rum": "^6.0.0"
"@datadog/browser-logs": "^6.0.0"
"@datadog/browser-rum-slim": "^6.0.0"
Ensuite, exécutez votre gestionnaire de paquets (npm install, yarn install, etc.) et rebuildez.
Mettez aussi à jour les intégrations framework vers v6 si utilisées : @datadog/browser-rum-react.
Recherche : grep -r "@datadog/browser-" --include="package.json" .
Étape 2 : Supprimer les options dépréciées
Supprimées du Core (affecte RUM et Logs)
| Option | Action |
|---|---|
useCrossSiteSessionCookie |
Remplacez par usePartitionedCrossSiteSessionCookie. |
Supprimées de Logs
| Option | Action |
|---|---|
sendLogsAfterSessionExpiration |
Supprimez. En v6, les logs sont toujours envoyés après l'expiration de la session (sans ID de session). L'option n'est plus nécessaire. |
Recherche : grep -rn 'useCrossSiteSessionCookie\|sendLogsAfterSessionExpiration' --include="*.js" --include="*.ts" --include="*.tsx" --include="*.jsx" --include="*.html" --include="*.vue" --include="*.svelte"
Étape 3 : Mettre à jour les valeurs par défaut modifiées
v6 change plusieurs comportements par défaut. Vérifiez chacun et ajustez si nécessaire :
3a. trackUserInteractions, trackResources, et trackLongTasks valent true par défaut
En v5, ils valaient false par défaut. En v6, ils sont activés dès le départ. Cela n'impacte pas la facturation.
Pour préserver le comportement v5, désactivez explicitement uniquement les options qui n'étaient pas déjà activées en v5. Si une option valait déjà true en v5, laissez-la inchangée :
DD_RUM.init({
trackUserInteractions: false, // seulement si pas déjà true en v5
trackResources: false, // seulement si pas déjà true en v5
trackLongTasks: false, // seulement si pas déjà true en v5
})
3b. traceContextInjection vaut "sampled" par défaut
En v5, le contexte de trace était injecté pour toutes les requêtes. En v6, il n'est injecté que pour les traces échantillonnées. Si votre traceSampleRate est 100 % (la valeur par défaut), cela n'a aucun impact.
Pour préserver le comportement v5 :
DD_RUM.init({
traceContextInjection: 'all',
})
3c. En-tête tracestate ajouté avec le propagateur tracecontext
Le propagateur tracecontext envoie maintenant un en-tête tracestate supplémentaire. Votre serveur doit l'accepter. Ajoutez-le à vos Access-Control-Allow-Headers existants — ne remplacez pas la liste complète :
# Ajoutez tracestate aux côtés de vos en-têtes existants
Access-Control-Allow-Headers: <existing-headers>, traceparent, tracestate
3d. Le paramètre site est fortement typé
L'option site a un type TypeScript plus strict. Si vous passez une valeur non-standard, vous obtenez une erreur de type. Utilisez proxy pour les URLs d'intake non-standard à la place.
Recherche : grep -rn 'trackUserInteractions\|trackResources\|trackLongTasks\|traceContextInjection\|tracestate\|allowedTracingUrls\|propagatorTypes' --include="*.js" --include="*.ts" --include="*.tsx" --include="*.jsx" --include="*.html" --include="*.vue" --include="*.svelte"
Cherchez aussi tous les appels d'init RUM pour attraper les projets qui omettent ces options et s'appuyaient sur les valeurs par défaut v5 false : grep -rn 'DD_RUM\.init\|datadogRum\.init' --include="*.js" --include="*.ts" --include="*.tsx" --include="*.jsx" --include="*.html" --include="*.vue" --include="*.svelte". Pour chaque appel init, vérifiez si trackUserInteractions, trackResources, et trackLongTasks sont explicitement définis — s'ils sont omis, ils valent maintenant true en v6 par défaut.
Étape 4 : Gérer le chargement lazy de Session Replay
Session Replay est maintenant chargé en lazy-loading via des imports dynamiques. Le module se charge uniquement pour les sessions échantillonnées pour la replay, réduisant la taille du bundle pour les autres.
Configuration npm
Assurez-vous que votre bundler supporte les imports dynamiques (code splitting). La plupart des bundlers modernes le font :
- Webpack: Documentation code splitting
- Esbuild: Option splitting
- Rollup: Documentation code splitting
- Parcel: Documentation code splitting
Configuration CDN
Aucune modification de code nécessaire. Le SDK charge dynamiquement un chunk supplémentaire lors de l'enregistrement (ex. datadogRecorder-<hash>-datadog-rum.js). Mettez à jour les règles CSP script-src si nécessaire pour autoriser le chunk.
Étape 5 : Passer en revue les changements comportementaux (aucun code requis, mais peut nécessiter attention)
| Changement | Impact | Action si nécessaire |
|---|---|---|
| Support IE11 supprimé | SDK compilé avec cible ES2018. Polyfills supprimés. | Continuez à utiliser v5 si le support IE11 est requis. |
| Long Animation Frames remplacent Long Tasks | Sur les navigateurs supportés, Long Animation Frames sont collectés au lieu de Long Tasks. Le type d'événement reste long_task. |
Vérifiez si vous inspectez les détails des événements long task. |
| Expiration du cookie de session étendue à 1 an | Supporte le suivi des utilisateurs anonymes. | Définissez trackAnonymousUser: false pour refuser. |
Objets RegExp et Event sanitisés |
Ceux-ci ne sont plus sérialisés tels quels dans le contexte/attributs. | Utilisez des représentations en chaîne si vous aviez passé des objets RegExp ou Event. |
ChunkLoadError de Webpack ne plus collecté |
Réduit le bruit des échecs de chargement de chunks du SDK. | Aucune action requise. |
Étape 6 : Mettre à jour l'infrastructure
- Support du navigateur : Baseline ES2018. IE11 n'est plus supporté.
- CORS : Ajoutez
tracestateà vosAccess-Control-Allow-Headersexistants si vous utilisez le propagateurtracecontext(ne remplacez pas la liste complète) :Access-Control-Allow-Headers: <existing-headers>, traceparent, tracestate - CSP : Autorisez le chunk Session Replay chargé dynamiquement (ex.
datadogRecorder-*-datadog-rum.js) dans les règlesscript-src. - Configuration du bundler : Assurez-vous que votre bundler supporte les imports dynamiques pour le lazy-loading de Session Replay.
Erreurs courantes
| Erreur | Ce qui se passe mal | Correction |
|---|---|---|
Désactiver défensivement trackUserInteractions, trackResources, trackLongTasks |
Désactive les fonctionnalités dont le projet a besoin — celles-ci valent maintenant true par défaut, ce qui est généralement souhaité |
Définissez ces options à false seulement si le projet ne les voulait explicitement pas ; laissez-les indéfinis pour accepter les nouvelles valeurs par défaut |
Manque tracestate dans Access-Control-Allow-Headers |
Le propagateur tracecontext envoie maintenant un en-tête tracestate — les requêtes cross-origin sont bloquées par CORS |
Ajoutez tracestate aux côtés de traceparent dans les Access-Control-Allow-Headers de votre serveur |
Non-mise à jour du CSP script-src pour le chunk Session Replay chargé dynamiquement |
L'enregistrement échoue silencieusement sur les pages avec CSP restrictif — le chunk dynamique est bloqué | Autorisez datadogRecorder-*-datadog-rum.js dans script-src |
Liste de vérification de vérification
Après la mise à jour, confirmez :
- [ ] Le SDK se charge sans erreurs console
- [ ] Aucune référence aux options supprimées (
useCrossSiteSessionCookie,sendLogsAfterSessionExpiration) - [ ] Les enregistrements Session Replay fonctionnent (si utilisés)
- [ ] La traçabilité distribuée fonctionne (pas d'erreurs CORS de l'en-tête
tracestate) - [ ] La taille du bundle diminuée (polyfills IE11 supprimés)
- [ ] Les long tasks sont toujours collectés (maintenant en tant que Long Animation Frames sur les navigateurs supportés)
- [ ] Aucune erreur TypeScript du typage du paramètre
site