本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
故障排除: CloudWatch 日志和 CloudTrail 错误
本页的主题包含亚马逊 CloudWatch 日志的解决方案以及您在适用于 Apache Airflow 的亚马逊托管工作流程环境中可能遇到的 AWS CloudTrail 错误。
目录
日志
以下主题描述了您在访问 Apache Airflow 日志时可能收到的错误。
我找不到我的任务日志,或者我收到了Reading remote log from Cloudwatch log_group错误
亚马逊 MWAA 已将 Apache Airflow 配置为直接从亚马逊日志读取和写入日志。 CloudWatch 如果工作人员无法启动任务或未能写入任何日志,则会引用错误:
*** 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 库可供加载。要验证依赖项是否正确,请尝试取消导入,直到找到导致问题的依赖项。我们建议使用测试你的 Python 依赖关系aws-mwaa-docker-images
。
-
任务在没有任何日志的情况下失败
如果工作流程中的任务失败并且您找不到失败任务的任何日志,请检查是否在默认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 要求,例如将 Amazon MWAA 用于通信的watchtower库回apache-airflow-backport-providers-amazon滚 CloudWatch 到旧版本。我们建议您完成以下步骤:
-
将以下库添加到
requirements.txt。watchtower==1.0.6
我在里面遇到了一个Invalid request错误 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中有依赖关系。我们建议您完成以下步骤:
-
将以下
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 MWAA 的快速入门教程。
我进入Cannot locate a 64-bit Oracle Client library: "libclntsh.so: cannot open shared object file: No such file or directory了 Apache Airflow 日志
-
我们建议您完成以下步骤:
-
如果您使用的是 Apache Airflow v2,请添加
core.lazy_load_plugins : False为 Apache Airflow 配置选项。要了解更多信息,请参阅 2 中的使用配置选项加载插件。
-
我在调度程序日志中看到 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.
我们建议您完成以下步骤:
-
考虑升级到 Apache Airflow v2.0.2,它允许你指定最多 5 个调度程序。
我进入Executor reports task instance %s finished (%s) although the task says its %s了我的 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 会进行轮询以检查活动何时完成。如果传感器出现故障,则可以在不影响运算符功能的情况下安全地重试。
我进入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,则可能指定了一个仅与 Airflow 2.1+ 兼容apache-airflow-providers-databricks
我们建议您完成以下步骤:
-
如果您使用的是 Apache Airflow v2.0.2,请修改
requirements.txt文件并添加apache-airflow[databricks]。这将安装与 Apache Airflow v2.0.2 兼容的 Databricks 程序包的正确版本。 -
使用aws-mwaa-docker-images
在本地测试你的 DAGs自定义插件和 Python 依赖关系 GitHub。