imqa.document

코어 웹바이탈 계측

@imqa/instrumentation-webvitals

NPM Version NPM Last Update NPM Unpacked Size npm package minimized gzipped size NPM Downloads NPM Type Definitions

개요

WebVitals 계측은 웹 애플리케이션의 핵심 성능 지표인 Core Web Vitals를 자동으로 측정하고 모니터링하는 기능을 제공합니다. LCP(Largest Contentful Paint), FID(First Input Delay), CLS(Cumulative Layout Shift) 등 Google에서 정의한 웹 성능 기준을 실시간으로 추적하여 사용자 경험을 개선할 수 있습니다.

주요 기능

Core Web Vitals 측정

  • LCP: 최대 콘텐츠풀 페인트 시간 측정
  • FID: 첫 번째 입력 지연 시간 측정
  • CLS: 누적 레이아웃 이동 점수 계산
  • INP: 다음 페인트까지의 상호작용 지연 시간

추가 성능 메트릭

  • TTFB: 첫 바이트까지의 시간
  • FCP: 첫 번째 콘텐츠풀 페인트
  • TTI: 상호작용 가능 시간
  • TBT: 총 차단 시간

Histogram Metrics 지원

  • Web Vitals 데이터를 OpenTelemetry Histogram Metric으로 전송
  • Span과 Metric 동시 전송으로 다양한 분석 지원
  • 각 메트릭별 분포도 및 백분위수 분석 가능

실시간 성능 모니터링

  • 성능 임계값 기반 알림
  • 디바이스별, 브라우저별 성능 분석
  • 페이지별 상세 성능 리포트

계측 범위

WebVitals 계측은 다음과 같은 성능 지표를 추적합니다:

  • 로딩 성능: 페이지 로드 및 콘텐츠 렌더링 시간
  • 상호작용성: 사용자 입력에 대한 응답 속도
  • 시각적 안정성: 레이아웃 변경으로 인한 시각적 불안정성
  • 네트워크 성능: 서버 응답 시간 및 리소스 로딩

주요 속성

속성설명
service.nameTelemetry를 생성하는 서비스의 이름
service.version서비스 버전
service.namespace서비스 네임스페이스
deployment.environment.name배포 환경
telemetry.sdk.languageTelemetry SDK의 프로그래밍 언어
telemetry.sdk.nameTelemetry SDK의 이름
telemetry.sdk.versionTelemetry SDK의 버전
process.runtime.name런타임 이름 (예: "browser")
os.name운영체제 이름
os.version운영체제 버전
imqa.browser.device디바이스 타입
imqa.browser.name브라우저 이름
imqa.browser.version브라우저 전체 버전
imqa.browser.version_major브라우저 메이저 버전
service.key서비스 식별 키
imqa.agent.versionIMQA 에이전트 버전
rum.versionRUM (Real User Monitoring) 버전
rum.scriptInstanceRUM 스크립트 인스턴스 식별자
session.id사용자 세션 식별자

인스트루멘테이션 범위

WebVitals Telemetry는 주로 다음과 같은 인스트루멘테이션 범위를 통해 캡처됩니다:

  • @imqa/instrumentation-webvitals: Core Web Vitals 및 기타 성능 메트릭 캡처

WebVitals 스팬

WebVitals 스팬은 웹 성능 지표를 캡처합니다:

  • traceId: 트레이스의 고유 식별자
  • spanId: 스팬의 고유 식별자
  • name: 성능 지표의 이름 (예: "LCP", "FID", "CLS")
  • kind: 스팬의 타입 (INTERNAL = 1)
  • startTimeUnixNano: 에포크 이후의 메트릭 측정 시작 시간 (나노초)
  • endTimeUnixNano: 에포크 이후의 메트릭 측정 완료 시간 (나노초)
  • status: 결과 상태 (OK = 0)

WebVitals 스팬 속성

각 WebVitals 스팬은 다음과 같은 속성을 포함합니다:

속성타입설명
web-vital.namestring성능 지표의 이름 (fcp, ttfb, fid, cls, lcp, inp)
web-vital.valuenumber지표의 값 (밀리초 또는 비율)
web-vital.deltanumber이전 값과의 차이
web-vital.navigation_typestring네비게이션 타입
web-vital.ratingstring지표의 등급 (good, needs-improvement, poor)
imqa.span.typestring스팬 타입 (webvitals)
location.hrefstring현재 페이지 URL
environmentstring환경 이름
deployment.environmentstring배포 환경
screen.namestring화면/페이지 이름
screen.typestring화면/페이지 타입
session.idstring사용자 세션 식별자
url.fullstring요청 전체 URL (예: "https://example.com/articles/4?s=1&t1" )
componentstring인스트루멘테이션 컴포넌트 이름

사용 방법

이 스키마는 IMQA 모니터링 시스템으로 Telemetry 데이터를 처리하고 저장하기 전에 웹 성능 지표를 위한 Telemetry 데이터를 검증하는 데 사용됩니다. 이는 모든 필수 필드가 올바르게 포함되어 있는지 확인합니다.

계측 설정

(boolean, 선택)

Web Vitals 계측을 활성화하거나 비활성화합니다. true로 설정하면 Core Web Vitals 지표가 자동으로 계측됩니다.

interface InstrumentationConfig {
  enabled?: boolean;
}
  • enabled: 계측을 활성화할지 여부를 설정합니다. 기본값은 true입니다.

Histogram Metric 속성

Web Vitals 데이터는 Span과 함께 Histogram Metric으로도 전송됩니다. Histogram Metric은 다음과 같은 속성을 포함합니다:

속성타입설명
imqa.span.typestring메트릭 타입 (webvitals)
web-vital.namestring성능 지표의 이름
web-vital.deltanumber이전 값과의 차이
web-vital.navigation_typestring네비게이션 타입
web-vital.ratingstring지표의 등급

Histogram Metric은 다음과 같은 이점을 제공합니다:

  • 메트릭 값의 분포 분석
  • P50, P75, P90, P95, P99 백분위수 계산
  • 시간별 추이 분석
  • 다양한 차원별 집계 분석

예시

유효한 WebVitals Telemetry 객체는 다음과 같은 내용을 포함합니다:

  • 서비스, 브라우저 및 환경을 식별하는 리소스 정보
  • LCP, FID, CLS와 같은 웹 성능 지표를 캡처하는 WebVitals 스팬
  • 동일한 속성을 가진 Histogram Metric으로 전송되는 성능 데이터
  • 지표의 값과 등급을 포함하는 성능 메트릭

데이터는 다양한 Telemetry 수집 및 분석 도구와 호환되는 OpenTelemetry 프로토콜 형식을 따릅니다.

구현 예시

// Web Vitals 계측이 활성화되면 자동으로 수행됨
// 각 메트릭은 Span과 Histogram Metric으로 동시 전송

// FCP (First Contentful Paint) 측정 시
// - Span: web-vital.name='fcp', web-vital.value=1500, web-vital.rating='good'
// - Metric: histogram 'webvitals' with value=1500

// LCP (Largest Contentful Paint) 측정 시
// - Span: web-vital.name='lcp', web-vital.value=2500, web-vital.rating='needs-improvement'
// - Metric: histogram 'webvitals' with value=2500