피드로 돌아가기
Dev.toDevOps
원문 읽기
Cron job 9개가 실패했다고 보고되었으나 실제 실행은 모두 성공적이었으며, Slack 알림 전송 실패를 job 실패와 분리하여 거짓 알림을 제거한 사례
How to Separate Delivery Failures from Execution Failures in Cron Jobs
AI 요약
Context
43개 Cron job을 운영하는 환경에서 9개 job이 Message failed 오류를 보고했다. 모든 job의 실제 작업은 완료되었으나 알림 전송 단계에서 실패가 발생했다. 대부분의 cron 스케줄러는 최종 단계의 결과를 job 상태로 보고하여 delivery failure와 execution failure를 혼동하는 문제가 있었다.
Technical Solution
- Cron job 모니터링을 Execution, Artifact, Delivery 3개의 독립적 layer로 분해한다
- Layer 1 (Execution)은 job 실행 여부와 종료 코드를 기록하며 실패 시 즉시 alerting하고 재실행 고려한다
- Layer 2 (Artifact)는 예상 출력 파일 존재 여부를 확인하며 실패 시 로그inspectiong한다
- Layer 3 (Delivery)는 HTTP webhook 호출 결과를 별도 로그에 기록하며 job 실패로 처리하지 않고 delivery만 재시도한다
- 각 layer 실패 시 재실행 기준을 다르게 설정하여 불필요한 resource 낭비를 방지한다
Impact
Daily failed job 수가 9개에서 0개로 감소했으며, 3주간 인지되지 못한 Slack 인프라 문제를 별도로 분리하여 감지할 수 있게 되었다.
Key Takeaway
failure를 단일 상태로 취급하지 말고 execution, artifact, delivery로 분해하면 거짓 알림을 제거하고 실제 인프라 문제를 정확히 격리할 수 있다.
실천 포인트
Cron job 모니터링 환경에서 delivery failure와 execution failure를 각각의 독립적 layer로 분리하여 로깅하면 불필요한 재실행과 거짓 알림을 제거할 수 있다