뉴렐릭은 신세틱스 런타임 이미지를 Chrome 134가 포함된 Node.js 16에서 Chrome 147 이상이 포함된 Node.js 22로 전환하고 있습니다. 이 업데이트는 CVE-2026-5281 을 해결하고 런타임을 현재 지원되는 버전으로 업데이트합니다. Chrome 134는 Google의 지원 채널을 벗어났으며, Node.js 16은 2023년 9월에 수명이 종료되었습니다.
새로운 런타임 이미지는 도커 허브에서 사용할 수 있습니다:
중요
DATE까지 조치가 필요합니다. 뉴렐릭은 Node.js 16 및 Chrome 134 런타임에 대한 지원을 종료합니다. 업데이트하지 않으면, 뉴렐릭은 모니터를 자동으로 마이그레이션합니다. 그러나 자동 마이그레이션은 통과하지만 일부 스크립트 단계에서 조용히 실패하는 모니터를 발견하지 못할 수 있습니다.
퍼블릭과 프라이빗 로케이션의 차이점
마이그레이션 경로는 모니터가 공공 위치 또는 프라이빗 로케이션에서 실행되는지 여부에 따라 달라집니다.
공개 위치: 모니터의 설정 페이지에서 Browser [브라우저] 버전 드롭다운 메뉴를 Chrome 134 에서 Latest [최신]으로 변경하세요. 인프라 변경이 필요하지 않습니다.
프라이빗 로케이션: 신세틱스 작업 관리자(SJM) 인프라에 새로운 런타임 이미지를 배포해야 합니다.
중요
프라이빗 로케이션의 경우, 일반 설정의 Browser [브라우저] 및 Runtime [런타임] 버전 드롭다운 메뉴는 아무런 영향을 미치지 않습니다. 버전은 전적으로 SJM이 실행 중인 이미지에 의해 결정됩니다. 드롭다운 메뉴를 변경해도 작업을 처리하는 런타임 버전은 변경되지 않으며, 오직 배포된 이미지만이 이를 변경합니다. 따라서 SyntheticCheck 의 runtimeTypeVersion 속성은 프라이빗 모니터 작업의 런타임 버전을 식별하는 신뢰할 수 있는 방법이 아닙니다.
Synthetics > Runtime Upgrades 의 Runtime Upgrades [런타임 업그레이드] 페이지는 퍼블릭 모니터용으로 설계되었습니다. 프라이빗 로케이션의 경우, 해당 도구를 통한 자동화된 마이그레이션 사전 검증이 없습니다. 각각 다른 런타임을 실행하는 여러 작업 관리자를 동일한 프라이빗 로케이션 키에 지정하면, 표시되는 모든 결과는 독립적인 호환성 검사가 아니라 실제 작업 실행입니다. 업그레이드를 적용하기 전에 런타임 간 모니터 동작을 비교하려면 병렬 프라이빗 로케이션 전략 을 사용하십시오.
변경 사항
이 테이블을 사용하여 모니터 결과가 rc1.x 이미지를 실행하는 SJM에서 생성되었는지 식별하십시오.
| 요소 | 구 버전 | rc1.x 버전 |
|---|---|---|
| 노드.js | 16 | 22 이상 |
| 크롬 | 134 | 147 이상 |
| API 런타임 버전 | 1.2.134 | 1.2.143 또는 더 높은 |
| 브라우저 런타임 버전 | 3.0.55 | 3.0.63 또는 더 높은 |
런타임 버전 쿼리하기
각 rc1.x 도커 Hub 태그는 SyntheticCheck 이벤트에 보고된 특정 nr.runtimeVersion 값에 해당합니다. NRQL에서 nr.runtimeVersion 속성을 쿼리할 수 있습니다:
SELECT count(*) FROM SyntheticCheckWHERE locationLabel = 'YOUR_PRIVATE_LOCATION'FACET type, nr.runtimeVersion SINCE 1 day ago팁
Chrome 146.0.7680.177을 사용하려면 브라우저 런타임에 rc1.14 이상 을 사용하세요, 여기에는 CVE-2026-5281에 대한 패치가 포함되어 있습니다.
주요 동작 변경 사항
이러한 변경 사항은 기존 모니터에 영향을 미칠 수 있습니다:
HTTP keep-alive 기본값이 변경되었습니다. Node.js 22는
http.globalAgent을(를)keepAlive: true(으)로 기본 설정합니다(Node.js 16에서는false였습니다). 명시적으로keepAlive: false을(를) 설정하지 않고 사용자 지정 HTTP 에이전트를 생성하는 스크립트는 연결이 열린 상태로 유지되어 프로세스가 종료되지 않으므로 실행 시간이 길어지거나 시간 초과가 발생할 수 있습니다.더 높은 리소스 사용량. 동일한 워크로드에 대해 Chrome 147은 Chrome 134보다 더 많은 CPU와 메모리를 필요로 합니다. 브라우저 런타임 컨테이너는 Chrome 134에서의 더 낮은 사용량에 비해 실행 중에 일반적으로 3.256 GiB의 기본 메모리 제한 중 625-980 MiB를 사용합니다.
컨테이너 오버헤드 증가. 스크립트 브라우저 모니터의 평균 컨테이너 오버헤드는 6-10초입니다. 스크립팅된 API 모니터는 평균 2-4초가 소요됩니다. 이전 런타임에서 시간 초과 임계값에 근접했던 모니터는 이제 이를 초과할 수 있습니다.
마이그레이션 전략 선택
프라이빗 로케이션 마이그레이션에는 두 가지 접근 방식이 있습니다. 위험 허용 범위와 모니터 함대 크기에 따라 선택하세요.
옵션 A: 인플레이스 업그레이드
모든 SJM을 새 런타임 이미지로 업그레이드하세요. 모든 모니터는 즉시 새로운 런타임에서 실행됩니다.
가장 적합한 경우: 소규모 모니터 플릿, 비중요 환경 또는 전환 중 일부 모니터 오류를 허용할 수 있는 경우.
단계:
- 새 이미지 태그를 사용하도록 각 SJM의
DESIRED_RUNTIMES설정을 업데이트합니다. - SJM을 재시작하거나 재배포합니다.
- 모니터 결과.
위험: 스크립트가 Node.js 22 및 Chrome 147 이상에서 작동하도록 업데이트될 때까지 일부 모니터가 실패할 수 있습니다.
옵션 B: 병렬 프라이빗 로케이션(권장)
두 번째 프라이빗 로케이션을 생성하고, 그곳에 새로운 런타임 이미지로 SJM을 배포한 다음, A/B 비교를 위해 두 로케이션 모두에서 동시에 모니터를 실행합니다.
권장 대상: 운영 환경, 대규모 모니터 플릿, 또는 기존 모니터링에 중단이 없어야 하는 경우.
단계:
뉴렐릭에서 새 프라이빗 로케이션을 생성합니다. 기술 이름을 지정하세요.
새로운 런타임 이미지를 사용하여 새 프라이빗 로케이션을 가리키는 하나 이상의 SJM을 배포하십시오.
테스트 중 새 위치에서 발생하는 공지 노이즈를 억제하려면 음소거 규칙을 설정 하세요:
Alerts > Muting rules 으로 이동하여 조건이
tags.privateLocation EQUALS <your-new-location-name>인 규칙을 생성합니다.새 프라이빗 로케이션을 모니터에 추가합니다. 각 모니터는 여러 프라이빗 로케이션에 할당될 수 있습니다. 각 위치의 작업은 독립적으로 실행됩니다 — 새 위치에서의 오류는 이전 위치의 결과에 영향을 미치지 않습니다.
두 위치 간의 결과를 비교합니다. 이 NRQL 쿼리를 사용하십시오:
SELECT count(*), percentage(count(*), WHERE result = 'SUCCESS') AS 'Success %',average(executionDuration) AS 'Avg Exec Duration'FROM SyntheticCheckSINCE 1 day agoFACET locationLabel, monitorName스크립트를 수동으로 편집하여 새 위치에서 실패하는 모니터를 수정하십시오.
새 위치에서 모든 모니터가 통과하면, 모니터에서 이전 위치를 제거하고 이전 SJM 인프라를 폐기합니다.
트레이드오프: 전환 기간 동안 인프라 비용 두 배 증가. 두 번째 SJM 세트에는 별도의 호스트 또는 클러스터 리소스가 필요합니다.
이 접근 방식은 결과 및 실행 시간의 차이를 포함하여 모든 모니터가 새로운 런타임에서 어떻게 실행되는지에 대한 전체적인 그림을 제공하며, 이 두 가지 모두 작업 관리자 부하 및 리소스 계획에 영향을 미칩니다.
전체 인프라 비교 없이 스크립트 실패만 테스트하려면, 소규모 테스트 SJM을 사용하여 두 번째 프라이빗 로케이션을 설정하고 모니터의 하위 집합을 실행하십시오. 이는 기존 모니터가 새 런타임에서 어떻게 동작하는지 보여주지만, 런타임이 기존 인프라 용량에 어떻게 부합하는지는 보여주지 않습니다.
새 런타임 이미지로 SJM 배포
새 런타임 이미지 태그를 사용하도록 기존 SJM 배포를 업데이트하십시오. SJM 자체(newrelic/synthetics-job-manager:latest)는 변경되지 않습니다 ― 가져오는 런타임 이미지만 변경됩니다.
팁
자세한 설치 및 설정 지침은 신세틱스 작업 관리자 설치 및 작업 관리자 설정을 참조하십시오.
도커
새 이미지 태그를 참조하도록 DESIRED_RUNTIMES 환경 변수를 업데이트합니다:
$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:latestYOUR_PRIVATE_LOCATION_KEY 프라이빗 로케이션 키로 바꾸고, RC_IMAGE_TAG rc1.17와(과) 같은 도커 허브의 이미지 태그로 바꿉니다.
기존 SJM 컨테이너가 있는 경우 먼저 중지하고 제거한 다음 새 컨테이너를 시작합니다:
$docker stop YOUR_CONTAINER_NAME$docker rm YOUR_CONTAINER_NAME포드만
포트 8000의 Podman API 서비스를 포함하여 모든 Podman 의존성/종속성 을 완료했는지 확인합니다. 그런 다음 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:latest팁
첫 시작 시 시간 초과 문제를 방지하려면 SJM을 시작하기 전에 런타임 이미지를 미리 가져오십시오. 브라우저 런타임 이미지는 약 3GB입니다:
$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:latestYOUR_PRIVATE_LOCATION_KEY 프라이빗 로케이션 키로 바꾸고, RC_IMAGE_TAG rc1.17와(과) 같은 도커 허브의 이미지 태그로 바꿉니다.
Kubernetes
신세틱 작업 관리자 차트의 Helm 값을 업데이트하십시오. values.yaml 파일을 사용하는 경우 런타임 이미지 태그를 업데이트합니다:
$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"}]'새로운 설치의 경우:
$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"}]'YOUR_PRIVATE_LOCATION_KEY 프라이빗 로케이션 키로 바꾸고, RC_IMAGE_TAG rc1.17와(과) 같은 도커 허브의 이미지 태그로 바꿉니다.
전환 모니터링을 위한 NRQL 쿼리
검사가 마이그레이션 전 유효성 검사가 아닌 실제 작업으로 실행되는 두 번째 프라이빗 로케이션을 동일한 모니터로 설정한 경우, 다음 쿼리를 사용하여 마이그레이션 진행 상황을 추적하세요:
새 런타임에서의 모니터별 실패율:
SELECT percentage(count(*), WHERE result = 'SUCCESS') AS 'Success %', count(*) AS 'Total Checks'FROM SyntheticCheckWHERE locationLabel = 'YOUR_NEW_LOCATION'SINCE 1 day agoFACET monitorName이전 위치와 새 위치 간의 실행 시간 비교:
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, monitorName실행 시간이 증가한 모니터 식별:
SELECT monitorName, average(executionDuration) AS 'Avg ExecDuration'FROM SyntheticCheckSINCE 1 day agoFACET monitorName, locationLabelORDER BY average(executionDuration) DESC실패한 모니터 수정
문제점 해결
일반적인 문제
| 문제 | 가능한 원인 | 해결책 |
|---|---|---|
Error: tab crashed | Chrome 147 메모리 제한 초과 | HEAVY_WORKER_MEMORY 을(를) 늘리거나 줄입니다 HEAVYWEIGHT_WORKERS |
| 실행 시간에 30초 이상 추가됨 | 프로세스 종료를 방해하는 Keep-alive 연결 | rc1.11에서 수정됨, 스크립트에서 커스텀 에이전트 확인 |
| Podman SJM이 브리지 네트워크를 생성하지 못합니다. | 루트리스 Podman 권한 | Podman 의존성/종속성 설정을 따르고, cgroup 위임 및 Podman API 서비스를 확인하세요 |
| 이미지 가져오기 중 Podman SJM 종료 | 처음 가져올 때 대용량 이미지 시간 초과 | SJM을 시작하기 전에 podman pull 을(를) 사용하여 런타임 이미지를 미리 가져오기 |
| 모니터는 통과하지만 스크립트 단계를 누락함 | 다단계 스크립트의 조용한 실패 | 병렬 위치 전략을 사용하여 이전 런타임과 새 런타임 간의 결과를 비교합니다. |
유용한 NRQL 쿼리
장애율이 증가한 모니터 확인:
SELECT percentage(count(*), WHERE result = 'FAILED') AS 'Failure %'FROM SyntheticCheckSINCE 1 day agoFACET monitorNameWHERE percentage(count(*), WHERE result = 'FAILED') > 0마이그레이션 전후의 실행 기간 비교:
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) DESCChrome 탭 충돌이 있는 모니터 찾기:
SELECT count(*)FROM SyntheticCheckWHERE error LIKE '%tab crashed%'SINCE 1 day agoFACET monitorName리소스 권장 사항
rc1.15 런타임 테스트를 기반으로:
| 요소 | 권장 최소 | 기본값 |
|---|---|---|
| SJM 컨테이너 메모리 | 3.256 GiB | 3.256 GiB |
브라우저 런타임 메모리(HEAVY_WORKER_MEMORY) | 4 GiB | 3.256 GiB |
| 브라우저 런타임 공유 메모리 | 2.256 GiB | 2.256 GiB |
브라우저 런타임 CPU 점유율(HEAVY_WORKER_CPUS) | 2 | 1 |
| Ping 런타임 메모리 | 1 GiB | 1 GiB |
HEAVY_WORKER_CPUS 하드 CPU 코어 제한이 아닌 도커 CPU 공유(상대적 가중치)를 설정합니다. 이를 늘리는 것은 여러 컨테이너가 동시에 CPU를 두고 경쟁할 때만 차이가 있습니다.
타임라인
| 날짜 | 이벤트 |
|---|---|
| 2026년 4월 | 새로운 런타임 이미지(rc1.15) 도커 허브에서 사용할 수 있습니다 |
| 2026년 4월 | 보안 게시판 NR26-04 게시됨 |
| -2026년 7월 | Node.js 16 / Chrome 134 런타임 지원 종료 |
| -2026년 7월 | 남은 모니터 자동 마이그레이션 |
주의
자동으로 마이그레이션된 모니터는 유효성 검사를 통과할 수 있지만 일부 스크립트 단계에서 조용히 실패할 수 있습니다. 원활한 전환을 위해 병렬 프라이빗 로케이션 전략을 사용하여 모니터를 사전에 테스트하십시오.