疑難排解: CloudWatch 記錄檔和 CloudTrail 錯誤 - Amazon Managed Workflows for Apache Airflow

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

疑難排解: CloudWatch 記錄檔和 CloudTrail 錯誤

本頁的主題包含 Amazon CloudWatch 日誌的解決方案,以及您在 Apache 氣流環境的 Amazon 受管工作流程中可能遇到的AWS CloudTrail錯誤。

日誌

下列主題說明您在檢視 Apache 氣流記錄檔時可能收到的錯誤。

我看不到我的任務日誌,或者我收到「從 Cloudwatch 日誌組讀取遠端日誌」錯誤

亞馬遜 MWAA 已將 Apache 氣流設定為直接從亞馬遜 CloudWatch 日誌讀取和寫入日誌。如果 Worker 無法啟動工作,或無法寫入任何記錄,您將會看到以下錯誤:

*** 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。

我看到一個 ResourceAlreadyExistsException '' 錯誤 CloudTrail

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

某些 Python 需求,例如apache-airflow-backport-providers-amazon將 Amazon MWAA 用來與之通訊的程式watchtower庫復原 CloudWatch 至舊版本。建議下列步驟:

  • 將下列程式庫新增至 requirements.txt

    watchtower==1.0.6

我看到「無效請求」錯誤 CloudTrail

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

如果您要使用相同的範本建立 Amazon MWAA 環境和 Amazon S3 儲存貯體,則需要在AWS CloudFormation範本中新增DependsOn區段。AWS CloudFormation這兩個資源 (MWAA 環境MWAA 執行原則) 在. AWS CloudFormation 建議下列步驟:

  • 將下列DependsOn陳述式新增至您的AWS CloudFormation範本。

    ... 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 Apache 氣流管理工作流程的快速入門教學

我在 Apache 氣流日誌中看到「找不到 64 位元的 Oracle 用戶端程式庫:「libclntsh.so:無法開啟共享物件檔案:沒有這樣的檔案或目錄」

  • 建議下列步驟:

    1. 如果您使用的是 Apache 氣流 v2,請添加core.lazy_load_plugins : False為 Apache 氣流配置選項。若要深入瞭解,請參閱使用設定選項載入外掛程式 2

我在我的調度程序日誌中看到 psycopg2「服務器意外關閉了連接」

如果您看到類似下列內容的錯誤,表示您的 Apache 氣流排程器可能已耗盡資源。

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 氣流 v2.0.2,它允許您指定最多 5 個排程器。

我看到 '執行程序報告任務實例 %s 已完成(%s),儘管任務在我的 DAG 處理日誌中顯示其 %s

如果您看到類似以下內容的錯誤,則長時間執行的任務可能已達到 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

建議下列步驟:

  • 請考慮將工作分解為多個較短的執行工作。氣流通常具有一個模型,其中運營商是異步的。它調用外部系統上的活動,Apache 氣流傳感器輪詢以查看其完成時間。如果感測器故障,可以安全地重試,而不會影響操作員的功能。

我看到「無法從 log_group 讀取遠程日誌:氣流-* {* 環境名稱}-任務日誌流:* {* DAG_ID} /* {* TASK_ID} /* {* 時間} /* {* n}. 日誌。」 在我的任務日誌中

如果您看到類似下列內容的錯誤,則您環境的執行角色可能不包含建立工作記錄資料流的權限原則。

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

建議下列步驟:

您可能還在requirements.txt檔案中指定了與 Apache Airflow 版本不相容的提供者套件。例如,如果您使用的是 Apache 氣流 v2.0.2,您可能已經指定了一個套件,例如僅與氣流 2.1 + 相容的apache-airflow-providers-databricks套件。

建議下列步驟:

  1. 如果您使用的是阿帕奇氣流 v2.0.2,修改requirements.txt文件並添加。apache-airflow[databricks]這會安裝與 Apache 氣流 v2.0.2 相容的正確版本的資料庫套件。

  2. 使用 aws-mwaa-local-runneron GitHub 在本機測試您的 DAG、自訂外掛程式和 Python 相依性。