為什麼啟用任務指標後,還是無法看到 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 來管理許可。


此文章是否有幫助?


您是否需要帳單或技術支援?