ChildProcessManager::setupEventHandlers | Child process stderr: sentry initialization failed.
RCA: ChildProcessManager::setupEventHandlers | Child process stderr: sentry initialization failed.
Error Log#
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로 출력됩니다. ChildProcessManager가 stdioMode: '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-MeshExtractManager를stdioMode: 'pipe'로 생성 packages/cupix-tesla-mesh-agent/src/manager/mesh-extract.manager.ts:38-ChildProcessManager에process/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_extractornative addonrequire()- Failure point: native addon 내부의 Sentry 초기화 코드 (외부 패키지, 소스 미확인)
MeshService에서 child process를 stdioMode: 'pipe'로 생성합니다:
// 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 레벨로 로깅합니다:
// 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 초기화가 실패합니다:
// 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#
검색 쿼리:
service:cupixworks-any-mesh-agent status:error "sentry initialization failed"
매 child process 시작마다 "sentry initialization failed"와 함께 AWS SDK v2 deprecation 경고도 동시에 stderr로 출력됩니다:
{
"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로 캡처됨:
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 추적):
[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로 캡처되고 있습니다:
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에 전달하는 패턴을 적용합니다 (현재
BaseProcess의log()/logError()메서드가 이미 이 패턴을 지원).
Monitoring#
- 현재 알림 수준 변경 후 에러 감소를 확인하는 쿼리:
service:cupixworks-any-mesh-agent status:error "ChildProcessManager::setupEventHandlers"
- Sentry 초기화 실패를 warn으로 분리한 후 실제 child process 에러만 추적하는 쿼리:
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 작업은 정상 완료되고 있습니다.