Ongoing service disruptions
For the most recent update on ongoing service disruptions affecting the AWS Middle East (UAE) Region (ME-CENTRAL-1), refer to the AWS Health Dashboard. For information on AWS Service migration, see How do I migrate my services to another region?
Amazon MWAA 환경에서 대기 중 상태로 멈춘 작업의 문제를 해결하려면 어떻게 해야 합니까?
Amazon Managed Workflows for Apache Airflow(Amazon MWAA)에서 워크플로를 실행하고 있는데 작업이 대기 중 상태로 멈췄습니다. 작업이 실행 중 상태로 진행되지 않습니다.
간략한 설명
Amazon MWAA의 작업은 다음과 같은 이유로 대기 중 상태에 멈춰 있을 수 있습니다.
- 환경이 최대 동시 작업 수에 도달했습니다.
- Airflow 구성 옵션이 MWAA 환경에서 잘못 설정되었습니다.
- 워커의 작업을 위한 메모리 또는 CPU가 부족합니다.
작업을 실행하는 일반적인 워크플로에 장애가 발생하면 작업이 대기 중 상태로 멈춥니다. Apache Airflow 워커는 과부하 상태가 되어 지정된 시간 내에 응답하지 못할 수 있습니다. 이 경우 작업은 12시간 내에 기본 가시성 제한 시간에 도달할 때까지 Amazon Simple Queue Service(Amazon SQS) 대기열에 남아 있습니다. 재시도를 구성한 경우 Apache Airflow 스케줄러가 작업을 재시도합니다.
해결 방법
문제를 해결하기 전에 환경 리소스가 최대 로드에 도달했는지 또는 워커 관련 문제가 발생했는지 확인하십시오. Amazon CloudWatch를 사용하여 해당 환경의 워커 로그와 CPUUtilization 및 MemoryUtilization 지표를 확인할 수 있습니다.
환경이 최대 동시 작업 수에 도달했는지 확인
Amazon MWAA 풀이 가득 차고 대기열에 더 많은 작업이 추가되면 사용자 환경은 최대 동시 작업 수에 도달합니다. 이 문제를 해결하려면 해당 환경의 워커 수를 늘리거나 환경 클래스 크기를 변경하십시오.
환경의 워커 수를 늘려야 하는지 여부를 확인하려면 다음 단계를 완료하십시오.
- CloudWatch 콘솔을 엽니다.
- 탐색 창에서 지표를 선택한 다음, 모든 지표를 선택합니다.
- 찾아보기 탭을 선택하고 환경이 속한 AWS 리전을 선택한 다음, 환경 이름을 검색합니다.
- AWS 네임스페이스 섹션에서 MWAA < 대기열을 선택합니다.
- QueuedTasks 및 RunningTasks를 선택합니다.
- 그래프에서 활동이 가장 많은 기간을 찾은 다음, 두 지표의 총 수를 더합니다.
참고: 합계는 이 기간 동안의 총 작업 수입니다. - 환경의 기본 동시성 수준을 결정합니다.
참고: 예를 들어 mw1.small 환경에는 워커마다 5개의 동시 작업이 있습니다. - 총 작업 수를 기본 수준의 동시 작업 수로 나눕니다.
- 이 수를 환경에 설정한 최대 워커 수에서 뺍니다.
참고: 결과가 양수인 경우 현재 동시 작업 수를 처리할 워커를 추가해야 합니다.
환경의 워커 수를 늘리거나 환경 클래스 크기를 변경하려면 다음 단계를 완료하십시오.
- Amazon MWAA 콘솔을 엽니다.
- 환경을 선택하고 편집을 선택한 후 다음을 선택합니다.
- 환경 클래스 섹션에서 다음 작업을 수행합니다.
9번 단계에서 결정한 최대 워커 수를 늘립니다.
또한 최소 워커 수를 활동이 가장 적은 기간 동안 워크로드에 필요한 값으로 설정합니다.
참고: 환경에 최대 25명의 워커만 추가할 수 있습니다. 25명이 넘는 워커가 필요한 경우 환경 클래스에서 더 큰 크기를 선택하십시오. - 환경 클래스 크기를 늘리는 경우에는 워크로드에 필요한 최대 및 최소 워커 수도 설정합니다.
워커 수를 최적화했는데도 워크로드에 충분하지 않은 경우 다음 작업을 수행하십시오.
- Apache Airflow 센서 대신 지연 가능한 연산자를 사용하십시오. 자세한 내용은 Apache Airflow 웹 사이트에서 지연 가능한 연산자 및 트리거를 참조하십시오.
- 실행 시작 시간에 시차를 두고 Directed Acyclic Graph(DAG)의 schedule_interval 사이에 짧은 시간 간격을 유지하십시오. DAG를 블록 단위로 스케줄링합니다.
- 특정 외부 함수를 호출하고 모니터링하는 사용자 지정 코드를 사용하는 경우, 작업을 두 개의 작업으로 분할하십시오. 호출 작업 하나를 만들고 함수를 모니터링하는 지연 가능한 연산자로 다른 작업을 만듭니다.
Airflow 구성 옵션이 잘못 설정되었는지 확인
Airflow 구성 옵션을 확인하려면 다음 단계를 완료하십시오.
- MWAA 콘솔을 엽니다.
- 환경을 선택한 다음, MWAA 환경을 선택합니다.
- Airflow 구성 옵션 섹션에서 core.parallelism 및 celery.worker_autoscale을 확인합니다.
core.parallelism이 설정된 경우 Amazon MWAA가 구성을 동적으로 설정할 수 있도록 수동으로 설정한 core.parallelism 옵션을 제거하십시오. Amazon MWAA는 동적 기본 구성을 (maxWorkers * maxCeleryWorkers) / schedulers * 1.5로 계산합니다. 오토 스케일링을 사용하고 값을 수동으로 설정하면 최대 로드 동안 사용률이 낮아 문제가 발생할 수 있습니다.
celery.worker_autoscale 구성 옵션의 값을 기본 동시성 수준과 비교하십시오. celery.worker_autoscale 구성 옵션을 수정하지 않은 경우, 기본 동시성 수준에 환경에 설정한 최대 워커 수를 곱하십시오.
celery.worker_autoscale 값이 의도치 않게 기본값보다 낮은 경우 CloudWatch 지표를 사용하여 워커의 CPU 및 메모리 사용량을 모니터링하십시오. 최대 로드 시 리소스 값이 20~60%인 경우 celery.worker_autoscale 값을 더 큰 수로 늘리십시오. 워커 컨테이너를 과도하게 사용하지 않도록 조금씩 늘려 사용하십시오.
celery.worker_autoscale 값을 설정하지 않았거나 기본값을 유지한 경우, 워커의 CPU 및 메모리 사용량을 모니터링하십시오. 환경에 대한 지표가 너무 높으면 celery.worker_autoscale 값을 낮추십시오. 최대 로드 시 환경이 20~60%인 경우 최댓값을 늘릴 수 있습니다.
워커가 과다 사용으로 인해 실패하고 있는지 확인
MWAA 워커 컨테이너의 모든 Celery 워커에 작업이 있고 최대 로드 상태인 경우, 워커가 과다 사용되어 실패할 수 있습니다.
MWAA 워커 컨테이너의 Celery 워커는 현재 사용하지 않는 작업에 대해 폴링합니다. 실행 중인 작업의 복잡성과 해당 작업을 정의하는 코드에 따라 워커가 과도하게 사용되어 잠재적으로 충돌할 수 있습니다. 이는 MWAA 워커 컨테이너의 모든 Celery 워커에 작업이 있고 최대 로드 상태일 때 발생합니다.
워커가 과도하게 사용되어 실패하고 있는지 여부를 확인하려면 다음 단계를 완료하십시오.
- CloudWatch 콘솔을 엽니다.
- 탐색 창에서 지표를 선택한 다음, 모든 지표를 선택합니다.
- 찾아보기 탭을 선택하고 환경이 속한 AWS 리전을 선택한 다음, 환경 이름을 검색합니다.
- AWS 네임스페이스 섹션에서 MWAA < 대기열을 선택한 후 ApproximateAgeOfOldestTask를 선택합니다.
- 4~6주 기간을 포함하도록 시간 범위를 확장합니다.
참고: 40,000초 이상의 피크는 작업이 Amazon SQS 대기열에 멈춰 있고 워커가 과다 사용으로 인해 실패하고 있음을 나타냅니다. 또한 Celery 워커는 시스템에서 강제로 종료했기 때문에 이벤트 버퍼에 오류를 기록할 수 없습니다.
CloudWatch Insights를 사용하여 작업이 Amazon SQS 대기열에 멈췄을 때 알림을 받을 수도 있습니다.
알림을 만들려면 다음 단계를 완료하십시오.
-
CloudWatch 콘솔을 엽니다.
-
탐색 창에서로그를 선택하고 Logs Insights를 선택합니다.
-
시간 범위를 4~6주로 지정합니다.
-
선택 기준 메뉴에서 MWAA 환경의 스케줄러 로그 그룹을 선택합니다.
-
쿼리 섹션에 다음 쿼리를 입력합니다.
fields _@timestamp_, _@message_, _@logStream_, _@log_ | filter _@message_ like /Was the task terminated externally?/ | sort _@timestamp_ desc | limit 10000다음은 스케줄러가 이전에 대기 중인 작업을 수신할 때 보내는 로그 예제입니다.
[[34m**2024-01-17T11:30:18.936+0000**[0m] [34mscheduler_job_runner.py:[0m771 ERROR[0m - Executor reports task instance <TaskInstance: dag_name.task_name manual__202X-XX-XXTXX:XX:XX.758774+00:00 [queued]> finished (failed) although the task says it's queued. (Info: None) Was the task terminated externally?[0m
컴퓨팅 또는 메모리 집약적 워크로드 줄이기
참고: 다음 목록을 주의 깊게 고려하십시오. 모든 요소가 사용 사례마다 적용되는 것은 아닙니다. 추가 지원이 필요한 경우 AWS Support에 문의하십시오.
환경에서 컴퓨팅 또는 메모리 집약적 워크로드를 줄이려면 다음 작업을 수행하십시오.
- DAG 코드에 추출, 변환, 로드(ETL) 스크립트, 데이터 이동 설명, AI 또는 ML 파이프라인, 기타 컴퓨팅 또는 메모리 집약적 워크로드가 포함되어 있지 않은지 확인하십시오.
- DAG 코드를 작성할 때는 Apache Airflow 모범 사례를 따르십시오. 최상위 코드를 최소화하고 필요한 항목만 가져와야 합니다. 자세한 내용은 Apache Airflow 웹 사이트의 모범 사례를 참조하십시오.
- DAG 코드를 최적화하십시오. 센서, 후크 또는 사용자 지정, 확장 또는 상속된 연산자의 메모리 사용량을 프로파일링하여 잠재적인 문제 영역을 찾아냅니다.
리소스가 여전히 과도하게 사용되는 경우 다음 작업을 수행하십시오.
- celery.worker_autoscale을 기본값 설정에서 줄이십시오. celery.worker_autoscale 값을 몇 자리 줄인 다음, 24~48시간 동안 환경을 모니터링합니다. 최적의 수준에 도달할 때까지 celery.worker_autoscale 값을 계속 낮추십시오.
참고: celery.worker_autoscale 값을 줄이면 전체 작업 풀이 감소하고 보다 많은 항목이 대기열 상태에 더 오래 남게 됩니다. 이에 대응하려면 최소 워커 수를 늘려야 합니다. - 또한 ‘환경이 최대 동시 작업 수에 도달했는지 확인’ 섹션의 단계를 다시 완료하여 워커당 동시 작업을 줄이십시오.
관련 정보
Amazon MWAA에서 Apache Airflow 성능 튜닝
Apache Airflow 웹 사이트의 구성 참조
- 언어
- 한국어
