本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
疑難排解: CloudWatch 記錄檔和 CloudTrail 錯誤
本頁的主題包含 Amazon CloudWatch 日誌的解決方案,以及您在 Apache 氣流環境的 Amazon 受管工作流程中可能遇到的AWS CloudTrail錯誤。
內容
- 日誌
- 我看不到我的任務日誌,或者我收到「從 Cloudwatch 日誌組讀取遠端日誌」錯誤
- 任務失敗,沒有任何日誌
- 我看到一個 ResourceAlreadyExistsException '' 錯誤 CloudTrail
- 我看到「無效請求」錯誤 CloudTrail
- 我在 Apache 氣流日誌中看到「找不到 64 位元的 Oracle 用戶端程式庫:「libclntsh.so:無法開啟共享物件檔案:沒有這樣的檔案或目錄」
- 我在我的調度程序日誌中看到 psycopg2「服務器意外關閉了連接」
- 我看到 '執行程序報告任務實例 %s 已完成(%s),儘管任務在我的 DAG 處理日誌中顯示其 %s
- 我看到「無法從 log_group 讀取遠程日誌:氣流-* {* 環境名稱}-任務日誌流:* {* DAG_ID} /* {* TASK_ID} /* {* 時間} /* {* n}. 日誌。」 在我的任務日誌中
日誌
下列主題說明您在檢視 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.
-
建議下列步驟:
-
確認您已在環境的
INFO
層級啟用工作記錄。如需詳細資訊,請參閱在 Amazon 中檢視 Airflow 日誌 CloudWatch。 -
確認環境執行角色具有正確的權限原則。
-
請確認您的運算子或工作是否正常運作、有足夠的資源來剖析 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 Managed Workflows for Apache Airflow 的快速入門教學課程。
我在 Apache 氣流日誌中看到「找不到 64 位元的 Oracle 用戶端程式庫:「libclntsh.so:無法開啟共享物件檔案:沒有這樣的檔案或目錄」
-
建議下列步驟:
-
如果您使用的是 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.
建議下列步驟:
-
使用的其中一個範例原則修改您環境的執行角色Amazon MWAA執行角色。
您可能還在requirements.txt
檔案中指定了與 Apache Airflow 版本不相容的提供者套件。例如,如果您使用的是 Apache 氣流 v2.0.2,您可能已經指定了一個套件,例如僅與氣流 2.1 + 相容的apache-airflow-providers-databricks
建議下列步驟:
-
如果您使用的是阿帕奇氣流 v2.0.2,修改
requirements.txt
文件並添加。apache-airflow[databricks]
這會安裝與 Apache 氣流 v2.0.2 相容的正確版本的資料庫套件。 -
使用 aws-mwaa-local-runner
on GitHub 在本機測試您的 DAG、自訂外掛程式和 Python 相依性。