AWS Glue の抽出、ロード、変換 (ETL) ジョブが Amazon CloudWatch にログを書き込みません。
簡単な説明
AWS Glue ジョブが CloudWatch にログを書き込まない場合は、以下を確認してください。
- AWS Glue ジョブには、必要な AWS Identity and Access Management (IAM) 権限がすべて備わっています。
- AWS Key Management Service (AWS KMS) キーにより、CloudWatch ログはキーを使用できるようになります。
- ジョブは正しい CloudWatch ロググループをチェックします。
- **Logs: AssociateKMSKey ** IAM 権限は AWS Glue ロールにアタッチされています。
- AWS Glue Spark ETL ジョブに継続的なログ記録を使用しない場合は、ログ集計の前にジョブが失敗したかどうかを確認します。
解決策
AWS Glue ジョブロールが、CloudWatch ロググループの作成および書き込みを実行するための IAM 許可を有していない
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 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 に、og-group-name をロググループの名前に置き換えます。
詳細については、AWS Key Management Service を使用して CloudWatchのログデータを暗号化するを参照してください。
また、Logs: AssociateKmsKey IAM 権限が AWS Glue ロールにアタッチされていることも確認してください。詳細については、継続的なロギングを使用したセキュリティ設定を参照してください。
継続的なロギングがオンにならない
AWS Glue Spark ETL ジョブの継続的なロギングを有効にしない場合は、ジョブ実行が完了した後にログ集計が実行されます。ログ集計の前にジョブが失敗した場合、ログは CloudWatch にプッシュされない可能性があります。
アプリケーションの障害に関係なくログが入力されるようにするために、AWS Glue ジョブの継続的なロギングを有効にします。
正しいロググループでログを探していない
継続的ロギングを有効にしてデフォルトのロググループを使用すると、CloudWatch ログは次の場所にあります。
-
print ステートメントからのメッセージなどのカスタムメッセージは /aws-glue/jobs/output ロググループにプッシュされます。
-
ロガーによって送信されたメッセージは /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 のログは次の場所にあります。
- print ステートメント出力や Python のロギングメッセージなどのメッセージは、/aws-glue/jobs/output に保存されます。
- AWS Glue ロガーからのすべてのカスタムメッセージは ** ** /aws-glue/jobs/error に保存されます。
詳細については、ログ記録の動作を参照してください。
関連情報
Logging and monitoring in AWS Glue
Monitoring AWS Glue