Pourquoi ne puis-je pas voir les métriques Amazon CloudWatch de ma tâche AWS Glue ETL même après avoir activé les métriques de tâche ?

Dernière mise à jour : 20/08/2021

J'ai activé l'option permettant de créer des métriques de tâche pour ma tâche Extract-transform-load (ETL) AWS Glue. Toutefois, je ne vois pas les métriques de tâche dans Amazon CloudWatch.

Brève description

AWS Glue envoie des métriques à CloudWatch toutes les 30 secondes, et le tableau de bord de la console CloudWatch est configuré pour afficher ces métriques toutes les minutes. Les métriques AWS Glue représentent les valeurs delta des valeurs déjà signalées. Le tableau de bord des métriques agrège les valeurs de 30 secondes, afin d'obtenir une valeur pour la dernière minute. Les métriques de tâche de votre tâche sont activées avec l'initialisation d'un GlueContext dans le script de tâche. Les métriques sont mises à jour uniquement à la fin d'une tâche Apache Spark. Les métriques de tâche représentent les valeurs agrégées de toutes les tâches Spark terminées.

Résolution

Augmentez la durée d'exécution de votre tâche AWS Glue : les métriques CloudWatch sont signalées toutes les 30 secondes. Par conséquent, si la durée d'exécution de votre tâche est inférieure à 30 secondes, les métriques de tâche ne seront pas envoyées à CloudWatch. AWS Glue utilise les métriques de Spark, et Spark utilise la bibliothèque de métriques DropWizard pour la publication des métriques. Pour obtenir les métriques AWS Glue, votre tâche doit être fonctionner pendant au moins 30 secondes. La mise à jour de votre tâche pour traiter davantage de données peut contribuer à augmenter la durée d'exécution de votre tâche. Toutefois, vous pouvez vous servir d'une solution de contournement temporaire pour voir les métriques de tâche. Vous pouvez augmenter la durée d'exécution de votre tâche AWS Glue en intégrant la fonction time.sleep() dans votre tâche. Vous pouvez intégrer la fonction time.sleep() dans votre tâche au début ou à la fin du code selon votre cas d'utilisation.

Important : L'utilisation de la fonction time.sleep() n'est pas une bonne pratique de codage.

Pour Python :

import time
time.sleep(30)

Pour Scala :

Thread.sleep(30)

Assurez-vous que la tâche a terminé les tâches Spark : les métriques de tâche sont signalées une fois les tâches Spark terminées. Par conséquent, vérifiez et confirmez que les tâches Spark de votre tâche sont terminées et que la tâche n'a pas échoué.

Assurez-vous que GlueContext est initialisé dans le script de tâche : la classe GlueContext de votre script de tâche permet l'écriture de métriques dans CloudWatch. Si vous utilisez un script personnalisé qui utilise uniquement un DataFrame et non un DynamicFrame, la classe GlueContext peut ne pas être initialisée. Il se peut que les métriques ne soient pas écrites dans CloudWatch. Si vous utilisez un script personnalisé, mettez à jour votre tâche pour initialiser la classe GlueContext.

Assurez-vous que le rôle AWS Glue IAM dispose de l'autorisation requise : vérifiez et confirmez que le rôle IAM attaché à la tâche ETL dispose de l'autorisation cloudwatch:PutMetricData permettant de créer des métriques dans CloudWatch. Si vous utilisez un rôle personnalisé, assurez-vous que le rôle est autorisé à écrire les métriques de tâche dans CloudWatch.
Remarque : Il est recommandé d'utiliser la politique gérée AWS AWSGlueServiceRole pour la gestion des autorisations.


Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?