跳至内容

如何解决 Amazon MWAA 中的“Could not read remote logs for the logs_group”(无法读取 logs_group 的远程日志)错误?

3 分钟阅读
0

我想解决 Amazon Managed Workflows for Apache Airflow 中的“Could not read remote logs for the logs_group”(无法读取 logs_group 的远程日志)错误。

简短描述

当您在 Amazon MWAA 环境中运行任务或 DAG 时,可能会收到以下或类似的错误消息:

“Error: Reading remote log from Cloudwatch log_group : Could not read remote logs from log_group *** exception from MWAA task log group”(错误:从 Cloudwatch log_group 读取远程日志:无法从 log_group 读取远程日志 *** MWAA 任务日志组出现异常)

要对上述错误进行故障排除,请确认以下几个方面:

  • AWS Identity and Access Management (IAM) 权限
  • 日志记录配置设置
  • 网络连接
  • 日志组
  • 必备组件安装情况
  • 记录延迟
  • 自动扩缩
  • CPU 使用率和内存争用

解决方法

要对 Could not read remote logs from the logs_group(无法从 logs_group 读取远程日志)错误进行故障排除,请检查以下内容:

IAM 权限

要检查您的 IAM 权限,请完成以下步骤:

  1. 请确保将任务日志设置为 INFO/WARN/ERROR 级别的日志记录,并在 Amazon MWAA 环境中将 celery.sync_parallelism 设置为 1。有关更多信息,请参阅在 Amazon MWAA 上使用 Apache Airflow 配置选项

  2. 检查关联的 IAM 角色的权限策略。请确保策略授予了调用其他 AWS 服务资源的权限。有关更多信息,请参阅 Amazon MWAA 执行角色

  3. 检查关联的 Amazon CloudWatch 日志组是否有客户自主管理型密钥。如果日志组有客户自主管理型密钥,请确保授予 AWS Key Management Service (AWS KMS) 密钥的访问权限:

    **注意:**请将 example-account-id 替换为您的账户 ID。

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Action": [
            "kms:Decrypt",
            "kms:DescribeKey",
            "kms:GenerateDataKey*",
            "kms:Encrypt"
          ],
          "Resource": "arn:aws:kms:*:<example-account-id>:key/*",
          "Effect": "Allow"
        }
      ]
    }
  4. 请确保先前的密钥策略具有以下权限:

    **注意:**请将 example-account-id 替换为您的账户 ID。

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "AWS": "arn:aws:iam::example-account-id:root"
          },
          "Action": [
            "kms:Create*",
            "kms:Describe*",
            "kms:Enable*",
            "kms:List*",
            "kms:Put*",
            "kms:Update*",
            "kms:Revoke*",
            "kms:Disable*",
            "kms:Get*",
            "kms:Delete*",
            "kms:ScheduleKeyDeletion",
            "kms:CancelKeyDeletion",
            "kms:GenerateDataKey",
            "kms:TagResource",
            "kms:UntagResource"
          ],
          "Resource": "*"
        },
        {
          "Effect": "Allow",
          "Principal": {
            "AWS": "*"
          },
          "Action": [
            "kms:Encrypt",
            "kms:Decrypt",
            "kms:ReEncrypt*",
            "kms:GenerateDataKey*",
            "kms:DescribeKey"
          ],
          "Resource": "*",
          "Condition": {
            "StringEquals": {
            /* Commented this line...
               "kms:ViaService": "s3.us-west-2.amazonaws.com", */
              "kms:CallerAccount": "example-account-id"
            }
          }
        },
        {
          "Sid": "Allow logs access",
          "Effect": "Allow",
          "Principal": {
            "Service": "logs.us-west-2.amazonaws.com"
          },
          "Action": [
            "kms:Encrypt*",
            "kms:Decrypt*",
            "kms:ReEncrypt*",
            "kms:GenerateDataKey*",
            "kms:Describe*"
          ],
          "Resource": "*",
          "Condition": {
            "ArnLike": {
              "kms:EncryptionContext:aws:logs:arn": "arn:aws:logs:us-west-2:<example-account-id>:*"
            }
          }
        }
      ]
    }

日志记录配置设置

检查您的 Amazon MWAA 环境中的日志记录配置设置。请确保它们是正确的。如果配置设置或 Airflow DAG 不正确,会阻止访问指定日志组中的远程日志。例如,如果 DAG 中的日志记录配置设置为将日志写入到不同的日志组,则会发生读取失败。

网络连接

网络问题或用于 CloudWatch 的 Amazon Virtual Private Cloud (Amazon VPC) 端点遭到删除会导致远程日志读取失败。此失败会导致您的 Amazon MWAA 环境无法与 CloudWatch Logs 通信。请确保用于 CloudWatch Logs 的 Amazon VPC 端点存在。有关更多信息,请参阅使用私有路由在 Amazon VPC 中创建所需的 VPC 服务端点

日志组

要检查您的日志组,请执行以下步骤:

  • 检查与您的 Amazon MWAA 环境关联的 CloudWatch 日志组是否已删除或重命名。如果日志组已删除或重命名,则尝试访问这些日志组将失败。手动重命名或删除日志组不是最佳做法。
  • 检查为 Amazon MWAA 中的 CloudWatch 日志组指定的 ARN 是否不正确或已过期。如果 ARN 不正确或已过期,则 MWAA 无法找到和访问日志组。当 ARN 输入错误或日志组移至其他 AWS 账户时,就会出现此错误。
  • 查看 CloudWatch 日志组的保留策略。如果您尝试访问因保留策略而过期的日志组,则会出现读取失败。修改您的保留策略设置,使日志组永不过期或将日志组保留更长时间。

**注意:**默认情况下,日志无限期保存,永不过期。

必备组件安装情况

检查必备组件安装情况。请确保没有因版本不兼容而导致的故障。要检查必备组件的安装是否有问题,请在您的 Amazon MWAA 环境中导航到 Worker 日志组。要测试自定义插件和 Python 依赖关系,请使用 aws-mwaa-local-runner。有关更多信息,请参阅 GitHub 网站上的 aws-mwaa-local-runner

要检查依赖关系是否不匹配,请查看 CloudWatch 日志路径下的以下必备组件安装情况:

  • 日志组 > airflow-MyMWAAenvironment-WebServer requirements_install_xxxx.ec2.internal_xxxx.log
  • 日志组 > airflow-MyMWAAenvironment-Scheduler requirements_install_xxxx.ec2.internal_xxxx.log
  • 日志组 > airflow-MyMWAAenvironment-Worker requirements_install_xxxx.ec2.internal_xxxx.log

记录延迟

如果每小时的任务或偶尔运行的任务出现延迟时间较长的情况,请检查 celery.worker_autoscale 设置。要降低错误率,请将 celery.worker_autoscale 设置的第二个值设置为 0。例如,将大型环境设置为 20,0,将中型环境设置为 10,0,将小型环境设置为 5,0

自动扩缩

自动扩缩时会增加或减少 Worker 节点数量,这可能导致 Could not read remote logs from logs_group(无法从 logs_group 读取远程日志)错误。如果是自动扩缩导致此错误,请关闭 Amazon MWAA 自动扩缩。要关闭 Amazon MWAA 自动扩缩,请将您的 min-workers 设置设为与 max-workers 设置相同的值。或者,增加 max-workers 设置值。有关更多信息,请参阅配置 Amazon MWAA Worker 自动扩缩

CPU 使用率和内存争用

在 MWAA 环境中,CPU 使用率过高和内存争用可能会影响读取远程日志的能力。要解决 CPU 使用率高或内存争用造成的问题,请执行以下步骤: