為什麼我的 AWS Glue 作業不會將日誌寫入 Amazon CloudWatch?

2 分的閱讀內容
0

我的 AWS Glue 擷取、載入和轉換 (ETL) 作業不會將日誌寫入 Amazon CloudWatch。

簡短說明

如果您的 AWS Glue 作業未將日誌寫入 CloudWatch,請確認下列各項:

  • 您的 AWS Glue 作業具有所有必要的 AWS 身分和存取管理 (IAM) 權限。
  • AWS Key Management Service (KMS) 金鑰允許 CloudWatch 日誌使用金鑰。
  • 您的作業會檢查正確的 CloudWatch 日誌群組。
  • logs:AssociateKmsKey IAM 權限已附加至 AWS Glue 角色。
  • 如果未對 AWS Glue Spark ETL 作業使用連續日誌記錄功能,請在日誌彙總之前檢查作業是否失敗。

解決方法

AWS Glue 作業角色沒有權限,無法建立和寫入 CloudWatch 日誌群組

如果您沒有使用 AWSGlueServiceRole 受管理的政策,請確認附加到 ETL 作業的 IAM 角色擁有正確的權限。使用 CloudWatch 需要下列權限。如果作業使用自訂日誌群組,則 IAM 政策必須提供對自訂日誌群組的存取權:

{
    "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 日誌的權限

如果您在 AWS Glue 作業時使用安全組態,請檢查您的 AWS KMS 金鑰。附加到安全組態的 AWS KMS 金鑰必須允許 CloudWatch 日誌使用金鑰。將下列政策附加到 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,並且將 og-group-name 替換為您的日誌群組的名稱。

如需詳細資訊,請參閱使用 AWS Key Management Service 加密CloudWatch Logs 中的日誌資料

另請確認 logs:AssociateKmsKey IAM 權限已附加至 AWS Glue 角色。如需詳細資訊,請參閱具有連續日誌記錄的安全組態

連續日誌記錄功能未開啟

如果未開啟 AWS Glue Spark ETL 作業的連續日誌記錄功能,則會在作業完成後進行日誌彙總。如果作業在日誌彙總之前失敗,則可能無法將日誌推送到 CloudWatch。

為 AWS Glue 作業開啟連續日誌記錄功能,以便在應用程式失敗時填入日誌。

您沒有在正確的日誌群組中尋找日誌

如果開啟連續日誌記錄功能並使用預設日誌群組,則可以在下列位置找到 CloudWatch 日誌:

  • 自訂訊息,例如來自列印陳述式的訊息,會被推送至 /aws-glue/jobs/output 日誌群組

  • 來自 AWS Glue 日誌記錄程式的訊息會被推送到 /aws-glue/jobs/logs-v2 下的驅動程式日誌。

    logger = glueContext.get_logger()
    logger.info("MY INFO LOGGER MESSAGE" )
    logger.error("MY ERROR LOGGER MESSAGE")
  • 來自 Python 日誌記錄程式的訊息會被推送到 /aws-glue/jobs/output 下的驅動程式日誌。

    import logging
    MSG_FORMAT = '%(asctime)s %(levelname)s %(name)s: %(message)s'
    DATETIME_FORMAT = '%Y-%m-%d %H:%M:%S'
    logging.basicConfig(format=MSG_FORMAT, datefmt=DATETIME_FORMAT)
    logger2 = logging.getLogger("logger2")
    logger2.setLevel(logging.INFO)
    logger2.info("Test log message from python logging")
  • 使用安全組態的作業會將自訂訊息從 AWS Glue 日誌記錄程式推送到 /aws-glue/jobs/logs-v2-testconfig。將 testconfig 替換為安全組態的名稱。

  • 使用安全組態的作業會將自訂訊息從 Python 日誌記錄程式推送到 /aws-glue/jobs/testconfig-role/job-role/output。將 testconfig 替換為安全組態名稱,並將 job-role 替換為 AWS Glue 作業角色。

如果開啟連續日誌記錄功能並使用自訂日誌群組,則可以在下列位置找到 CloudWatch 日誌:

  • 自訂日誌訊息、驅動程式日誌和執行程式日誌儲存在自訂日誌群組下。

如果沒有開啟連續日誌記錄功能,則可以在下列位置找到 CloudWatch 日誌:

  • 諸如列印陳述式輸出和 Python 日誌記錄等訊息儲存在 /aws-glue/jobs/output 下。
  • 來自 AWS Glue 日誌記錄程式的所有自訂訊息儲存在 /aws-glue/jobs/error 下。

如需詳細資訊,請參閱日誌記錄行為

相關資訊

AWS Glue 中的日誌記錄和監控

監控 AWS Glue

AWS 官方
AWS 官方已更新 1 年前