피드로 돌아가기
Pourquoi tes events Sentry n'arrivent jamais dans tes fonctions serverless
Dev.toDev.to
Infrastructure

Sentry.flush(2000) 도입을 통한 Serverless 환경의 False Positive 알람 해결

Pourquoi tes events Sentry n'arrivent jamais dans tes fonctions serverless

Michel Faure2026년 5월 10일5intermediate

Context

Vercel Lambda 환경에서 Sentry.withMonitor를 활용한 Cron Job 모니터링 구축 중 발생한 데이터 불일치 문제임. Lambda 런타임이 HTTP 응답 직후 Worker를 즉시 Freeze 하여, 비동기 Buffer에 저장된 Sentry 이벤트가 전송되지 못하고 소실되는 현상이 발생함.

Technical Solution

  • finally 블록 내 await Sentry.flush(2000) 배치를 통한 강제 이벤트 전송 보장
  • Sentry 전송 실패가 메인 비즈니스 로직에 영향을 주지 않도록 try-catch로 Flush 로직을 격리한 관찰자 패턴 적용
  • Lambda의 maxDuration을 Sentry의 maxRuntime보다 낮게 설정하여 SIGTERM 전 finally 구문 실행 시간 확보
  • 외부 API 호출 시 AbortSignal.timeout을 설정하여 런타임 강제 종료 전 Flush 단계 진입을 보장하는 타임아웃 전략 수립
  • 비동기 전송 모델의 한계를 극복하기 위해 Event-driven 전송을 Synchronous 대기 모델로 전환

- Serverless 환경에서 비동기 SDK 사용 시 응답 반환 전 Flush 함수 호출 여부 확인 - 인프라 레벨의 Timeout 설정값과 모니터링 도구의 Timeout 설정값 간의 위계 정립 - Observability 도구의 장애가 서비스 가용성에 영향을 주지 않도록 Error Boundary 설정 - 런타임 특성(Freeze/Thaw)을 고려한 비동기 작업의 Lifecycle 관리

원문 읽기