Search

[Airflow 운영 안정화] DMS 모니터링 DAG 실패 알람 노이즈 줄이기

제목
작성일
현재 Airflow 약 50개의 DAG를 운영하고 있다. 모든 DAG task 실패시 failure 콜백으로 슬랙 알람을 발송하게 설정해두었는데, 입사 이후 3개월 지켜보면서 특히 자주 오는 실패 알람이 있다는 것을 알게됐다.
알람이 잦다보니 실제 중요한 장애 알람이 묻히는 상황이 생길 것 같았다. 이를 해결하기 위해 자주 생기는 실패케이스와 개선사항을 정리하고 하나씩 적용하는 중이다.
이번 글을 시작으로 트러블슈팅 작업들을 하나씩 정리해보려 한다.

개요

DMS 가 정상적으로 동작하고 있는지 확인하기 위해 매시간 소스 DB와 타겟 DB의 Row 비교 & 스키마 변경 감지하는 DAG
모니터링 중인 DMS task는 세개로 테이블 분배는 도메인과 log 테이블 단위로 분류
DAG 실행 순서
DMS 에러 체크 → (task1 → task2 → task3) Rows 비교 → 스키마 변경 비교

문제 및 해결

해당 DAG이 매시간 실행되서 실패 알람 또한 잦았음 (fail task 월 평균 25건)

1) DAG Run 타임아웃

원인
dagrun_timeout=210s로 너무 짧아, 체인 실행하다보면 시간 초과로 런이 중간에 종료(SIGTERM)
개선
DB 부하 방지를 위해 전체적으로 짧은 타임아웃을 잡은것으로 파악됨
하지만 slow query 방지용으로 rows 비교 task에는 이미 1분 타임아웃이 있음
task 다섯개가 직렬 실행인데 타임아웃이 너무 짧아서 정상동작 하다가도 종료되어버리는 로그가 반복적으로 나타남
DAG 전체 타임아웃을 600s로 상향 조정

2) 스키마 변경 체크 Task 연쇄 실패

원인
앞선 문제 때문에 DAG 중도 종료시 뒷 순서인 스키마 변경 체크 task 실행 되지 않음
다음 회차에서 이전 스냅샷을 읽어야 하는데 존재하지 않아 연쇄적으로 실패 발생
중도 종료시 다음 task 실패 패턴
개선
트리거 룰 변경: successall_done
이 task는 앞과 의존성이 없기 때문에, 앞 태스크 실패해도 스키마 스냅샷은 항상 실행하도록 수정
더불어 S3에서 이전 스냅샷 키 존재 여부 확인 후 없으면 스킵하는 로직 추가

성과

한달 평균 25번 실패 알람 > 9월 개선 배포 이후 0건
알람 노이즈가 줄어들어 실제 장애 대응에 집중할 수 있는 환경 확보