为什么即使在我启用了任务指标之后,我仍然无法看到 AWS Glue ETL 任务的 Amazon CloudWatch 指标?

上次更新日期:2021 年 8 月 20 日

我已启用了为 AWS Glue 提取、转换和负载 (ETL) 任务创建任务指标的选项。但是,我看不到 Amazon CloudWatch 中的任务指标。

简短描述

AWS Glue 每 30 秒向 CloudWatch 发送一次指标,CloudWatch 控制台控制面板配置为每分钟显示这些指标。AWS Glue 指标代表之前报告的值的增量值。指标控制面板将 30 秒的值聚合起来,以获取最后一分钟的值。随着任务脚本中的 GlueContext 初始化,可以启用任务的任务指标。这些指标仅在 Apache Spark 任务结束时更新。任务指标表示所有已完成的 Spark 任务的聚合值。

解决方法

延长 AWS Glue 任务的运行时间:CloudWatch 指标每 30 秒报告一次。因此,如果任务的运行时间少于 30 秒,那么任务指标不会发送到 CloudWatch。AWS Glue 使用 Spark 中的指标,Spark 使用 DropWizard 指标库发布指标。要获取 AWS Glue 指标,您的任务必须运行至少 30 秒钟。更新任务以处理更多数据有助于延长任务的运行时间。但是,您可以使用临时解决方法来查看任务指标。您可以通过在任务中包含函数 time.sleep () 来增加 AWS Glue 任务的运行时间。您可以根据使用案例在代码的开头或结尾处包含 time.sleep ()。

重要提示:使用 time.sleep() 函数不是编码的最佳实践。

对于 Python:

import time
time.sleep(30)

对于 Scala:

Thread.sleep(30)

确保作业已完成 Spark 任务:作业指标在 Spark 任务完成后报告。因此,请检查并确认作业的 Spark 任务是否已完成,且作业没有失败。

确保在任务脚本中初始化了 GlueContext:任务脚本中的 GlueContext 类可以将指标写入 CloudWatch。如果您使用的是只使用 DataFrame 而不是 DynamicFrame 的自定义脚本,则可能无法初始化 GlueContext 类。这可能会导致指标无法写入 CloudWatch。如果您使用的是自定义脚本,请务必更新您的任务以初始化 GlueContext 类。

确保 AWS Glue IAM 角色具有所需的权限:检查并确认附加到 ETL 任务的 IAM 角色是否具有 CloudWatch: PutMetricData 在 CloudWatch 中创建指标的权限。如果您使用的是自定义角色,请确保该角色有权将任务指标写入 CloudWatch。
注意:最佳实践是使用 AWS 托管策略AWSGlueServiceRole 管理权限。


这篇文章对您有帮助吗?


您是否需要账单或技术支持?