분류 전체보기
-
[Airflow] Airflow DAG runs 개수 주기적으로 삭제하기Airflow 2023. 8. 1. 00:06
Airflow 각 DAG의 Runs 기록을 보면 매일 DAG run 개수가 누적되어 쌓이고 있었다. Airflow.cfg 내부 설정에서 개수 제한 관련 설정이 있는지 찾아봤지만, 딱히 찾지 못해서 자체 삭제 스크립트를 개발하기로 했다. 주기를 설정하여 특정 날짜만큼의 run 개수만 유지하도록 하는 로직으로 매일 배치 스케줄을 걸어 해당 주기 이전의 데이터는 삭제하도록 했다. 이렇게 하면 log 저장에 따른 DB 용량 과부하를 관리할 수 있을 것으로 예상. 1. 필요한 모듈 import from airflow import DAG, settings from airflow.models import DagRun from airflow.operators.python import PythonOperator fro..
-
[DB] RDS postgres DB 백업 및 복원하기(feat. pg_dump)DataBase 2023. 7. 17. 23:18
*RDS를 사용하게 된 계기: RDS는 이번에 airflow를 컨테이너에 올리면서 처음 사용해 보았습니다. ECS에서 airflow db용으로 mysql을 컨테이너로 띄웠다가, 컨테이너 서비스가 죽으면서 데이터를 다 날려먹은 멘붕😱의 사건을 겪고.. db는 절대 컨테이너로 띄우지 말자!는 교훈과 함께 다른 db 활용 방안에 대해 폭풍 리서치에 돌입했습니다. 그 중 AWS에서 DB를 대신 관리해주는 RDS가 대안책이 될 수 있다는 결론을 내렸고, 회사 내 다른 부서에서도 잘 사용하고 계시고 또 사용을 권장하셔서 RDS 테스트를 시작했습니다. 기존에는 airflow용 db로 mysql을 사용했지만, 공식문서에서 pg를 권장하기에 RDS에서는 pg를 사용했습니다. * RDS 설정 시 challenge한 요소..
-
Airflow on ECS 파이프라인 구축기프로젝트 회고록 2023. 7. 10. 23:38
기존 ec2 기반의 airflow 서비스가 예고 없이 죽어서 멈췄을때,자동으로 다시 서비스가 시작될 수 있도록 컨테이너 서비스로 이전할 필요가 있다는 결론을 내렸습니다. 또한 기존에는 한 대의 ec2 서버에 airflow의 모든 구성 요소들이 다 돌아가고 있었다면,각 컴포넌트를 분리하여 서로의 작업이 각자의 기능에 영향을 끼치지 않도록 ECS에 개별 task를 생성하여 airflow를 멀티클러스터화 하려는 목적에 있었습니다. 처음 시작은 EKS를 활용한 파이프라인 구축을 목표로 했지만,러닝커브를 고려해서 이전에 경험해봤던 ECS를 기반으로 한 파이프라인 구축을 시작했습니다. 이전의 ECS는 추천모델 서빙 용도로만 사용해봤었고,ECS 위에서 airflow를 구축하는건 처음이라 중간 중간 많은 에러를 만났던..
-
Airflow 모니터링 시스템 구축기 Part.2(Feat. prometheus 설치)Monitoring System/Prometheus 2023. 6. 10. 16:14
https://ninano1109.tistory.com/273 Airflow 모니터링 시스템 구축기 Part.1(Feat. exporter 설치)Airflow on ECS 파이프라인을 구축한 후, Airflow 서버와 DB로 사용중인 RDS 서버를 모니터링하기 위한 파이프라인을 아래와 같이 구축했습니다. Airflow와 RDS 각 서비스에서 매트릭을 생성해서 보내주면ninano1109.tistory.com Airflow 모니터링 시스템 구축기 exporter 설치에 이어서 다음으로 Prometheus를 설치했습니다.앞서 말했듯이, prometheus는 pull 방식의 매트릭 수집기입니다. 수집된 매트릭 정보는 용량을 압축하여 시계열 데이터베이스에 저장되며, PromQL 쿼리를 통해 빠르게 조회가 가능합니..
-
Airflow 모니터링 시스템 구축기 Part.1(Feat. exporter 설치)Monitoring System/Exporter 2023. 6. 6. 23:31
Airflow on ECS 파이프라인을 구축한 후,Airflow 서버와 DB로 사용중인 RDS 서버를 모니터링하기 위한 파이프라인을 아래와 같이 구축했습니다. Airflow와 RDS 각 서비스에서 매트릭을 생성해서 보내주면 시계열(time series) DB인 Prometheus가 수집 및 저장하고 이를 최종적으로 시계열 데이터 시각화 도구인 Grafana에서 대시보드로 보여주는 로직입니다. 각 서비스와 Prometheus 사이에는 exporter라는 중간 매개체(?) 서비스가 있는데 이는 2가지 이유에서 존재합니다:1. StatsD는 push 모델 방식으로, Prometheus는 pull 모델 방식으로 작동한다.따라서 중간에서 StatsD가 push하고 Prometheus가 pull할 수 있는 중간..
-
내가 문제를 해결하는 방법(feat. 모든 답은 코드에 있다@_@)개발Tip 2023. 5. 27. 12:43
데이터 엔지니어링 업무에서 갑작스럽게 예기치 않은 에러들을 만났을 때, 문제를 해결하는 방법에 대해 짧게나마 생각을 정리해보려고 한다. 문제상황 case: airflow에서 센서(정확히는 ExternalTaskSensor)로 dependency가 걸려있는 두 개의 dag에서 에러 발생 A DAG -> B DAG의 순서로 돌아야하지만 B가 A가 끝나기도 전에 먼저 돌아감 센서 작동이 잘 안되거나/ 앞 DAG의 task 결과에 따른 dependency가 반영이 안됨 한마디로 스케줄이 꼬여버림 해결방법 고민: 문제를 정확히 파악했으면 어떻게 해결해야할까 잠시 고민 rewind 기법으로 코드를 돌아가보며 머릿속으로 전체 시나리오 시뮬레이션해보기 해결방안 : 코드를 돌아가보니 센서는 가장 최신의 dag_run i..
-
[Airflow] Airflow-StatsD exporter 연동 에러 해결Monitoring System/Exporter 2023. 5. 8. 21:48
airflow metrics를 StatsD에 받아오기 위한 statsd-exporter를 도커로 띄우고 airflow 서버와 연결해주어야 하는데, stastd-exporter metrics UI에서 airflow 메트릭이 확인이 안되는 상황에서의 삽질일기를 공유하고자 합니다. 먼저 결론부터 말씀드리자면, 9125/UDP 열어주기!!!! 1️⃣ statsd-exporter 서버의 security group에서 airflow 서버의 port를 열어주어야 합니다. statsd-exporter security group에 airflow webserver ip 주소(또는 ecs의 경우 airflow target-group sg) 입력 9125(statsD) tcp port로 열어주기 그러나 여전히 아무 반응이 없..
-
[Airflow] Airflow-s3 remote logging 설정 방법Airflow 2023. 3. 31. 22:35
Airlfow DAG 실행 시 발생하는 로그들을 S3에 원격으로 적재하는 방법이 있는데, 이번 글에서는 그 설정 방법에 대해서 얘기해보려고 합니다. 1️⃣ 먼저 아래와 같이 aws-cli 명령어로 s3 connection Id를 생성하여 Airflow에 등록해야 합니다. aws-cli airflow connections add 's3_conn' \ --conn-type 's3' \ --conn-extra '{"region": "ap-northeast-2"}' \ 2️⃣ 이후에 airflow.cfg 파일에도 remote_logging 섹션에 위에서 생성한 connection id와 s3 버킷 정보를 입력합니다. airflow.cfg remote_logging = True remote_log_conn_id ..