Mettre à jour le Datadog Browser SDK vers v5
Guide de migration systématique de v4 à v5. Suivez les étapes 1 à 7 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 du script src :
| Motif v4 | Remplacement v5 |
|---|---|
datadoghq-browser-agent.com/us1/v4/datadog-rum.js |
datadoghq-browser-agent.com/us1/v5/datadog-rum.js |
datadoghq-browser-agent.com/us1/v4/datadog-logs.js |
datadoghq-browser-agent.com/us1/v5/datadog-logs.js |
datadoghq-browser-agent.com/us1/v4/datadog-rum-slim.js |
datadoghq-browser-agent.com/us1/v5/datadog-rum-slim.js |
Remplacez us1 par votre site : eu1, us3, us5, ap1. Pour US1-FED, le motif est plat sans préfixe de site : datadog-rum-v5.js, datadog-logs-v5.js, datadog-rum-slim-v5.js. Remarque : AP2 n'est pas disponible pour v5 — mettez à jour vers v6 en premier si vous avez besoin d'AP2.
Recherche : grep -r "datadoghq-browser-agent.com.*v4" --include="*.html" --include="*.js" --include="*.ts" --include="*.tsx" --include="*.jsx"
Configuration npm — mettez à jour les dépendances package.json :
"@datadog/browser-rum": "^5.0.0"
"@datadog/browser-logs": "^5.0.0"
"@datadog/browser-rum-slim": "^5.0.0"
Puis exécutez votre gestionnaire de paquets (npm install, yarn install, etc.) et reconstructisez.
Mettez également à jour les intégrations framework vers v5 si utilisées : @datadog/browser-rum-react.
Recherche : grep -r "@datadog/browser-" --include="package.json" .
Étape 2 : Remplacer les paramètres init dépréciés
Ces noms de paramètres v4 n'existent plus dans v5. Remplacez-les :
| Paramètre déprécié (v4) | Remplacement (v5) |
|---|---|
proxyUrl |
proxy |
sampleRate |
sessionSampleRate |
allowedTracingOrigins |
allowedTracingUrls |
tracingSampleRate |
traceSampleRate |
trackInteractions |
trackUserInteractions |
premiumSampleRate |
sessionReplaySampleRate |
replaySampleRate |
sessionReplaySampleRate |
Recherche : grep -rn 'proxyUrl\|sampleRate\|allowedTracingOrigins\|tracingSampleRate\|trackInteractions\|premiumSampleRate\|replaySampleRate' --include="*.js" --include="*.ts" --include="*.tsx" --include="*.jsx" --include="*.html" --include="*.vue" --include="*.svelte"
Remarque : sampleRate correspond largement. Cherchez spécifiquement les objets de config init — sessionSampleRate est le nom v5 pour le taux d'échantillonnage de session.
Étape 3 : Remplacer les API publiques dépréciées
Ces noms de méthode API v4 n'existent plus dans v5 :
APIs RUM
| API dépréciée (v4) | Remplacement (v5) |
|---|---|
DD_RUM.removeUser |
DD_RUM.clearUser |
DD_RUM.addRumGlobalContext |
DD_RUM.setGlobalContextProperty |
DD_RUM.removeRumGlobalContext |
DD_RUM.removeGlobalContextProperty |
DD_RUM.getRumGlobalContext |
DD_RUM.getGlobalContext |
DD_RUM.setRumGlobalContext |
DD_RUM.setGlobalContext |
APIs Logs
| API dépréciée (v4) | Remplacement (v5) |
|---|---|
DD_LOGS.addLoggerGlobalContext |
DD_LOGS.setGlobalContextProperty |
DD_LOGS.removeLoggerGlobalContext |
DD_LOGS.removeGlobalContextProperty |
DD_LOGS.getLoggerGlobalContext |
DD_LOGS.getGlobalContext |
DD_LOGS.setLoggerGlobalContext |
DD_LOGS.setGlobalContext |
logger.addContext |
logger.setContextProperty |
logger.removeContext |
logger.removeContextProperty |
Recherche : grep -rn 'removeUser\|addRumGlobalContext\|removeRumGlobalContext\|getRumGlobalContext\|setRumGlobalContext\|addLoggerGlobalContext\|removeLoggerGlobalContext\|getLoggerGlobalContext\|setLoggerGlobalContext\|\.addContext\|\.removeContext' --include="*.js" --include="*.ts" --include="*.tsx" --include="*.jsx" --include="*.html" --include="*.vue" --include="*.svelte"
Étape 4 : Mettre à jour la configuration Session Replay
v5 change plusieurs valeurs par défaut et comportements Session Replay :
4a. defaultPrivacyLevel changé en "mask"
En v4, la valeur par défaut était mask-user-input. En v5, tout le contenu est masqué par défaut.
Pour préserver le comportement v4 (masquer uniquement l'entrée utilisateur) :
DD_RUM.init({
defaultPrivacyLevel: 'mask-user-input',
})
4b. L'enregistrement démarre automatiquement
Les sessions échantillonnées pour Session Replay sont maintenant automatiquement enregistrées. Vous n'avez plus besoin d'appeler startSessionReplayRecording().
Pour préserver le comportement v4 (démarrage manuel de l'enregistrement) :
DD_RUM.init({
startSessionReplayRecordingManually: true,
})
4c. sessionReplaySampleRate par défaut est maintenant 0
En v4, le taux d'échantillonnage de replay par défaut était 100. En v5, il est 0 — aucun replay sauf si vous le définissez explicitement.
Action : Assurez-vous que sessionReplaySampleRate est explicitement défini dans votre config init :
DD_RUM.init({
sessionReplaySampleRate: 100, // ou le taux que vous désirez
})
4d. trackResources et trackLongTasks doivent être explicites
Lors de l'utilisation de sessionReplaySampleRate (au lieu de la supprimée replaySampleRate ou premiumSampleRate), les ressources et les tâches longues ne sont plus collectées par défaut. Activez-les explicitement — sauf si la config v4 les avait déjà définis à false intentionnellement :
DD_RUM.init({
sessionReplaySampleRate: 100,
trackResources: true, // omettez si v4 avait explicitement trackResources: false
trackLongTasks: true, // omettez si v4 avait explicitement trackLongTasks: false
})
Recherche : grep -rn 'sessionReplaySampleRate\|startSessionReplayRecording\|defaultPrivacyLevel\|trackResources\|trackLongTasks' --include="*.js" --include="*.ts" --include="*.tsx" --include="*.jsx" --include="*.html" --include="*.vue" --include="*.svelte"
Recherchez aussi tous les appels d'init RUM pour détecter les projets qui omettent ces options et se fient aux valeurs par défaut v4 : grep -rn 'DD_RUM\.init\|datadogRum\.init' --include="*.js" --include="*.ts" --include="*.tsx" --include="*.jsx" --include="*.html" --include="*.vue" --include="*.svelte". Pour chaque appel d'init, vérifiez que sessionReplaySampleRate, defaultPrivacyLevel et trackResources/trackLongTasks sont explicitement définis.
Étape 5 : Mettre à jour les APIs et comportements modifiés
5a. beforeSend doit retourner un booléen
Les fonctions de rappel beforeSend doivent retourner true pour conserver l'événement ou false pour l'ignorer. Si aucune valeur n'est retournée, l'événement est conservé. Cela résout les erreurs de compilation TypeScript.
beforeSend: (event, context) => {
// retournez true pour conserver, false pour ignorer
return true
}
5b. Contexte d'action beforeSend : context.event → context.events
Avec les signaux de frustration, un événement d'action peut être associé à plusieurs événements DOM. context.event est remplacé par context.events (array).
// v4
beforeSend: (event, context) => {
if (event.type === 'action') {
const domEvent = context.event
}
}
// v5
beforeSend: (event, context) => {
if (event.type === 'action') {
const domEvents = context.events // array
}
}
5c. L'entrée de performance beforeSend est maintenant un objet PerformanceEntry
Le performanceEntry dans le contexte beforeSend est maintenant l'objet PerformanceEntry brut, pas une représentation JSON. Le type PerformanceEntryRepresentation a été supprimé.
5d. startTime supprimé du contexte beforeSend XHR
La propriété context.startTime a été supprimée du contexte beforeSend de ressource XHR. Utilisez à la place performanceEntry.
5e. view.in_foreground_periods supprimé de beforeSend
Cet attribut est maintenant calculé par le backend. Supprimez tout code beforeSend qui accède à view.in_foreground_periods.
5f. Signaux de frustration collectés automatiquement
Définissez trackUserInteractions: true pour collecter toutes les interactions utilisateur, y compris les signaux de frustration. Le paramètre trackFrustrations n'est plus nécessaire.
5g. Les noms de méthode de ressource sont en majuscules
Le champ method de ressource est maintenant toujours en majuscules (par ex., GET, POST). Mettez à jour tout dashboard ou moniteur filtrant sur resource.method.
5h. Champ session.plan supprimé
Le champ session.plan (lite/premium) est supprimé dans v5 et non émis sur aucun type d'événement. Remplacez tout filtre de dashboard ou moniteur sur session.plan par les nouveaux champs de replay :
@session.sampled_for_replay:true— la session a été échantillonnée pour Session Replay@session.has_replay:true— la session a un enregistrement de replay réel
Recherche : grep -rn 'beforeSend\|trackFrustrations\|PerformanceEntryRepresentation\|in_foreground_periods\|context\.event\b\|startTime' --include="*.js" --include="*.ts" --include="*.tsx" --include="*.jsx" --include="*.html" --include="*.vue" --include="*.svelte"
Étape 6 : Gérer les événements fiables
v5 ne se fie qu'aux événements générés par l'utilisateur (fiables). Les événements générés par les scripts sont ignorés par défaut.
Si vous dépendez d'événements programmatiques (par ex., dispatchEvent), ajoutez l'attribut __ddIsTrusted :
// JavaScript
const click = new Event('click')
click.__ddIsTrusted = true
document.dispatchEvent(click)
// TypeScript
const click = new Event('click') as Event & { __ddIsTrusted?: boolean }
click.__ddIsTrusted = true
document.dispatchEvent(click)
Ou autorisez tous les événements non fiables globalement :
DD_RUM.init({
allowUntrustedEvents: true,
})
Recherche : grep -rn 'dispatchEvent\|new Event\|new MouseEvent\|new KeyboardEvent\|\.click()' --include="*.js" --include="*.ts" --include="*.tsx" --include="*.jsx" --include="*.html" --include="*.vue" --include="*.svelte"
Étape 7 : Mettre à jour l'infrastructure
Les domaines connect-src CSP ont changé
v5 envoie les données vers de nouveaux domaines d'intake. Mettez à jour votre politique de sécurité du contenu :
| Site Datadog | Nouveau domaine connect-src |
|---|---|
| US1 | https://browser-intake-datadoghq.com |
| US3 | https://browser-intake-us3-datadoghq.com |
| US5 | https://browser-intake-us5-datadoghq.com |
| EU1 | https://browser-intake-datadoghq.eu |
| US1-FED | https://browser-intake-ddog-gov.com |
| US2-FED | https://browser-intake-us2-ddog-gov.com |
| AP1 | https://browser-intake-ap1-datadoghq.com |
En-têtes CORS pour le distributed tracing
v5 ajoute tracecontext comme propagateur par défaut. Si vous utilisez allowedTracingUrls, votre serveur doit accepter l'en-tête traceparent. Ajoutez-le à vos Access-Control-Allow-Headers existants — ne remplacez pas la liste complète :
# Ajoutez traceparent à côté de vos en-têtes existants
Access-Control-Allow-Headers: <existing-headers>, traceparent
Logs : error.origin supprimé
Mettez à jour les dashboards/moniteurs utilisant error.origin pour utiliser origin à la place.
Logs : préfixe d'erreur console supprimé
Le préfixe "console error:" est supprimé des messages de journal. Mettez à jour les requêtes utilisant ce préfixe pour utiliser @origin:console à la place.
Logs : logger principal découplé
Les erreurs runtime, les logs de réseau, les logs de rapport et les logs de console n'héritent plus du contexte, du niveau ou du gestionnaire du logger principal. Utilisez plutôt le contexte global et les paramètres d'init dédiés.
Recherchez la configuration du logger principal qui aurait pu dépendre de cet héritage : grep -rn 'DD_LOGS\.logger\.setLevel\|DD_LOGS\.logger\.setHandler\|DD_LOGS\.logger\.setContext\|DD_LOGS\.logger\.setContextProperty' --include="*.js" --include="*.ts" --include="*.tsx" --include="*.jsx" --include="*.html" --include="*.vue" --include="*.svelte". Pour chaque correspondance, vérifiez que le paramètre est intentionnel pour le logger principal uniquement — il n'affectera plus les erreurs runtime, les logs de réseau ou les logs de console.
Erreurs courantes
| Erreur | Conséquence | Solution |
|---|---|---|
Définir sessionReplaySampleRate > 0 sans activer trackResources et trackLongTasks |
Les ressources et tâches longues ne sont pas collectées silencieusement — elles ne passent plus par défaut à true lors de l'utilisation de sessionReplaySampleRate |
Ajoutez toujours trackResources: true, trackLongTasks: true à côté de tout sessionReplaySampleRate non nul |
Utiliser context.event au lieu de context.events dans beforeSend pour les événements d'action |
La propriété de contexte d'action est renommée — context.event est undefined, les détails de l'événement DOM sont perdus |
Mettez à jour vers context.events (array) ; itérez si vous avez besoin de tous les événements DOM associés |
Ne pas mettre à jour connect-src CSP vers les nouveaux domaines d'intake v5 |
Le SDK échoue silencieusement à envoyer les données — les anciens domaines d'intake ne sont plus valides | Mettez à jour connect-src vers le domaine d'intake v5 pour votre site (voir Étape 7) |
Liste de vérification de vérification
Après la mise à jour, confirmez :
- [ ] Le SDK se charge sans erreurs de console
- [ ] Aucune référence aux paramètres init supprimés (
proxyUrl,sampleRate,replaySampleRate, etc.) - [ ] Aucune référence aux APIs supprimées (
addRumGlobalContext,removeUser, etc.) - [ ] Les rappels
beforeSendretournent des valeurs booléennes - [ ] Les gestionnaires d'action
beforeSendutilisentcontext.events(pascontext.event) - [ ]
trackResourcesettrackLongTasksexplicitement définis si vous utilisezsessionReplaySampleRate - [ ] L'enregistrement Session Replay fonctionne (si
sessionReplaySampleRate> 0) - [ ] Le distributed tracing fonctionne (pas d'erreurs CORS du header
traceparent) - [ ]
connect-srcCSP mise à jour vers les nouveaux domaines d'intake - [ ] Dashboards/moniteurs mis à jour pour
resource.methoden majuscules - [ ] Aucune requête utilisant
error.origin(utilisezoriginà la place)