

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

# 故障診斷：CloudWatch Logs 和 CloudTrail 錯誤
<a name="t-cloudwatch-cloudtrail-logs"></a>

本頁面上的主題包含 Amazon CloudWatch Logs 的解決方案，以及您在 Amazon Managed Workflows for Apache Airflow 環境中可能遇到的 AWS CloudTrail 錯誤。

**Contents**
+ [日誌](#troubleshooting-view-logs)
  + [我找不到任務日誌，或收到`Reading remote log from Cloudwatch log_group`錯誤](#t-task-logs)
  + [任務在沒有任何日誌的情況下失敗](#t-task-failing-no-logs)
  + [我在 CloudTrail 中收到`ResourceAlreadyExistsException`錯誤](#t-cloudtrail)
  + [我在 CloudTrail 中收到`Invalid request`錯誤](#t-cloudtrail-bucket)
  + [我在 Apache Airflow 日誌`Cannot locate a 64-bit Oracle Client library: "libclntsh.so: cannot open shared object file: No such file or directory`中取得](#t-plugins-logs)
  + [我收到排程器日誌中的 psycopg2 'server 意外關閉連線'](#scheduler-postgres-library)
  + [我在 DAG 處理日誌`Executor reports task instance %s finished (%s) although the task says its %s`中取得](#long-running-tasks)
  + [我在任務日誌`Could not read remote logs from log_group: airflow-*{*environmentName}-Task log_stream:* {*DAG_ID}/*{*TASK_ID}/*{*time}/*{*n}.log.`中取得](#t-task-fail-permission)

## 日誌
<a name="troubleshooting-view-logs"></a>

下列主題說明您在存取 Apache Airflow 日誌時可能收到的錯誤。

### 我找不到任務日誌，或收到`Reading remote log from Cloudwatch log_group`錯誤
<a name="t-task-logs"></a>

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.
```
+ 建議下列步驟：

  1. 確認您已在環境的 `INFO`層級啟用任務日誌。如需詳細資訊，請參閱 [在 Amazon CloudWatch 中存取 Airflow 日誌](monitoring-airflow.md)。

  1. 確認環境[執行角色](mwaa-create-role.md)具有正確的許可政策。

  1. 確認您的運算子或任務正常運作、有足夠的資源來剖析 DAG，以及有適當的 Python 程式庫可供載入。若要驗證您是否有正確的相依性，請嘗試消除匯入，直到您找到造成問題的匯入為止。我們建議使用 [aws-mwaa-docker-images](https://github.com/aws/amazon-mwaa-docker-images) 測試您的 Python 相依性。

### 任務在沒有任何日誌的情況下失敗
<a name="t-task-failing-no-logs"></a>

如果任務在工作流程中失敗，而且找不到失敗任務的任何日誌，請檢查您是否在預設引數中設定 `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`錯誤
<a name="t-cloudtrail"></a>

```
"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.txt`

  ```
  watchtower==1.0.6
  ```

### 我在 CloudTrail 中收到`Invalid request`錯誤
<a name="t-cloudtrail-bucket"></a>

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

如果您使用相同的 CloudFormation 範本建立 Amazon MWAA 環境和 Amazon S3 儲存貯體，則需要在 CloudFormation 範本中新增`DependsOn`區段。這兩個資源 (*MWAA 環境*和 *MWAA 執行政策*) 在其中具有相依性 CloudFormation。建議下列步驟：
+ 將下列**DependsOn**陳述式新增至您的 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 Managed Workflows for Apache Airflow 的快速入門教學課程](quick-start.md)。

### 我在 Apache Airflow 日誌`Cannot locate a 64-bit Oracle Client library: "libclntsh.so: cannot open shared object file: No such file or directory`中取得
<a name="t-plugins-logs"></a>
+ 建議下列步驟：

  1. 如果您使用的是 Apache Airflow v2，請將 新增`core.lazy_load_plugins : False`為 Apache Airflow 組態選項。若要進一步了解，請參閱[使用組態選項載入 2 中的外掛程式](configuring-env-variables.md#configuring-2.0-airflow-override)。

### 我收到排程器日誌中的 psycopg2 'server 意外關閉連線'
<a name="scheduler-postgres-library"></a>

如果您收到類似以下的錯誤，您的 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`中取得
<a name="long-running-tasks"></a>

如果您收到類似下列的錯誤，長時間執行的任務可能已達到 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.`中取得
<a name="t-task-fail-permission"></a>

如果您收到類似下列的錯誤，您環境的執行角色可能不包含建立任務日誌之日誌串流的許可政策。

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

建議下列步驟：
+ 使用其中一個範例政策來修改您環境的執行角色[Amazon MWAA 執行角色](mwaa-create-role.md)。

您可能也在`requirements.txt`檔案中指定了與 Apache Airflow 版本不相容的提供者套件。例如，如果您使用的是 Apache Airflow v2.0.2，您可能已指定套件，例如 [apache-airflow-providers-databricks](https://airflow.apache.org/docs/apache-airflow-providers-databricks/stable/index.html) 套件，其僅與 Airflow 2.1\$1 相容。

建議下列步驟：

1. 如果您使用的是 Apache Airflow v2.0.2，請修改 `requirements.txt` 檔案並新增 `apache-airflow[databricks]`。這會安裝與 Apache Airflow v2.0.2 相容的正確 Databricks 套件版本。

1. 在 GitHub 上使用 [aws-mwaa-docker-images](https://github.com/aws/amazon-mwaa-docker-images)，在本機測試您的 DAGs、自訂外掛程式和 Python 相依性。