전체 글
-
Airflow on ECS 파이프라인 구축기프로젝트 회고록 2023. 7. 10. 23:38
기존 ec2 기반의 airflow 서비스가 예고 없이 죽어서 멈췄을때, 자동으로 다시 서비스가 시작될 수 있도록 컨테이너 서비스로 이전할 필요가 있다는 결론을 내렸습니다. 또한 기존에는 한 대의 ec2 서버에 airflow의 모든 구성 요소들이 다 돌아가고 있었다면, 각 서비스들을 분리하여 서로의 작업이 각자의 기능에 영향을 끼치지 않도록 ECS상에서 개별 서비스용 컨테이너를 생성하여 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 ..
-
[MySQL] docker 컨테이너 mysql 서버 error(feat. port 추가하기)DataBase/MySQL 2023. 3. 22. 23:05
docker mysql 이미지 빌드 후 컨테이너를 run하면, docker run -it image_id bash mysql 접속 시 아래와 같이 mysql이 실행되지 못하는 에러 발생 Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) docker 프로세스를 확인해보면 port가 없는 것 확인 해결방안: 1. port를 추가하여 컨테이너 run 2. docker run {이미지} 실행 후 docker exec로 컨테이너 접속 - 이상 오늘의 삽질일기 끝! 여기저기 삽질도 해보고 날려도 먹으면서 배우는 게 결국 남는거다 - Z.Sabziller '쫄보의삽질' 블로그 탄생스토리가 궁금하다면: Git push..
-
[MySQL] mysql too many connection 에러 해결DataBase/MySQL 2023. 3. 3. 21:30
mysql이 ecs 컨테이너로 띄어있고 여러 서비스들(ex. airflow 클러스터)이 연결되어 있을 때, mysql이 허용가능한 클라이언트 수를 넘어가면 다음과 같은 connection 에러 발 문제상황 1. statsd service 추가 후 airflow webserver가 죽어버림 2. webserver log에 남겨진 에러메세지 sqlalchemy.exc.OperationalError: (MySQLdb.OperationalError) (1040, 'Too many connections') 해결방법 => mysql task definition에서 docker run command 추가 --max_connections=10000 ref. https://stackoverflow.com/question..