我的 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