故障排除:CloudWatch Logs 和 CloudTrail 错误 - Amazon Managed Workflows for Apache Airflow

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

故障排除:CloudWatch Logs 和 CloudTrail 错误

本页主题包含 Amazon CloudWatch Logs 的解决方案以及您在 Amazon MWAA 环境中可能遇到的 AWS CloudTrail 错误。

日志

以下主题描述了您在查看 Apache Airflow 日志时可能收到的错误。

我看不到我的任务日志,或者我收到“从 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.
  • 我们建议您完成以下步骤:

    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。

我在 CloudTrail 中看到“ResourceAlreadyExistsException”错误

"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 用于与 CloudWatch 通信的 watchtower 库回滚到旧版本。我们建议您完成以下步骤:

  • 将以下库添加到 requirements.txt

    watchtower==1.0.6

我在 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_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 MWAA 的快速入门教程

我在 Apache Airflow 日志中看到 “找不到 64 位 Oracle 客户端库:‘ libclntsh.so’:无法打开共享对象文件:没有这样的文件或目录”

  • 我们建议您完成以下步骤:

    1. 如果您使用的是 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 个计划程序

我在我的 DAG 处理日志中看到“执行程序报告任务实例 %s 已完成(%s),尽管任务显示已完成 %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

我们建议您完成以下步骤:

  • 考虑将任务分解为多个运行时间较短的任务。Airflow 通常有运算符异步模型。它调用外部系统上的活动,Apache Airflow 传感器会进行轮询以查看其何时完成。如果传感器出现故障,则可以在不影响运算符功能的情况下安全地重试。

我看到“无法从 log_group 中读取远程日志:airflow-* {*EnvironmentName}-Task log_stream:* {*DAG_ID} /* {*time} /* {*n} .log。” 在我的任务日志中

如果您看到类似于以下内容的错误,则环境的执行角色可能不包含为任务日志创建日志流的权限策略。

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 Airflow v2.0.2,则可能已经指定了程序包,例如 apache-airflow-providers-databricks 程序包,它仅与 Airflow 2.1+ 兼容。

我们建议您完成以下步骤:

  1. 如果您使用的是 Apache Airflow v2.0.2,请修改 requirements.txt 文件并添加 apache-airflow[databricks]。这将安装与 Apache Airflow v2.0.2 兼容的 Databricks 程序包的正确版本。

  2. 使用 GitHub 上的 aws-mwaa-local-runner 在本地测试 DAG、自定义插件和 Python 依赖项。