imqa.document

콘솔 계측

@imqa/instrumentation-console

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

개요

콘솔 계측은 웹 애플리케이션에서 JavaScript 콘솔에 출력되는 로그, 경고, 오류 메시지를 자동으로 캡처하고 모니터링하는 기능을 제공합니다. console.log, console.warn, console.error 등의 콘솔 API 호출을 실시간으로 수집하여 애플리케이션의 디버깅과 모니터링을 지원합니다.

주요 기능

콘솔 메시지 캡처

  • console.log, warn, error, info 등 모든 콘솔 출력 추적
  • 메시지 내용 및 컨텍스트 정보 수집
  • 호출 스택 및 소스 위치 추적

로그 레벨 분류

  • 로그 레벨별 메시지 분류 및 필터링
  • 오류 및 경고 메시지 우선 모니터링
  • 개발/프로덕션 환경별 로그 레벨 관리

디버깅 지원

  • 실시간 로그 모니터링 및 알림
  • 오류 발생 컨텍스트 추적
  • 프로덕션 환경 디버깅 지원

계측 범위

콘솔 계측은 다음과 같은 콘솔 출력을 추적합니다:

  • 로그 메시지: console.log를 통한 일반 로그
  • 경고 메시지: console.warn을 통한 경고
  • 오류 메시지: console.error를 통한 오류
  • 디버그 정보: console.debug, console.info 등

주요 속성

리소스 속성

리소스 섹션은 서비스와 환경을 설명하는 속성을 포함합니다:

속성설명
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사용자 세션 식별자

인스트루멘테이션 범위

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

  • @imqa/instrumentation-console: 브라우저 console API 호출 캡처

콘솔 로그 스팬

각 콘솔 로그 항목은 스팬으로 표시됩니다:

  • traceId: 트레이스의 고유 식별자
  • spanId: 스팬의 고유 식별자
  • parentSpanId: 부모 스팬의 식별자 (일반적으로 사용자 상호작용에서)
  • name: 콘솔 메서드의 이름 (예: "console.log", "console.error")
  • kind: 스팬의 타입 (INTERNAL = 1)
  • startTimeUnixNano: 콘솔 로그가 캡처된 시간 (에포크 이후의 나노초)
  • endTimeUnixNano: 종료 시간 (순간적 이벤트의 경우 시작 시간과 동일)
  • status: 결과 상태 (OK = 0, ERROR = 1, UNSET = 2)

콘솔 로그 스팬 속성

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

속성타입설명
location.hrefstring현재 페이지 URL
environmentstring환경 이름
deployment.environmentstring배포 환경
screen.namestring화면/페이지 이름
screen.typestring화면/페이지 타입 (예: "page")
session.idstring사용자 세션 식별자
url.fullstring요청 전체 URL (예: "https://example.com/articles/4?s=1&t1" )
componentstring인스트루멘테이션 컴포넌트 이름
span.typestring스팬 타입 (항상 "log")
levelstring로그 레벨 (예: "INFO", "ERROR", "WARN", "DEBUG")
messagestring콘솔 로그의 실제 메시지 내용

콘솔 로그 레벨

콘솔 계측은 다음과 같은 로그 레벨에 해당하는 다른 유형의 콘솔 메서드를 캡처합니다:

INFO (console.log, console.info)

일반 정보 메시지입니다. 일반적으로 애플리케이션 상태 정보 및 디버깅에 사용됩니다.

WARN (console.warn)

경고 메시지는 애플리케이션 실패를 반드시 초래하지 않는 잠재적인 문제를 나타냅니다.

ERROR (console.error)

오류 메시지는 애플리케이션 기능에 영향을 미칠 수 있는 실패나 예외 상황을 나타냅니다.

DEBUG (console.debug)

상세한 디버깅 정보로, 일반적으로 개발 중이나 상세한 문제 해결 시에만 사용됩니다.

console 계측 데이터 사용

console 계측 데이터는 다음과 같은 목적으로 사용될 수 있습니다:

프로덕션 문제 디버깅

  • 특정 사용자 세션과 관련된 console 오류 추적
  • 특정 브라우저나 환경에서 발생하는 오류 패턴 식별
  • 오류의 맥락을 이해하기 위해 사용자 상호작용과 console 로그 연관

애플리케이션 모니터링

  • console 오류의 빈도를 애플리케이션 안정성의 메트릭으로 모니터링
  • 중요 오류나 오류 패턴에 대한 경고 설정
  • 다른 애플리케이션 버전 간의 오류율 추적

사용자 경험 분석

  • 사용자 경험에 영향을 미칠 수 있는 클라이언트 사이드 오류 식별
  • 사용자 경험에 미치는 영향을 이해하기 위해 성능 메트릭과 console 로그 연관
  • 사용자 세그먼트나 지리적 지역별 오류 패턴 분석

console 로깅 최선의 관행

console 계측을 효과적으로 활용하기 위해:

  1. 적절한 로그 레벨 사용 - console.error는 실제 오류에만 사용하고, console.warn은 잠재적인 문제에 사용하며, console.log/info는 정보 메시지에 사용

  2. 문맥 정보 포함 - 로그 메시지에는 문제를 이해하기에 충분한 문맥 정보를 포함시켜야 함

  3. 구조화된 로그 메시지 - 로그 메시지를 일관된 형식으로 작성하여 파싱과 분석을 용이하게 함

  4. 민감한 데이터 피하기 - 절대 사용자 정보나 자격 증명을 로깅하지 않음

  5. 속도 제한 - Telemetry 시스템을 압도하지 않도록 console 로그에 대한 속도 제한 구현을 고려

보안 및 개인정보 고려사항

console 로그에는 민감한 정보가 포함될 수 있습니다. IMQA 모니터링 시스템은 적절한 데이터 정제 및 접근 제어를 구현하여 console 로그 데이터가 안전하게 처리되고 관련 데이터 보호 규정을 준수하도록 해야 합니다.

사용 방법

이 스키마는 IMQA 모니터링 시스템으로 Telemetry 데이터를 처리하고 저장하기 전에 콘솔 Telemetry 데이터를 검증하는 데 사용됩니다. 프로덕션 환경에서 애플리케이션의 동작을 모니터링하고 디버깅하는 데 도움이 되는 중요한 정보를 제공합니다.

계측 설정

(boolean 또는 IMQAConsoleInstrumentationConfig, 선택)

콘솔 계측을 활성화하거나 비활성화합니다. true로 설정하면 기본 콘솔 계측이 활성화됩니다. IMQAConsoleInstrumentationConfig 객체를 제공하여 콘솔 계측의 세부 설정을 커스터마이즈할 수 있습니다.

Important순환객체 주의

이 기능을 활성화할 경우 console의 정보를 계측하기 위해 JSON.stringify()를 통해 직렬화됩니다. 만약 순환 객체가 포함되어 있다면, 이 직렬화 과정에서 순환 참조가 발생할 수 있습니다. 따라서, 이 옵션을 활성화 할 경우 순환 참조가 포함된 객체를 로깅할 경우 주의가 필요합니다.

interface IMQAConsoleInstrumentationConfig
  extends InstrumentationConfig {
  betaMode: boolean;
  loggerOptions: LoggerOptions;
  contextManager?: MutableAsyncLocalStorageContextManager;
}
  • betaMode: 콘솔 계측의 베타 모드를 활성화합니다. 기본값은 false입니다.
  • loggerOptions: 콘솔 계측의 로거 옵션을 설정합니다. LoggerOptions 인터페이스를 사용하여 세부 설정을 지정할 수 있습니다.
  • contextManagerMutableAsyncLocalStorageContextManager를 사용하여 비동기 컨텍스트를 관리합니다. 이 매니저는 콘솔 계측의 컨텍스트를 유지하는 데 사용됩니다. AsyncHooksContextManager 참조