설정
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 옵션
핵심
| 옵션 | 타입 | 기본값 | 설명 |
|---|---|---|---|
service | string | OTEL_SERVICE_NAME 또는 자동 감지 | 모든 텔레메트리에 보고되는 앱 이름(service.name). |
apiKey | string | SOPHONZ_API_KEY | 컬렉터에 Authorization 헤더로 전송되는 API 키. |
캡처 토글
| 옵션 | 타입 | 기본값 | 설명 |
|---|---|---|---|
consoleCapture | boolean | true | console.*를 계측해 로그로 전달. OTEL_LOG_LEVEL=debug이면 자동 비활성화. |
experimentalExceptionCapture | boolean | false* | 처리되지 않은 예외와 reject 캡처. |
sentryIntegrationEnabled | boolean | false* | Sentry SDK 통합 활성화. |
advancedNetworkCapture | boolean | false | HTTP 요청/응답 헤더 캡처(OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_*로 구성). |
NOTE — * init()과 initSDK()의 기본값 차이
experimentalExceptionCapture와 sentryIntegrationEnabled는 initSDK()에서 false가 기본이지만 init()은 이를 활성화합니다. 표의 값은 initSDK() 기준 기본값입니다.
시그널 토글
| 옵션 | 타입 | 기본값 | 설명 |
|---|---|---|---|
disableTracing | boolean | false | 트레이스 전송 비활성화. |
disableLogs | boolean | false | 로그 전송 비활성화. |
disableMetrics | boolean | false | 메트릭 전송 비활성화. |
detectResources | boolean | true | 리소스 속성(호스트, 프로세스, 클라우드 등) 자동 감지. |
라이프사이클 & 진단
| 옵션 | 타입 | 기본값 | 설명 |
|---|---|---|---|
stopOnTerminationSignals | boolean | true | SIGTERM / SIGINT 시 플러시 후 종료. 직접 종료를 관리하려면 false. |
disableStartupLogs | boolean | false | 시작 스피너와 대시보드 링크 숨김. |
enableInternalProfiling | boolean | false | 각 계측의 패치 소요 시간 로깅. |
고급 / 확장
| 옵션 | 타입 | 기본값 | 설명 |
|---|---|---|---|
instrumentations | InstrumentationConfigMap | {} | 특정 자동 계측을 재정의하거나 비활성화. |
additionalInstrumentations | InstrumentationBase[] | [] | 사용자 정의 계측 등록. |
metricReader | MetricReader | Sophonz 기본값 | 커스텀 메트릭 리더 지정. |
programmaticImports | boolean | false (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_CAPTURE | true | 콘솔 캡처 활성화. |
SOPHONZ_NODE_ADVANCED_NETWORK_CAPTURE | false | HTTP 헤더 캡처. |
SOPHONZ_NODE_EXPERIMENTAL_EXCEPTION_CAPTURE | false | 처리되지 않은 예외 캡처. |
SOPHONZ_NODE_SENTRY_INTEGRATION_ENABLED | false | Sentry 통합 활성화. |
SOPHONZ_NODE_STOP_ON_TERMINATION_SIGNALS | true | SIGTERM / SIGINT 시 플러시. |
SOPHONZ_NODE_BETA_MODE | false | 베타 기능 활성화(전역 컨텍스트 전파, 커스텀 로그 메타데이터). |
SOPHONZ_NODE_ENABLE_INTERNAL_PROFILING | false | 계측 패치 시간 프로파일링. |
SOPHONZ_STARTUP_LOGS | true | 시작 배너와 대시보드 링크 표시. |
OpenTelemetry
| 변수 | 기본값 | 설명 |
|---|---|---|
OTEL_SERVICE_NAME | 자동 감지 | 앱 이름. |
OTEL_EXPORTER_OTLP_ENDPOINT | https://in.sophonz.ai | OTLP 기본 엔드포인트(traces/logs/metrics 경로가 여기서 파생). |
OTEL_EXPORTER_OTLP_TRACES_ENDPOINT | https://in.sophonz.ai/v1/traces | 트레이스 전송 엔드포인트. |
OTEL_EXPORTER_OTLP_HEADERS | — | 추가 OTLP 헤더(API 키가 Authorization으로 덧붙음). |
OTEL_TRACES_SAMPLER | parentbased_always_on | 트레이스 샘플러. |
OTEL_TRACES_SAMPLER_ARG | 1 | 샘플러 인자. |
OTEL_LOG_LEVEL | — | SDK 진단 로그 레벨(debug이면 콘솔 캡처 비활성화). |
OTEL_LOGS_EXPORTER / OTEL_TRACES_EXPORTER / OTEL_METRICS_EXPORTER | — | none으로 설정하면 해당 시그널 비활성화. |
TIP — 우선순위
disableLogs / disableTracing / disableMetrics 옵션이나 대응하는 OTEL_*_EXPORTER=none 모두 시그널을 끕니다. 둘 다 존재하면 명시적 SDKConfig 옵션이 우선합니다.