为什么我的 AWS Glue 任务没有向 Amazon CloudWatch 写入日志?

上次更新日期:2021 年 7 月 28 日

我的 AWS Glue 提取、加载和转换 (ETL) 任务未将日志写入 Amazon CloudWatch。

简短描述

如果您的 AWS Glue 任务没有将日志推送到 CloudWatch,请检查以下事项:

  • 确保您的 AWS Glue 任务具有所有必需的 AWS Identity and Access Management (IAM) 权限。
  • 确保 AWS Key Management Service (AWS KMS) 密钥允许 CloudWatch Logs 服务使用该密钥。
  • 确保 IAM 权限 logs:AssociateKmsKey 已附加到 AWS Glue 角色。
  • 如果您尚未为 AWS Glue Spark ETL 任务启用连续日志记录,请在日志聚合之前检查任务是否失败。
  • 确保您正在检查正确的 CloudWatch 日志组。

解决方法

AWS Glue 任务角色缺乏创建和写入 CloudWatch 日志组的 IAM 权限

如果您没有使用托管的 AWsGlueservicerOLE 策略,那么请确保附加到 ETL 任务的 IAM 角色具有与 CloudWatch 交互所需的以下权限。如果任务使用自定义日志组,则 IAM 策略必须提供对自定义日志组的访问权限。

{
    "Effect": "Allow",
    "Action": "cloudwatch:PutMetricData",
    "Resource": [
        "*"
    ]
},
{
    "Effect": "Allow",
    "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents"
    ],
    "Resource": [
        "arn:aws:logs:*:*:/aws-glue/*",
        "arn:aws:logs:*:*:/customlogs/*"
    ]
}

请务必将 arn:aws:logs:*:*:/customlogs/* 替换为自定义日志组的 ARN。

使用的 AWS KMS 密钥未向 CloudWatch Logs 服务授予所需的权限

如果您在 AWS Glue 任务中使用安全配置,那么请确保附加到安全配置的 AWS KMS 密钥允许 CloudWatch Logs 服务使用该密钥。将以下策略附加到 AWS KMS 密钥:

{
    "Effect": "Allow",
    "Principal": {
        "Service": "logs.region.amazonaws.com"
    },
    "Action": [
        "kms:Encrypt*",
        "kms:Decrypt*",
        "kms:ReEncrypt*",
        "kms:GenerateDataKey*",
        "kms:Describe*"
    ],
    "Resource": "*",
    "Condition": {
        "ArnEquals": {
            "kms:EncryptionContext:aws:logs:arn": "arn:aws:logs:us-west-2:1111222233334444:log-group:log-group-name"
        }
    }
}

请务必在策略中替换以下内容:

  • us-west-2 替换为您选择的 AWS 区域
  • 1111222233334444 替换为您的 AWS 账户 ID。
  • log-group-name 替换为您的日志组名称。

有关更多信息,请参阅使用 AWS Key Management Service 加密 CloudWatch Logs 中的日志数据

此外,请确保 IAM 权限 logs:AssociateKmsKey 已附加到 AWS Glue 角色。有关更多信息,请参阅带持续日志记录的安全配置

没有为您的 AWS Glue Spark ETL 任务启用连续日志记录

如果您尚未为 AWS Glue Spark ETL 任务启用连续日志记录,则在任务运行完成后进行日志聚合。如果任务在日志聚合之前失败,那么日志可能无法推送到 CloudWatch。为了确保在不考虑应用程序故障的情况下填充日志,您可以为 AWS Glue 任务启用连续日志记录

您没有在正确的日志组中查找日志

在查找 CloudWatch Logs 时,请记住以下事项:

  • 如果已开启连续日志记录并使用默认日志组,那么自定义消息 (例如来自 print 语句的消息) 将推送到 /aws-glue/Jobs//output log group
  • 如果已开启连续日志记录并使用默认日志组,那么记录器发出的消息将推送到 /aws-glue/jobs/logs-v2 下的驱动程序日志中。
  • 如果已开启连续日志记录并使用默认日志组,则使用安全配置的任务会将自定义消息推送到 /aws-glue/jobs/logs-v2-testconfig。务必将 testconfig 替换为安全配置的名称。
  • 如果已开启连续日志记录并使用自定义日志组,则可以在自定义日志组下找到自定义日志消息以及驱动程序和执行程序日志。
  • 如果没有开启连续日志记录,则可以在 /aws-glue/jobs/output 下找到消息,例如打印语句输出,以及在 /aws-glue/jobs/error 下找到来自记录器的所有自定义消息。

有关详细信息,请参阅日志记录行为


这篇文章对您有帮助吗?


您是否需要账单或技术支持?