本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
故障診斷:CloudWatch Logs 和 CloudTrail 錯誤
本頁面上的主題包含 Amazon CloudWatch Logs 的解決方案,以及您在 Amazon Managed Workflows for Apache Airflow 環境中可能遇到的 AWS CloudTrail 錯誤。
日誌
下列主題說明您在存取 Apache Airflow 日誌時可能收到的錯誤。
我找不到任務日誌,或收到Reading remote log from Cloudwatch log_group錯誤
Amazon MWAA 已設定 Apache Airflow 直接從 Amazon CloudWatch Logs 讀取和寫入日誌。如果工作者無法啟動任務,或無法寫入任何日誌,您會參考錯誤:
*** 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.
-
建議下列步驟:
-
確認您已在環境的
INFO層級啟用任務日誌。如需詳細資訊,請參閱 在 Amazon CloudWatch 中存取 Airflow 日誌。 -
確認環境執行角色具有正確的許可政策。
-
確認您的運算子或任務正常運作、有足夠的資源來剖析 DAG,以及有適當的 Python 程式庫可供載入。若要驗證您是否有正確的相依性,請嘗試消除匯入,直到您找到造成問題的匯入為止。我們建議您使用 aws-mwaa-docker-images
測試您的 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" }
某些 Python 需求,例如將 Amazon MWAA 用來與 CloudWatch 通訊的watchtower程式庫apache-airflow-backport-providers-amazon轉返至較舊版本。建議下列步驟:
-
將下列程式庫新增至您的
requirements.txtwatchtower==1.0.6
我在 CloudTrail 中收到Invalid request錯誤
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。建議下列步驟:
-
將下列
DependsOn陳述式新增至您的 AWS CloudFormation 範本。... MaxWorkers: 5 NetworkConfiguration: SecurityGroupIds: - !GetAtt SecurityGroup.GroupId SubnetIds: !Ref subnetIds WebserverAccessMode: PUBLIC_ONLYDependsOn: MwaaExecutionPolicyMwaaExecutionPolicy: 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 日誌Cannot locate a 64-bit Oracle Client library: "libclntsh.so: cannot open shared object file: No such file or directory中取得
-
建議下列步驟:
-
如果您使用的是 Apache Airflow v2,請將 新增
core.lazy_load_plugins : False為 Apache Airflow 組態選項。若要進一步了解,請參閱使用組態選項載入 2 中的外掛程式。
-
我收到排程器日誌中的 psycopg2 'server 意外關閉連線'
如果您收到類似以下的錯誤,您的 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.
建議下列步驟:
-
請考慮升級至 Apache Airflow v2.0.2,這可讓您指定最多 5 個排程器。
我在 DAG 處理日誌Executor reports task instance %s finished (%s) although the task says its %s中取得
如果您收到類似以下的錯誤,長時間執行的任務可能已達到 Amazon MWAA 的任務時間限制。任何一個 Airflow 任務的 Amazon MWAA 限制為 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 以檢查何時完成。如果感應器故障,則可以安全地重試,而不會影響操作員的功能。
我在任務日誌Could not read remote logs from log_group: airflow-*{*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.
建議下列步驟:
-
使用 其中一個範例政策來修改您環境的執行角色Amazon MWAA 執行角色。
您可能也在requirements.txt檔案中指定了與 Apache Airflow 版本不相容的提供者套件。例如,如果您使用的是 Apache Airflow v2.0.2,您可能已指定套件,例如 apache-airflow-providers-databricks
建議下列步驟:
-
如果您使用的是 Apache Airflow v2.0.2,請修改
requirements.txt檔案並新增apache-airflow[databricks]。這會安裝與 Apache Airflow v2.0.2 相容的正確 Databricks 套件版本。 -
在 GitHub 上使用 aws-mwaa-docker-images
,在本機測試您的 DAGs、自訂外掛程式和 Python 相依性。