¿Por qué mi trabajo de AWS Glue no escribe registros en Amazon CloudWatch?

4 minutos de lectura
0

Mi trabajo de extracción, transformación y carga (ETL) de AWS Glue no escribe registros en Amazon CloudWatch.

Breve descripción

Si sus trabajos de AWS Glue no escriben registros en CloudWatch, confirme lo siguiente:

  • Su trabajo de AWS Glue cuenta con todos los permisos necesarios de AWS Identity and Access Management (IAM).
  • La clave de AWS Key Management Service (AWS KMS) permite que Registros de CloudWatch la utilice.
  • Su trabajo comprueba que el grupo de registros de CloudWatch sea correcto.
  • El permiso de IAM logs:AssociateKmsKey está asociado al rol de AWS Glue.
  • Si no utiliza el registro continuo para su trabajo de ETL de Spark en AWS Glue, compruebe si el error en el trabajo se ha producido antes de agregar el registro.

Solución

El rol de trabajo de AWS Glue carece de los permisos para crear y escribir en el grupo de registro de CloudWatch

Si no usa la política administrada AWSGlueServiceRole, confirme que el rol de IAM asociado al trabajo de ETL tenga los permisos correctos. Para usar CloudWatch se requieren los siguientes permisos. Si el trabajo utiliza un grupo de registro personalizado, la política de IAM debe proporcionar acceso a dicho grupo:

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

Nota: Sustituya arn:aws:logs:*:*:*:/customlogs/* por el ARN del grupo de registro personalizado.

La clave de AWS KMS no concede permiso a Registros de CloudWatch

Si usa configuraciones de seguridad para su trabajo de AWS Glue, compruebe su clave de AWS KMS. La clave de AWS KMS asociada a la configuración de seguridad debe permitir que Registros de CloudWatch la utilice. Asocie la siguiente política a la clave de 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"
        }
    }
}

Sustituya us-west-2 por su región de AWS, 1111222233334444 por el ID de su cuenta de AWS y og-group-name por el nombre de su grupo de registro.

Para obtener más información, consulte Encrypt log data in CloudWatch Logs using AWS Key Management Service.

Además, conforme si el permiso de IAM logs:AssociateKmsKey está asociado al rol de AWS Glue. Para obtener más información, consulte Security configuration with continuous logging.

El registro continuo no está activado

Si no ha activado el registro continuo para su trabajo de ETL de Spark de AWS Glue, el registro se agregará una vez completado. Si se produce un error en el trabajo antes de la agregación del registro, es posible que los registros no se envíen a CloudWatch.

Active el registro continuo de sus trabajos de AWS Glue para que los registros se rellenen en caso de que las aplicaciones fallen.

No está buscando los registros en el grupo de registro correcto

Si activa el registro continuo y usa los grupos de registro predeterminados, encontrará los registros de CloudWatch en las siguientes ubicaciones:

  • Los mensajes personalizados, como los de las instrucciones de impresión, se envían al grupo de registro /aws-glue/jobs/output.

  • Los mensajes del registrador de AWS Glue se envían a los registros del controlador en /aws-glue/jobs/logs-v2.

    logger = glueContext.get_logger()
    logger.info("MY INFO LOGGER MESSAGE" )
    logger.error("MY ERROR LOGGER MESSAGE")
  • Los mensajes de un registrador de Python se envían a los registros del controlador en /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")
  • Los trabajos que utilizan configuraciones de seguridad envían mensajes personalizados desde el registrador de AWS Glue a /aws-glue/jobs/logs-v2-testconfig. Sustituya testconfig por el nombre de la configuración de seguridad.

  • Los trabajos que usan configuraciones de seguridad envían mensajes personalizados desde un registrador de Python a /aws-glue/jobs/testconfig-role/job-role/output. Sustituya testconfig por el nombre de la configuración de seguridad y job-role por el rol del trabajo de AWS Glue.

Si activa el registro continuo y usa grupos de registro personalizados, encontrará los registros de CloudWatch en la siguiente ubicación:

  • Los mensajes de registro personalizados, los registros de controladores y los registros de ejecutores se almacenan en el grupo de registro personalizado.

Si no activa el registro continuo, encontrará los registros de CloudWatch en las siguientes ubicaciones:

  • Los mensajes, como los resultados de las instrucciones de impresión y los mensajes de registro de Python, se almacenan en /aws-glue/jobs/output.
  • Todos los mensajes personalizados del registrador de AWS Glue se almacenan en /aws-glue/jobs/error.

Para obtener más información, consulte Logging behavior.

Información relacionada

Logging and monitoring in AWS Glue

Monitoring AWS Glue

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año