Mettre à niveau le SDK Datadog Browser vers v7
Guide de migration systématique de v6 à v7. 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 v6 | Remplacement v7 |
|---|---|
datadoghq-browser-agent.com/us1/v6/datadog-rum.js |
datadoghq-browser-agent.com/us1/v7/datadog-rum.js |
datadoghq-browser-agent.com/us1/v6/datadog-logs.js |
datadoghq-browser-agent.com/us1/v7/datadog-logs.js |
datadoghq-browser-agent.com/us1/v6/datadog-rum-slim.js |
datadoghq-browser-agent.com/us1/v7/datadog-rum-slim.js |
Remplacez us1 par votre site : eu1, us3, us5, ap1, ap2. Pour US1-FED, le motif est plat : datadog-rum-v7.js (aucun préfixe de site).
Recherche : grep -r "datadoghq-browser-agent.com.*v6" --include="*.html" --include="*.js" --include="*.ts" --include="*.tsx"
Configuration npm — mettez à jour les dépendances package.json :
"@datadog/browser-rum": "^7.0.0"
"@datadog/browser-logs": "^7.0.0"
"@datadog/browser-rum-slim": "^7.0.0"
Ensuite, exécutez votre gestionnaire de paquets (npm install, yarn install, etc.) et reconstruisez.
Mettez également à jour les intégrations de framework vers v7 : @datadog/browser-rum-react, @datadog/browser-rum-angular, @datadog/browser-rum-vue, @datadog/browser-rum-nextjs.
Recherche : grep -r "@datadog/browser-" package.json
Étape 2 : Ajouter crossorigin="anonymous" (CDN uniquement)
Les bundles CDN v7 utilisent des imports dynamiques ESM. Chaque balise <script> chargeant le SDK doit avoir crossorigin="anonymous" :
<script src="https://www.datadoghq-browser-agent.com/us1/v7/datadog-rum.js" crossorigin="anonymous"></script>
Pour les éléments script créés dynamiquement :
const script = document.createElement('script')
script.crossOrigin = 'anonymous' // Doit être défini AVANT de définir src
script.src = 'https://www.datadoghq-browser-agent.com/us1/v7/datadog-rum.js'
Recherche : grep -rn "datadoghq-browser-agent" --include="*.html" --include="*.js" --include="*.ts"
Vérifiez chaque résultat pour l'attribut crossorigin (HTML) ou la propriété .crossOrigin (JS).
Étape 3 : Supprimer les options dépréciées
Recherchez les appels d'init pour ces options et appliquez les remplacements :
Supprimées du noyau (affecte RUM et Logs)
| Option | Action |
|---|---|
betaEncodeCookieOptions |
Supprimer. L'encodage des cookies est toujours activé. |
allowFallbackToLocalStorage |
Remplacer par sessionPersistence: ['cookie', 'local-storage'] |
Supprimées de RUM
| Option | Action |
|---|---|
trackBfcacheViews |
Supprimer. Les vues BFCache sont toujours suivies. |
trackEarlyRequests |
Supprimer. Les requêtes précoces sont toujours collectées. |
betaTrackActionsInShadowDom |
Supprimer. Le suivi des actions Shadow DOM est toujours activé. |
Supprimées de Logs
| Option | Action |
|---|---|
usePciIntake |
Supprimer. L'intake standard est maintenant conforme à la PCI. Mettez à jour la CSP si vous aviez des domaines spécifiques à la PCI en liste blanche. |
Recherche : grep -rn 'betaEncodeCookieOptions|allowFallbackToLocalStorage|trackBfcacheViews|trackEarlyRequests|betaTrackActionsInShadowDom|usePciIntake' --include="*.js" --include="*.ts" --include="*.tsx" --include="*.html"
Étape 4 : Mettre à jour les API modifiées
4a. forwardErrorsToLogs + forwardConsoleLogs (Logs)
Celles-ci sont maintenant indépendantes. En v6, forwardErrorsToLogs: true transmettait silencieusement console.error(). En v7, cela contrôle uniquement les erreurs non gérées.
Si vous utilisez forwardErrorsToLogs: true, ajoutez "error" à votre tableau forwardConsoleLogs pour préserver le comportement v6 :
DD_LOGS.init({
forwardErrorsToLogs: true,
forwardConsoleLogs: ['error', 'warn'], // ajoutez explicitement 'error'
})
Recherche : grep -rn "forwardErrorsToLogs" --include="*.js" --include="*.ts" --include="*.tsx" --include="*.html"
4b. startDurationVital / stopDurationVital (RUM)
L'objet DurationVitalReference est remplacé par une chaîne vitalKey :
// v6
const ref = DD_RUM.startDurationVital('checkout')
DD_RUM.stopDurationVital(ref)
// v7
DD_RUM.startDurationVital('checkout', { vitalKey: 'checkout-key' })
DD_RUM.stopDurationVital('checkout', { vitalKey: 'checkout-key' })
Recherche : grep -rn 'startDurationVital|stopDurationVital|DurationVitalReference' --include="*.js" --include="*.ts" --include="*.tsx"
4c. Plugin API : strategy supprimée (RUM)
Le champ strategy a été supprimé de l'API plugin. Si vous utilisez @datadog/browser-rum-react ou d'autres intégrations de plugin, mettez-les à jour vers v7.
Recherche : grep -rn "strategy" --include="*.js" --include="*.ts" --include="*.tsx" (recherchez les définitions de plugin)
Étape 5 : Examiner les changements comportementaux (aucun code requis, mais peut nécessiter une attention)
Ce sont des changements de défaut — aucune rupture de code, mais le comportement diffère de v6 :
| Changement | Impact | Action si nécessaire |
|---|---|---|
defaultPrivacyLevel par défaut à "mask-user-input" (était "mask") |
Masquage moins restrictif par défaut. Seule l'entrée utilisateur est masquée. | Définissez defaultPrivacyLevel: "mask" pour préserver le masquage complet. |
enablePrivacyForActionName par défaut à true |
Les noms d'action clic suivent le niveau de confidentialité. Peuvent être masqués. | Utilisez le plugin build Datadog ou définissez enablePrivacyForActionName: false. |
propagateTraceBaggage par défaut à true |
CORS : les API cross-origin doivent autoriser l'en-tête baggage. |
Ajoutez "baggage" à Access-Control-Allow-Headers, ou définissez propagateTraceBaggage: false. |
| Échantillonnage déterministe | L'échantillonnage est calculé à partir de l'ID de session + taux, non stocké. Cohérent entre les pages. | Vérifiez si vous utilisez des taux d'échantillonnage différents sur différentes pages. |
| FID supprimé | First Input Delay n'est plus collecté. | Utilisez INP (Interaction to Next Paint) à la place. |
Type de chargement de vue session_renewal |
Les vues renouvelées de session ont @view.loading_type:session_renewal au lieu de route_change. |
Mettez à jour les tableaux de bord/moniteurs filtrant sur @view.loading_type. |
initiatorType de ressource document modifiée |
"initial_document" devient "navigation". La durée peut différer légèrement. |
Mettez à jour tout code inspectant performanceEntry de ressource document. |
| Les noms d'action peuvent changer | La stratégie de traversée d'arbre est toujours utilisée (y compris Shadow DOM). | Vérifiez si vous avez des moniteurs basés sur des noms d'action spécifiques. |
| Erreurs de requête annulées supprimées (Logs) | Fetch/XHR abortés ne génèrent plus de logs d'erreur réseau. | Aucune action nécessaire — réduit le bruit. |
| Logs requiert toujours le stockage de session | Sans cookies ou localStorage, le SDK Logs ne démarrera pas. | Utilisez sessionPersistence: 'memory' pour les environnements worker. |
| Session Replay : Change Records | Nouveau format de sérialisation. Plus précis, moins de bande passante. | Mettez à jour si vous dépendez du format de segment brut. |
Les noms de chunk asynchrone sont préfixés avec datadog |
Par exemple, datadogRecorder-<hash>-datadog-rum.js, datadogProfiler-<hash>-datadog-rum.js. |
Mettez à jour les règles script-src de CSP ou les configurations de cache (autoriser datadog*-datadog-rum.js). |
Étape 6 : Mettre à jour l'infrastructure
- CSP :
- Ajoutez
crossoriginà script-src. - Mettez à jour les noms de chunk comme
datadog*-datadog-rum.js(par exempledatadogRecorder,datadogProfiler). - Si vous avez supprimé
usePciIntake, mettez à jour la CSP pour le domaine d'intake standard.
- Ajoutez
- Cookies : Ajoutez
_dd_s_v2aux listes blanches de cookies. Le SDK migre automatiquement depuis_dd_sau premier chargement. Un retour à v6 démarre de nouvelles sessions. - CORS (si vous utilisez
allowedTracingUrls) : Ajoutez"baggage"àAccess-Control-Allow-Headerssur les origines tracées — ou définissezpropagateTraceBaggage: false. - Support navigateur : Chrome 80+, Firefox 78+, Safari 14+ minimum (ES2020). ~0,048% moins de couverture.
Liste de vérification de vérification
Après la mise à niveau, confirmez :
- [ ] SDK se charge sans erreurs de console
- [ ]
crossorigin="anonymous"sur toutes les balises script CDN - [ ] Aucune référence aux options supprimées dans la configuration init
- [ ] Les enregistrements Session Replay fonctionnent (si utilisés)
- [ ] Le traçage distribué fonctionne (pas d'erreurs CORS à partir de l'en-tête baggage)
- [ ] Aucun cookie
_dd_srestant après le premier chargement de page (devrait être_dd_s_v2) - [ ] Les noms d'action acceptables selon les nouveaux paramètres de confidentialité par défaut