ES /docs

ChildProcessManager::setupEventHandlers | Child process stderr: sentry initialization failed.

RCA: ChildProcessManager::setupEventHandlers | Child process stderr: sentry initialization failed.

Error Log#

Datadog Logs

text
ChildProcessManager::setupEventHandlers | Child process stderr: sentry initialization failed.

Impact#

  • Service: cupixworks-any-mesh-agent
  • Team: updatedemo
  • 발생 횟수: 49
  • 최초 발생: 2026-04-06T09:13:07.963Z
  • 최근 발생: 2026-04-07T09:59:34.174Z

Root Cause Summary#

cupix-tesla-mesh-agent의 child process가 @cupix-compute/forge_bimmodel_extractor native C++ addon을 로드할 때, 이 addon 내부에서 Sentry SDK 초기화를 시도하지만 필요한 환경 변수(SENTRY_DSN 등)가 컨테이너에 설정되어 있지 않아 "sentry initialization failed" 메시지가 stderr로 출력됩니다. ChildProcessManagerstdioMode: 'pipe' 모드로 child process의 stderr를 캡처하고 있어, 이 stderr 출력이 logger.error()로 기록되어 Datadog에 error 레벨 로그로 수집됩니다. 이 에러는 non-fatal이며, Sentry 초기화 실패 후에도 mesh extraction 작업은 정상적으로 완료됩니다.

Technical Analysis#

Code Path#

  • Entry point: packages/cupix-tesla-mesh-agent/src/mesh-service.ts:54-57 - MeshExtractManagerstdioMode: 'pipe'로 생성
  • packages/cupix-tesla-mesh-agent/src/manager/mesh-extract.manager.ts:38 - ChildProcessManagerprocess/mesh-extractor.process 스크립트 경로 전달
  • packages/base/src/manager/child-process.manager.ts:74 - fork()으로 child process 생성
  • packages/base/src/manager/child-process.manager.ts:138-141 - stderr 리스너가 모든 stderr 출력을 logger.error()로 기록
  • packages/cupix-tesla-mesh-agent/src/process/mesh-extractor.process.ts:18 - child process에서 @cupix-compute/forge_bimmodel_extractor native addon require()
  • Failure point: native addon 내부의 Sentry 초기화 코드 (외부 패키지, 소스 미확인)

MeshService에서 child process를 stdioMode: 'pipe'로 생성합니다:

typescript
// packages/cupix-tesla-mesh-agent/src/mesh-service.ts:54-57
this._meshExtractManager = new MeshExtractManager({
    stdioMode: 'pipe',
    executeTimeoutMs: Environment.CPX_EXTRACTOR_TIMEOUT,
});

ChildProcessManager는 pipe 모드에서 stderr의 모든 출력을 error 레벨로 로깅합니다:

typescript
// packages/base/src/manager/child-process.manager.ts:138-141
this.process.stderr?.on('data', (data: Buffer) => {
    const text = data.toString();
    logger.error(`ChildProcessManager::setupEventHandlers | Child process stderr: ${text}`);
});

Child process에서 native addon을 로드할 때 Sentry 초기화가 실패합니다:

typescript
// packages/cupix-tesla-mesh-agent/src/process/mesh-extractor.process.ts:17-25
// eslint-disable-next-line @typescript-eslint/no-require-imports
const BIM_MODEL_EXTRACTOR = require('@cupix-compute/forge_bimmodel_extractor') as {
    extract_bimmodel: new () => {
        setServer: (server: string | undefined) => void;
        setModelUrn: (urn: string) => void;
        setOutputDirpath: (path: string) => void;
        process: () => boolean;
    };
};

기대 동작: stderr 출력은 심각한 에러만 포함해야 하며, non-fatal 경고는 error 레벨로 기록되지 않아야 합니다.

실제 동작: native addon의 Sentry 초기화 실패 메시지(non-fatal)가 stderr로 출력되고, ChildProcessManager가 이를 무차별적으로 logger.error()로 기록하여 모든 child process 시작 시 false positive error 로그가 생성됩니다.

Log Evidence#

검색 쿼리:

text
service:cupixworks-any-mesh-agent status:error "sentry initialization failed"

매 child process 시작마다 "sentry initialization failed"와 함께 AWS SDK v2 deprecation 경고도 동시에 stderr로 출력됩니다:

json
{
  "timestamp": "2026-04-07T10:29:32.881Z",
  "status": "error",
  "message": "ChildProcessManager::setupEventHandlers | Child process stderr: sentry initialization failed.",
  "attributes": {
    "bim": { "id": 18902 },
    "team": { "domain": "updatedemo", "id": 643 },
    "user": { "id": 3555, "email": "chris.choi@cupix.com" },
    "session": { "id": "b6da3828ebb9acda74b3bd153541c918f27c5242" },
    "environment": "production",
    "region": "us-west-2"
  }
}

동일 시간대 AWS SDK v2 deprecation warning도 stderr로 캡처됨:

text
ChildProcessManager::setupEventHandlers | Child process stderr: (node:50) NOTE: The AWS SDK for JavaScript (v2) will enter maintenance mode
on September 8, 2024 and reach end-of-support on September 8, 2025.

Sentry 에러에도 불구하고 mesh extraction은 정상 완료됨 (bim 18905 추적):

text
[18:59:32] BaseService::runByMessage | id: 18905           # 작업 시작
[18:59:34] ChildProcessManager::setupEventHandlers | Child process stderr: sentry initialization failed.  # Sentry 실패
[19:03:47] CPBim::fromMeshExtractor | filepaths count: 16  # extraction 성공 (16개 파일)
[19:04:27] AwsS3Manager::uploadFileStreamToS3 | begin      # S3 업로드 시작
[19:05:08] BaseService::cleanUpAnythingRelatedModel | path: /tmp/workspace/18905  # 정상 완료

이 패턴은 49건 모두에서 동일합니다. 에러 발생 후에도 extraction, archive, upload, cleanup 단계가 모두 정상 수행됩니다.

추가로, 간헐적 "Offset out of bounds" 경고도 stderr로 캡처되고 있습니다:

text
ChildProcessManager::setupEventHandlers | Child process stderr: Warning: Offset out of bounds (offset: 3365934080, buffer size: 551680)

Fix Recommendation#

즉시 조치 (Critical)#

  • packages/base/src/manager/child-process.manager.ts:138-141의 stderr 핸들러에서 로그 레벨을 분류해야 합니다.
  • stderr 출력을 무조건 logger.error()로 기록하는 대신, 메시지 내용에 따라 logger.warn()logger.error()를 구분하는 방식을 적용합니다.
  • "sentry initialization failed", "AWS SDK for JavaScript (v2) will enter maintenance mode", "Warning:" 등 알려진 non-fatal 메시지는 logger.warn()으로 처리합니다.

단기 개선 (1주 이내)#

  • @cupix-compute/forge_bimmodel_extractor 패키지의 Sentry 초기화 로직을 점검합니다. 컨테이너 환경에서 SENTRY_DSN 환경 변수가 제공되지 않는 경우 graceful하게 skip하도록 패키지를 업데이트하거나, 환경 변수를 추가 설정합니다.
  • AWS SDK v2 → v3 마이그레이션 계획을 수립합니다 (2025년 9월 지원 종료 예정).

장기 개선 (재발 방지)#

  • child process의 stderr 출력을 structured logging으로 전환하는 것을 검토합니다. child process 내부에서 stderr로 직접 출력하는 대신, IPC 메시지를 통해 로그 레벨 정보를 포함하여 parent process에 전달하는 패턴을 적용합니다 (현재 BaseProcesslog()/logError() 메서드가 이미 이 패턴을 지원).

Monitoring#

  • 현재 알림 수준 변경 후 에러 감소를 확인하는 쿼리:
text
service:cupixworks-any-mesh-agent status:error "ChildProcessManager::setupEventHandlers"
  • Sentry 초기화 실패를 warn으로 분리한 후 실제 child process 에러만 추적하는 쿼리:
text
service:cupixworks-any-mesh-agent status:error "ChildProcessManager" -"sentry initialization failed" -"AWS SDK for JavaScript" -"Warning:"

Risk Assessment#

  • Risk level: low
  • 예상 복잡도: trivial
  • 비고: 이 에러는 순수한 로그 노이즈이며, mesh extraction 기능에는 영향이 없습니다. child process의 Sentry 초기화 실패는 non-fatal이고, 모든 extraction 작업은 정상 완료되고 있습니다.