New Relic effectue la transition des images de runtime synthétique de Node.js 16 avec Chrome 134 vers Node.js 22 avec Chrome 147 ou supérieur. Cette mise à jour corrige la CVE-2026-5281 et met à jour les runtimes vers les versions actuellement prises en charge. Chrome 134 est en dehors des canaux pris en charge par Google, et Node.js 16 a atteint la fin de vie en septembre 2023.
Les nouvelles images d'exécution sont disponibles sur Docker Hub :
Important
Action requise d'ici DATE. New Relic met fin au support des runtimes Node.js 16 et Chrome 134. Si vous ne mettez pas à jour, New Relic migrera automatiquement vos moniteurs. Cependant, la migration automatique peut ne pas détecter les monitorer qui réussissent mais échouent silencieusement sur certaines étapes du script.
Différences entre emplacement public et site privé
Le chemin de migration dépend du fait que vos monitors s'exécutent sur des emplacements publics ou des sites privés.
Emplacements publics : modifiez la liste déroulante de la version de Browser dans la page de configuration du moniteur pour passer de Chrome 134 à Latest. Aucun changement d'infrastructure nécessaire.
Sites privés : vous devez déployer de nouvelles images d'exécution sur votre infrastructure de gestionnaire de tâches Synthetics (SJM).
Important
Pour les sites privés, les listes déroulantes de version de Browser et de Runtime dans les paramètres généraux n'ont aucun effet. La version est entièrement déterminée par l'image que le SJM exécute. La modification de la liste déroulante ne change pas la version d'exécution qui traite le job — seule l'image déployée le fait. Par conséquent, l'attribut runtimeTypeVersion dans SyntheticCheck n'est pas un moyen fiable d'identifier la version du runtime pour les tâches de monitorer privées.
La page Runtime Upgrades dans Synthetics > Runtime Upgrades est conçue pour les monitorer publics. Pour les sites privés, il n’y a pas de validation de pré-migration automatisée via cet outil. Si vous pointez plusieurs gestionnaires de tâches — exécutant chacun un environnement d'exécution différent — vers la même clé de site privé, tous les résultats affichés sont de véritables exécutions de tâches, et non des vérifications de compatibilité isolées. Utilisez la stratégie de site privé parallèle pour comparer le comportement du monitor entre les environnements d’exécution avant de valider la mise à niveau.
Ce qui change
Utilisez ce tableau pour identifier si vos résultats de monitoring proviennent d'un SJM exécutant une image rc1.x.
| Composant | Ancienne version | rc1.x version |
|---|---|---|
| Node.js | 16 | 22 ou supérieur |
| Chrome | 134 | 147 ou supérieur |
| Version du runtime de l'API | 1.2.134 | 1.2.143 ou supérieur |
| Version du runtime Browser | 3.0.55 | 3.0.63 ou supérieur |
Interrogation des versions de runtime
Chaque tag Docker Hub rc1.x correspond à une valeur nr.runtimeVersion spécifique rapportée dans les événements SyntheticCheck. Vous pouvez interroger l'attribut nr.runtimeVersion dans NRQL :
SELECT count(*) FROM SyntheticCheckWHERE locationLabel = 'YOUR_PRIVATE_LOCATION'FACET type, nr.runtimeVersion SINCE 1 day agoConseil
Utilisez rc1.14 ou supérieur pour l'exécution du navigateur afin d'obtenir Chrome 146.0.7680.177, qui inclut le correctif pour CVE-2026-5281.
Principaux changements de comportement
Ces changements peuvent avoir un impact sur vos éléments monitorés existants :
La valeur par défaut de HTTP keep-alive a changé. Node.js 22 définit par défaut
http.globalAgentsurkeepAlive: true(c'étaitfalsedans Node.js 16). Les scripts qui créent des agents HTTP personnalisés sans définir explicitementkeepAlive: falsepeuvent subir des temps d'exécution plus longs ou des délais d'attente, car les connexions restent ouvertes et empêchent le processus de se terminer.Utilisation plus élevée des ressources. Chrome 147 nécessite plus de CPU et de mémoire que Chrome 134 pour le même workload. Les conteneurs de runtime Browser utilisent généralement de 625 à 980 MiB de leur limite de mémoire par défaut de 3,256 GiB lors de l'exécution, par rapport à une utilisation inférieure sur Chrome 134.
Frais généraux de conteneur accrus. Les moniteurs de navigateur scriptés ont une surcharge moyenne de conteneur de 6 à 10 secondes. Les moniteurs d'API scriptés prennent en moyenne de 2 à 4 secondes pour monitorer. Les moniteurs qui étaient proches des seuils de timeout sur l'ancien environnement d'exécution peuvent désormais les dépasser.
Choisissez votre stratégie de migration
Il existe deux approches pour la migration des sites privés. Choisissez en fonction de votre tolérance au risque et de la taille de la flotte à monitorer.
Option A : mise à niveau sur place
Mettez à niveau tous les SJM vers les nouvelles images d'exécution. Tous les moniteurs s'exécutent immédiatement sur les nouveaux runtimes.
Idéal pour : les petites flottes de moniteurs, les environnements non critiques, ou lorsque vous pouvez tolérer quelques pannes de moniteur pendant la transition.
Mesures:
- Mettez à jour la configuration
DESIRED_RUNTIMESsur chaque SJM pour utiliser les nouveaux tags d'image. - Redémarrez ou redéployez le SJM.
- Monitorez les résultats.
Risque : certains outils pour monitorer peuvent échouer jusqu'à ce que leurs scripts soient mis à jour pour fonctionner avec Node.js 22 et Chrome 147 ou supérieur.
Option B : site privé parallèle (recommandé)
Créez un deuxième site privé, déployez-y des SJM avec les nouvelles images d'exécution, et monitorez sur les deux sites simultanément pour une comparaison A/B.
Idéal pour : les environnements de production, les grandes flottes de moniteurs, ou lorsque vous avez besoin de zéro interruption du monitoring existant.
Mesures:
Créez un nouveau site privé dans New Relic. Donnez-lui un nom descriptif.
Déployez un ou plusieurs SJM pointant vers le nouveau site privé avec les nouvelles images de runtime.
Configurez une règle de mise en sourdine pour supprimer le bruit des alertes provenant du nouvel emplacement pendant les tests :
Accédez à Alerts > Muting rules et créez une règle avec la condition
tags.privateLocation EQUALS <your-new-location-name>.Ajoutez le nouveau site privé à vos monitors. Chaque moniteur peut être affecté à plusieurs sites privés. Les jobs de chaque emplacement s'exécutent indépendamment — un échec sur le nouvel emplacement n'affecte pas les résultats de l'ancien emplacement.
Comparez les résultats entre les deux emplacements. Utilisez cette requête NRQL :
SELECT count(*), percentage(count(*), WHERE result = 'SUCCESS') AS 'Success %',average(executionDuration) AS 'Avg Exec Duration'FROM SyntheticCheckSINCE 1 day agoFACET locationLabel, monitorNameCorrigez tous les moniteurs en échec sur le nouvel emplacement en modifiant manuellement les scripts.
Une fois que tous les moniteurs réussissent sur le nouvel emplacement, supprimez l'ancien emplacement de vos moniteurs et mettez hors service l'ancienne infrastructure SJM.
Compromis : double coût d'infrastructure pendant la période de transition. Vous avez besoin d'hôtes ou de ressources de cluster distincts pour le deuxième ensemble de SJM.
Cette approche vous donne une image complète de la façon dont tous vos moniteurs s'exécutent sur les nouvelles exécutions, y compris les différences de résultats et de durée d'exécution, qui affectent tous deux la charge du gestionnaire de tâches et la planification des ressources.
Pour tester uniquement les échecs de script sans la comparaison complète de l'infrastructure, configurez un deuxième site privé avec un petit SJM de test et exécutez un sous-ensemble à monitorer. Cela montre comment les moniteurs existants se comportent sur les nouveaux runtimes, mais pas comment les runtimes s'adaptent à la capacité de votre infrastructure existante.
Déployer SJM avec de nouvelles images d'exécution
Mettez à jour votre déploiement SJM existant pour utiliser les nouveaux tags d'image d'exécution. Le SJM lui-même (newrelic/synthetics-job-manager:latest) ne change pas — seules les images d'exécution qu'il récupère changent.
Conseil
Pour obtenir des instructions détaillées sur l'installation et la configuration, consultez Installer le gestionnaire de tâches Synthetics et Configuration du gestionnaire de tâches.
Docker
Mettez à jour la variable d'environnement DESIRED_RUNTIMES pour référencer les nouveaux tags d'image :
$docker run \> --name sjm \> --restart unless-stopped \> -e PRIVATE_LOCATION_KEY=YOUR_PRIVATE_LOCATION_KEY \> -e "DESIRED_RUNTIMES=[newrelic/synthetics-ping-runtime:latest,newrelic/synthetics-node-api-runtime:RC_IMAGE_TAG,newrelic/synthetics-node-browser-runtime:RC_IMAGE_TAG]" \> -v /var/run/docker.sock:/var/run/docker.sock:rw \> newrelic/synthetics-job-manager:latestRemplacez YOUR_PRIVATE_LOCATION_KEY par votre clé de site privé, et RC_IMAGE_TAG par le tag d'image de Docker Hub, comme rc1.17.
Si vous avez un conteneur SJM existant, arrêtez-le et supprimez-le d'abord, puis démarrez le nouveau :
$docker stop YOUR_CONTAINER_NAME$docker rm YOUR_CONTAINER_NAMEPodman
Assurez-vous d’avoir installé toutes les dépendances Podman, y compris le service API Podman sur le port 8000. Ensuite, mettez à jour le DESIRED_RUNTIMES:
$podman pod create --network slirp4netns --name sjm-pod \> --add-host=podman.service:YOUR_HOST_IP$
$podman run -d \> --name sjm \> --pod sjm-pod \> --restart unless-stopped \> -e PRIVATE_LOCATION_KEY=YOUR_PRIVATE_LOCATION_KEY \> -e "DESIRED_RUNTIMES=[newrelic/synthetics-ping-runtime:latest,newrelic/synthetics-node-api-runtime:RC_IMAGE_TAG,newrelic/synthetics-node-browser-runtime:RC_IMAGE_TAG]" \> -e CONTAINER_ENGINE=PODMAN \> -e PODMAN_API_SERVICE_PORT=8000 \> -e PODMAN_POD_NAME=sjm-pod \> newrelic/synthetics-job-manager:latestConseil
Téléchargez au préalable les images d'exécution avant de démarrer le SJM pour éviter les problèmes de délai d'attente lors du premier démarrage. L'image du runtime du navigateur est d'environ 3 Go :
$podman pull docker.io/newrelic/synthetics-node-browser-runtime:RC_IMAGE_TAG$podman pull docker.io/newrelic/synthetics-node-api-runtime:RC_IMAGE_TAG$podman pull docker.io/newrelic/synthetics-ping-runtime:latestRemplacez YOUR_PRIVATE_LOCATION_KEY par votre clé de site privé, et RC_IMAGE_TAG par le tag d'image de Docker Hub, comme rc1.17.
Kubernetes
Mettez à jour les valeurs Helm pour le chart du gestionnaire de tâches Synthetics. Si vous utilisez un fichier values.yaml, mettez à jour les tags d'image d'exécution :
$helm repo update$
$helm upgrade sjm newrelic/synthetics-job-manager \> --namespace YOUR_NAMESPACE \> --set synthetics.privateLocationKey=YOUR_PRIVATE_LOCATION_KEY \> --set-json 'synthetics.desiredRuntimes=[{"image":"newrelic/synthetics-ping-runtime","tag":"latest"},{"image":"newrelic/synthetics-node-api-runtime","tag":"RC_IMAGE_TAG"},{"image":"newrelic/synthetics-node-browser-runtime","tag":"RC_IMAGE_TAG"}]'Pour une nouvelle installation :
$helm install sjm newrelic/synthetics-job-manager \> --namespace synthetics --create-namespace \> --set synthetics.privateLocationKey=YOUR_PRIVATE_LOCATION_KEY \> --set-json 'synthetics.desiredRuntimes=[{"image":"newrelic/synthetics-ping-runtime","tag":"latest"},{"image":"newrelic/synthetics-node-api-runtime","tag":"RC_IMAGE_TAG"},{"image":"newrelic/synthetics-node-browser-runtime","tag":"RC_IMAGE_TAG"}]'Remplacez YOUR_PRIVATE_LOCATION_KEY par votre clé de site privé, et RC_IMAGE_TAG par le tag d'image de Docker Hub, comme rc1.17.
Requêtes NRQL pour le monitoring de la transition
Si vous avez configuré un deuxième site privé avec les mêmes monitorers — où les contrôles s'exécutent comme de vrais jobs, et non comme des validations de pré-migration — utilisez ces requêtes pour suivre la progression de votre migration :
Taux d'échec par moniteur sur le nouveau runtime :
SELECT percentage(count(*), WHERE result = 'SUCCESS') AS 'Success %', count(*) AS 'Total Checks'FROM SyntheticCheckWHERE locationLabel = 'YOUR_NEW_LOCATION'SINCE 1 day agoFACET monitorNameComparaison de la durée d'exécution entre les anciens et les nouveaux emplacements :
SELECT average(executionDuration) AS 'Avg Execution Duration (ms)', average(duration) AS 'Avg Duration (ms)', average(executionDuration - duration) AS 'Avg Overhead (ms)'FROM SyntheticCheckSINCE 1 day agoFACET locationLabel, monitorNameIdentifier les moniteurs avec des temps d'exécution accrus :
SELECT monitorName, average(executionDuration) AS 'Avg ExecDuration'FROM SyntheticCheckSINCE 1 day agoFACET monitorName, locationLabelORDER BY average(executionDuration) DESCCorriger les monitorer en échec
Dépannage
Problèmes courants
| Problème | Cause possible | Solution |
|---|---|---|
Error: tab crashed | Limite de mémoire de Chrome 147 dépassée | Augmenter HEAVY_WORKER_MEMORY ou réduire HEAVYWEIGHT_WORKERS |
| Plus de 30 secondes ajoutées au temps d’exécution | Connexions keep-alive empêchant la fin du processus | Corrigé dans rc1.11 ; vérifier les agents personnalisés dans les scripts |
| Podman SJM ne parvient pas à créer un réseau bridge | Autorisations Podman rootless | Suivez la configuration des dépendances Podman ; assurez-vous de la délégation cgroup et du service API Podman |
| Podman SJM s'arrête lors de l'extraction de l'image | Les images volumineuses expirent lors de la première extraction | Pré-télécharger les images d'exécution avec podman pull avant de démarrer le SJM |
| Le moniteur passe mais manque des étapes du script | Échecs silencieux dans les scripts à plusieurs étapes | Utilisez la stratégie d'emplacement parallèle pour comparer les résultats entre les anciens et les nouveaux environnements d'exécution |
Requêtes NRQL utiles
Vérifier les moniteurs avec des taux d'échec accrus :
SELECT percentage(count(*), WHERE result = 'FAILED') AS 'Failure %'FROM SyntheticCheckSINCE 1 day agoFACET monitorNameWHERE percentage(count(*), WHERE result = 'FAILED') > 0Comparez la durée d'exécution avant et après la migration :
SELECT average(executionDuration) AS 'Avg ExecDuration', max(executionDuration) AS 'Max ExecDuration', average(executionDuration - duration) AS 'Avg Overhead'FROM SyntheticCheckSINCE 1 day agoFACET monitorNameORDER BY average(executionDuration) DESCTrouver les moniteurs avec des plantages d'onglets Chrome :
SELECT count(*)FROM SyntheticCheckWHERE error LIKE '%tab crashed%'SINCE 1 day agoFACET monitorNameRecommandations de ressources
D'après les tests avec les exécutions rc1.15 :
| Composant | Minimum recommandé | Défaut |
|---|---|---|
| Mémoire du conteneur SJM | 3,256 Gio | 3,256 Gio |
Mémoire de l'environnement d'exécution Browser (HEAVY_WORKER_MEMORY) | 4 Gio | 3,256 Gio |
| Mémoire partagée de l'environnement d'exécution Browser | 2,256 Gio | 2,256 Gio |
Parts de CPU de l'environnement d'exécution Browser (HEAVY_WORKER_CPUS) | 2 | 1 |
| Mémoire du runtime de ping | 1 Gio | 1 Gio |
HEAVY_WORKER_CPUS définit les parts de CPU Docker (un poids relatif), et non une limite stricte de cœurs de processeur. L'augmenter ne fait une différence que lorsque plusieurs conteneurs sont en concurrence pour le processeur simultanément.
Chronologie
| Date | Événement |
|---|---|
| Avril 2026 | Nouvelles images d'exécution (rc1.15) disponible sur Docker Hub |
| Avril 2026 | Bulletin de sécurité NR26-04 publié |
| -juillet 2026 | Fin du support des runtimes Node.js 16/Chrome 134 |
| -juillet 2026 | Migration automatique des moniteurs restants |
Prudence
Les moniteurs qui sont automatiquement migrés peuvent passer la validation mais échouer silencieusement sur certaines étapes du script. Testez vos monitors proactivement en utilisant la stratégie de site privé en parallèle pour garantir une transition fluide.