설정

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()의 기본값 차이

experimentalExceptionCapture와 sentryIntegrationEnabled는 initSDK()에서 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 },
  },
});

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

pg와 mysql2는 기본 자동 계측 대상이므로 쿼리 스팬은 별도 설정 없이 생성됩니다. 다만 그 스팬은 애플리케이션이 관측한 범위까지만 담습니다. 데이터베이스 내부의 실행계획까지 같은 트레이스로 이으려면 쿼리에 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_LEVEL—SDK 진단 로그 레벨(debug이면 콘솔 캡처 비활성화).
OTEL_LOGS_EXPORTER / OTEL_TRACES_EXPORTER / OTEL_METRICS_EXPORTER—none으로 설정하면 해당 시그널 비활성화.

TIP — 우선순위

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