문제 해결: CloudWatch Log 및 CloudTrail 오류 - Amazon Managed Workflows for Apache Airflow

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

문제 해결: CloudWatch Log 및 CloudTrail 오류

이 페이지의 항목에는 Amazon Managed Workflows for Apache Airflow 환경에서 발생할 수 있는 Amazon CloudWatch Logs 및 AWS CloudTrail 오류에 대한 해결 방법이 포함되어 있습니다.

로그

다음 항목에서는 Apache Airflow 로그를 볼 때 발생할 수 있는 오류에 대해 설명합니다.

내 작업 로그를 볼 수 없거나 'Cloudwatch log_group에서 원격 로그를 읽는 중' 오류가 발생함

Amazon MWAA는 Amazon CloudWatch Logs에서 직접 로그를 읽고 쓰도록 Apache Airflow를 구성했습니다. 작업자가 작업을 시작하지 못하거나 로그를 작성하지 못하면 다음과 같은 오류가 표시됩니다.

*** Reading remote log from Cloudwatch log_group: airflow-environmentName-Task log_stream: DAG_ID/TASK_ID/timestamp/n.log.Could not read remote logs from log_group: airflow-environmentName-Task log_stream: DAG_ID/TASK_ID/time/n.log.
  • 다음 단계를 수행하는 것이 좋습니다.

    1. 사용자 환경에 대해 INFO 수준에서 작업 로그를 활성화했는지 확인합니다. 자세한 내용은 Amazon에서 에어플로우 로그 보기 CloudWatch 단원을 참조하십시오.

    2. 환경 실행 역할에 올바른 권한 정책이 있는지 확인합니다.

    3. 연산자 또는 작업이 올바르게 작동하고 있는지, DAG를 구문 분석할 수 있는 충분한 리소스가 있는지, 로드할 적절한 Python 라이브러리가 있는지 확인합니다. 종속성이 올바른지 확인하려면 문제를 일으키는 항목을 찾을 때까지 가져오기를 제거해 보십시오. Amazon MWAA 로컬 러너 도구를 사용하여 Python 종속성을 테스트하는 것이 좋습니다.

로그 없이 작업이 실패함

워크플로우에서 작업이 실패하고 실패한 작업에 대한 로그를 찾을 수 없는 경우 다음과 같이 기본 인수에 queue 파라미터를 설정하고 있는지 확인합니다.

from airflow import DAG from airflow.operators.bash_operator import BashOperator from airflow.utils.dates import days_ago # Setting queue argument to default. default_args = { "start_date": days_ago(1), "queue": "default" } with DAG(dag_id="any_command_dag", schedule_interval=None, catchup=False, default_args=default_args) as dag: cli_command = BashOperator( task_id="bash_command", bash_command="{{ dag_run.conf['command'] }}" )

문제를 해결하려면 코드에서 queue를 제거하고 DAG를 다시 호출합니다.

CloudTrail에 'ResourceAlreadyExistsException' 오류가 표시됨

"errorCode": "ResourceAlreadyExistsException", "errorMessage": "The specified log stream already exists", "requestParameters": { "logGroupName": "airflow-MyAirflowEnvironment-DAGProcessing", "logStreamName": "scheduler_cross-account-eks.py.log" }

apache-airflow-backport-providers-amazon과 같은 특정 Python 요구 사항은 Amazon MWAA가 CloudWatch와 통신하는 데 사용하는 watchtower 라이브러리를 이전 버전으로 롤백합니다. 다음 단계를 수행하는 것이 좋습니다.

  • 다음 라이브러리를 requirements.txt에 추가합니다.

    watchtower==1.0.6

CloudTrail에 '잘못된 요청' 오류가 표시됨

Invalid request provided: Provided role does not have sufficient permissions for s3 location airflow-xxx-xxx/dags

동일한 AWS CloudFormation 템플릿을 사용하여 Amazon MWAA 환경과 Amazon S3 버킷을 생성하는 경우 AWS CloudFormation 템플릿 내에 DependsOn 섹션을 추가해야 합니다. 두 리소스(MWAA 환경MWAA 실행 정책)는 AWS CloudFormation에 종속성을 갖습니다. 다음 단계를 수행하는 것이 좋습니다.

  • AWS CloudFormation 템플릿에 다음 DependsOn 문을 추가합니다.

    ... MaxWorkers: 5 NetworkConfiguration: SecurityGroupIds: - !GetAtt SecurityGroup.GroupId SubnetIds: !Ref subnetIds WebserverAccessMode: PUBLIC_ONLY DependsOn: MwaaExecutionPolicy MwaaExecutionPolicy: Type: AWS::IAM::ManagedPolicy Properties: Roles: - !Ref MwaaExecutionRole PolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Action: airflow:PublishMetrics Resource: ...

    예시는 Amazon Managed Workflows for Apache Airflow용 빠른 시작 튜토리얼 단원을 참조하십시오.

Apache Airflow 로그에 '64비트 Oracle Client 라이브러리를 찾을 수 없습니다: “libclntsh.so: 공유 객체 파일을 열 수 없음: 해당 파일 또는 디렉터리가 없습니다'라는 메시지가 표시됨

스케줄러 로그에 psycopg2 '서버가 예기치 않게 연결을 종료했습니다'라는 메시지가 표시됨

다음과 비슷한 오류가 표시되면 Apache Airflow 스케줄러에 리소스가 부족한 것일 수 있습니다.

2021-06-14T10:20:24.581-05:00 sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) server closed the connection unexpectedly 2021-06-14T10:20:24.633-05:00 This probably means the server terminated abnormally 2021-06-14T10:20:24.686-05:00 before or while processing the request.

다음 단계를 수행하는 것이 좋습니다.

  • 최대 5개의 스케줄러를 지정할 수 있는 Apache Airflow v2.0.2로 업그레이드하는 것을 고려해 보십시오.

DAG 처리 로그에 ‘작업에 %라고 표시되지만 실행 프로그램이 작업 인스턴스 % 완료(%)라고 보고합니다'라고 표시됩니다.

다음과 비슷한 오류가 표시되면 장기 실행 작업이 Amazon MWAA의 작업 시간 제한에 도달했을 수 있습니다. Amazon MWAA는 하나의 Airflow 작업을 12시간으로 제한하여 작업이 대기열에 갇히거나 자동 크기 조정과 같은 활동을 차단하는 것을 방지합니다.

Executor reports task instance %s finished (%s) although the task says its %s. (Info: %s) Was the task killed externally

다음 단계를 수행하는 것이 좋습니다.

  • 작업을 실행 시간이 짧은 여러 개의 작업으로 나누는 것을 고려해 보십시오. Airflow에는 일반적으로 작업자가 비동기적인 모델이 있습니다. 외부 시스템에서 활동을 호출하고 Apache Airflow Sensors가 폴링하여 완료 시점을 확인합니다. 센서에 장애가 발생하는 경우 작업자의 기능에 영향을 주지 않고 안전하게 재시도할 수 있습니다.

작업 로그에 'log_group에서 원격 로그를 읽을 수 없음: airway-*{*environmentName}-Task log_stream:* {*DAG_ID}/*{*TASK_ID}/*{*time}/*{*{*n.log.' 내 작업 로그에

다음과 비슷한 오류가 표시되는 경우 사용자 환경의 실행 역할에 작업 로그에 대한 로그 스트림을 생성하는 권한 정책이 포함되어 있지 않을 수 있습니다.

Could not read remote logs from log_group: airflow-*{*environmentName}-Task log_stream:* {*DAG_ID}/*{*TASK_ID}/*{*time}/*{*n}.log.

다음 단계를 수행하는 것이 좋습니다.

Apache Airflow 버전과 호환되지 않는 requirements.txt 파일에 공급자 패키지를 지정했을 수도 있습니다. 예를 들어 Apache Airflow v2.0.2를 사용하는 경우 Airflow 2.1 이상과만 호환되는 apache-airflow-providers-databricks 패키지와 같은 패키지를 지정했을 수 있습니다.

다음 단계를 수행하는 것이 좋습니다.

  1. Apache Airflow v2.0.2를 사용하는 경우 requirements.txt 파일을 수정하고 apache-airflow[databricks]을 추가합니다. 이렇게 하면 Apache Airflow v2.0.2와 호환되는 올바른 버전의 Databricks 패키지가 설치됩니다.

  2. GitHub의 aws-mwaa-local-runner를 사용하여 DAG, 사용자 지정 플러그인, Python 종속성을 로컬에서 테스트합니다.