피드로 돌아가기
Why your Sentry events never reach your serverless functions
Dev.toDev.to
Infrastructure

Sentry.flush(2000) 도입을 통한 Serverless 환경의 허위 Timeout 알람 제거

Why your Sentry events never reach your serverless functions

Michel Faure2026년 5월 10일5intermediate

Context

Vercel Lambda 환경에서 Sentry.withMonitor를 사용한 Cron 작업 모니터링 중, 실제 작업은 성공했으나 Sentry 상에서는 Timeout으로 표시되는 False Positive 발생. HTTP 응답 직후 런타임이 즉시 Freeze되어 비동기 방식으로 동작하는 Sentry의 in-memory buffer가 전송되지 못한 채 소멸하는 구조적 한계에 기인함.

Technical Solution

  • finally 블록 내 await Sentry.flush(2000)를 강제하여 Lambda 종료 전 버퍼 내 모든 이벤트를 ingest endpoint로 전송하는 동기화 지점 설계
  • Sentry 연결 실패가 비즈니스 로직에 영향을 주지 않도록 flush 호출부를 별도의 try-catch로 감싸 관측 가능성과 서비스 가용성을 분리
  • Vercel의 maxDuration을 Sentry의 maxRuntime보다 짧게 설정하여 SIGTERM 발생 전 finally 구문이 반드시 실행되도록 제어
  • 외부 API 요청 시 AbortSignal.timeout(8000)을 적용하여 런타임 타임아웃 전 Sentry 전송 시간을 확보하는 방어적 설계 도입

- Serverless 함수 내 비동기 Transport 라이브러리 사용 시 반환 전 명시적 Flush 호출 여부 확인 - 런타임 강제 종료(SIGTERM) 시나리오를 고려하여 인프라 타임아웃과 애플리케이션 타임아웃 간의 계층적 시간 설계 적용 - Observability 도구의 알람이 실제 데이터베이스 상태와 일치하는지 교차 검증하는 Runtime Test 수행

원문 읽기