설정

Sophonz Node.js SDK 설정 레퍼런스 — init()/initSDK()의 SDKConfig 옵션과 SOPHONZ_* / OTEL_* 환경 변수.

SDK는 init() / initSDK()에 전달하는 SDKConfig 옵션 또는 환경 변수로 설정합니다. 옵션이 항상 환경 변수보다 우선하며, 환경 변수는 폴백입니다(그리고 프리로드 바이너리를 설정하는 유일한 방법입니다).

init() vs initSDK()

import { init, initSDK } from '@sophonz/node-sdk';
  • init(config?) — 권장 진입점. Sophonz 기본값(consoleCapture: true, experimentalExceptionCapture: true, sentryIntegrationEnabled: true, programmaticImports: true)을 적용하고 그 위에 사용자 설정을 병합합니다.
  • initSDK(config) — 저수준. 아래 옵션별 기본값만 적용하며 추가적인 동작은 켜지 않습니다. 완전한 제어가 필요할 때 사용하세요.

NOTE — programmaticImports

init()programmaticImports를 켜서 sdk.start() 이후 계측을 재패치합니다. 모듈이 이미 import된 상태(번들러나 TypeScript 트랜스파일에서 흔함)에서도 자동 계측이 동작하게 해 줍니다. initSDK()는 직접 설정하지 않는 한 꺼져 있습니다.

SDKConfig 옵션

핵심

옵션타입기본값설명
servicestringOTEL_SERVICE_NAME 또는 자동 감지모든 텔레메트리에 보고되는 앱 이름(service.name).
apiKeystringSOPHONZ_API_KEY컬렉터에 Authorization 헤더로 전송되는 API 키.

캡처 토글

옵션타입기본값설명
consoleCapturebooleantrueconsole.*를 계측해 로그로 전달. OTEL_LOG_LEVEL=debug이면 자동 비활성화.
experimentalExceptionCapturebooleanfalse*처리되지 않은 예외와 reject 캡처.
sentryIntegrationEnabledbooleanfalse*Sentry SDK 통합 활성화.
advancedNetworkCapturebooleanfalseHTTP 요청/응답 헤더 캡처(OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_*로 구성).

NOTE — * init()과 initSDK()의 기본값 차이

experimentalExceptionCapturesentryIntegrationEnabledinitSDK()에서 false가 기본이지만 init()은 이를 활성화합니다. 표의 값은 initSDK() 기준 기본값입니다.

시그널 토글

옵션타입기본값설명
disableTracingbooleanfalse트레이스 전송 비활성화.
disableLogsbooleanfalse로그 전송 비활성화.
disableMetricsbooleanfalse메트릭 전송 비활성화.
detectResourcesbooleantrue리소스 속성(호스트, 프로세스, 클라우드 등) 자동 감지.

라이프사이클 & 진단

옵션타입기본값설명
stopOnTerminationSignalsbooleantrueSIGTERM / SIGINT 시 플러시 후 종료. 직접 종료를 관리하려면 false.
disableStartupLogsbooleanfalse시작 스피너와 대시보드 링크 숨김.
enableInternalProfilingbooleanfalse각 계측의 패치 소요 시간 로깅.

고급 / 확장

옵션타입기본값설명
instrumentationsInstrumentationConfigMap{}특정 자동 계측을 재정의하거나 비활성화.
additionalInstrumentationsInstrumentationBase[][]사용자 정의 계측 등록.
metricReaderMetricReaderSophonz 기본값커스텀 메트릭 리더 지정.
programmaticImportsbooleanfalse (init()에서는 true)시작 후 계측을 재패치해 이미 import된 모듈도 계측.

예시

import { initSDK } from '@sophonz/node-sdk';
 
initSDK({
  service: 'checkout-api',
  apiKey: process.env.SOPHONZ_API_KEY,
  consoleCapture: true,
  experimentalExceptionCapture: true,
  advancedNetworkCapture: true,
  disableMetrics: false,
  instrumentations: {
    // 노이즈가 많은 자동 계측 비활성화
    '@opentelemetry/instrumentation-fs': { enabled: false },
  },
});

데이터베이스 쿼리 트레이싱

pgmysql2는 기본 자동 계측 대상이므로 쿼리 스팬은 별도 설정 없이 생성됩니다. 다만 그 스팬은 애플리케이션이 관측한 범위까지만 담습니다. 데이터베이스 내부의 실행계획까지 같은 트레이스로 이으려면 쿼리에 W3C traceparent를 실어 보내야 하며, 이를 담당하는 SQLCommenter는 기본값으로 비활성화되어 있습니다.

init({
  service: 'checkout-api',
  apiKey: process.env.SOPHONZ_API_KEY,
  instrumentations: {
    '@opentelemetry/instrumentation-pg': {
      addSqlCommenterCommentToQueries: true,
    },
  },
});

활성화하면 모든 문장 끝에 트레이스 컨텍스트가 주석으로 붙습니다.

SELECT id, email FROM users WHERE id = $1; /*traceparent='00-d4cda95b652f4a1592b449d5929fda1b-6e0c63257de34c92-01'*/

지원 여부는 계측마다 다릅니다.

계측SQLCommenter
@opentelemetry/instrumentation-pg지원
@opentelemetry/instrumentation-mysql2지원
@opentelemetry/instrumentation-mysql미지원

데이터베이스가 이 주석을 읽어 서버 측 스팬을 생성하려면 PostgreSQL에 pg_tracing 확장이 필요합니다. 자체 운영 PostgreSQL을 참고하세요. 확장이 없는 환경에서도 주석은 데이터베이스 로그에 기록되므로, 이후 로그와 트레이스를 결합하는 근거가 됩니다.

CAUTION — 이름 있는 프리페어드 스테이트먼트

주석에 들어가는 트레이스 ID가 쿼리마다 달라 문장 텍스트도 매번 달라집니다. 문장에 이름을 붙여 재사용하는 구성에서는 캐시 효율이 떨어질 수 있습니다. 이름 없는 문장을 사용하는 구성에서는 해당하지 않습니다.

환경 변수

Sophonz 전용

변수기본값설명
SOPHONZ_API_KEY컬렉터용 API 키.
SOPHONZ_NODE_CONSOLE_CAPTUREtrue콘솔 캡처 활성화.
SOPHONZ_NODE_ADVANCED_NETWORK_CAPTUREfalseHTTP 헤더 캡처.
SOPHONZ_NODE_EXPERIMENTAL_EXCEPTION_CAPTUREfalse처리되지 않은 예외 캡처.
SOPHONZ_NODE_SENTRY_INTEGRATION_ENABLEDfalseSentry 통합 활성화.
SOPHONZ_NODE_STOP_ON_TERMINATION_SIGNALStrueSIGTERM / SIGINT 시 플러시.
SOPHONZ_NODE_BETA_MODEfalse베타 기능 활성화(전역 컨텍스트 전파, 커스텀 로그 메타데이터).
SOPHONZ_NODE_ENABLE_INTERNAL_PROFILINGfalse계측 패치 시간 프로파일링.
SOPHONZ_STARTUP_LOGStrue시작 배너와 대시보드 링크 표시.

OpenTelemetry

변수기본값설명
OTEL_SERVICE_NAME자동 감지앱 이름.
OTEL_EXPORTER_OTLP_ENDPOINThttps://in.sophonz.aiOTLP 기본 엔드포인트(traces/logs/metrics 경로가 여기서 파생).
OTEL_EXPORTER_OTLP_TRACES_ENDPOINThttps://in.sophonz.ai/v1/traces트레이스 전송 엔드포인트.
OTEL_EXPORTER_OTLP_HEADERS추가 OTLP 헤더(API 키가 Authorization으로 덧붙음).
OTEL_TRACES_SAMPLERparentbased_always_on트레이스 샘플러.
OTEL_TRACES_SAMPLER_ARG1샘플러 인자.
OTEL_LOG_LEVELSDK 진단 로그 레벨(debug이면 콘솔 캡처 비활성화).
OTEL_LOGS_EXPORTER / OTEL_TRACES_EXPORTER / OTEL_METRICS_EXPORTERnone으로 설정하면 해당 시그널 비활성화.

TIP — 우선순위

disableLogs / disableTracing / disableMetrics 옵션이나 대응하는 OTEL_*_EXPORTER=none 모두 시그널을 끕니다. 둘 다 존재하면 명시적 SDKConfig 옵션이 우선합니다.