Por que não consigo ver as métricas do Amazon CloudWatch para o meu trabalho de AWS Glue ETL mesmo depois de habilitar as métricas de trabalho?

Data da última atualização: 20/08/2021

Eu habilitei a opção para criar métricas de trabalho para meu trabalho de extrair, transformar e carregar (ETL) do AWS Glue. No entanto, não consigo ver as métricas de trabalho no Amazon CloudWatch.

Descrição breve

O AWS Glue envia métricas para o CloudWatch a cada 30 segundos, e o painel do console do CloudWatch é configurado para exibir as métricas a cada minuto. As métricas do AWS Glue representam valores delta de valores relatados anteriormente. O painel de métricas agrega os valores de 30 segundos para obter um valor para o último minuto. As métricas de trabalho para o trabalho são habilitadas com a inicialização de um GlueContext no script de trabalho. As métricas são atualizadas somente no final de uma tarefa do Apache Spark. As métricas de trabalho representam os valores agregados em todas as tarefas do Spark concluídas.

Resolução

Aumente o tempo de execução do trabalho do AWS Glue: as métricas do CloudWatch são relatadas a cada 30 segundos. Portanto, se o tempo de execução do trabalho for inferior a 30 segundos, as métricas de trabalho não serão enviadas para o CloudWatch. O AWS Glue usa as métricas do Spark, e o Spark usa a biblioteca de métricas do DropWizard para publicar métricas. Para obter as métricas do AWS Glue, seu trabalho deve ser executado por pelo menos 30 segundos. Atualizar o trabalho para processar mais dados pode ajudar a aumentar o tempo de execução do trabalho. No entanto, você pode usar uma solução temporária para ver as métricas de trabalho. Você pode aumentar o tempo de execução do trabalho do AWS Glue incluindo a função time.sleep() no trabalho. Você pode incluir time.sleep() em seu trabalho no início ou no final do código com base no seu caso de uso.

Importante: usar a função time.sleep() não é uma prática recomendada de codificação.

Para Python:

import time
time.sleep(30)

Para Scala:

Thread.sleep(30)

Verifique e confirme se o trabalho concluiu as tarefas do Spark: as métricas de trabalho são relatadas após a conclusão das tarefas do Spark. Portanto, verifique e confirme se as tarefas do Spark para o seu trabalho foram concluídas e se o trabalho não falhou.

Verfique e confirme se o GlueContext está inicializado no script de trabalho: a classe GlueContext no script de trabalho permite gravar métricas no CloudWatch. Se você estiver usando um script personalizado que usa apenas um DataFrame e não um DynamicFrame, a classe GlueContext pode não ser iniciada. Isso pode fazer com que as métricas não sejam gravadas no CloudWatch. Se você estiver usando um script personalizado, atualize seu trabalho para inicializar a classe GlueContext.

Verifique e confirme se a função do IAM do AWS Glue possui a permissão necessária: verifique e confirme se a função do IAM anexada ao trabalho ETL tem a permissão cloudwatch:PutMetricData para criar métricas no CloudWatch. Se você estiver usando um papel personalizado, verifique se a função tem permissão para gravar as métricas de trabalho no CloudWatch.
Observação: é uma prática recomendada usar a política gerenciada da AWSAWSGlueServiceRole para gerenciar permissões.