ジョブメトリクスを有効にした後でも AWS Glue ETL ジョブの Amazon CloudWatch メトリクスを表示できないのはなぜですか?

最終更新日: 2021 年 8 月 20 日

AWS Glue の抽出、変換、ロード (ETL) ジョブのジョブメトリクスを作成するオプションを有効にしました。しかし、ジョブメトリクスが Amazon CloudWatch に表示されません。

簡単な説明

AWS Glue は 30 秒ごとに CloudWatch にメトリクスを送信し、CloudWatch コンソールダッシュボードは毎分これらのメトリクスを表示するように設定されています。AWS Glue メトリクスは、以前に報告された値からのデルタ値を表します。メトリクスダッシュボードは 30 秒の値を集約して、直前の 1 分の値を取得します。ジョブのジョブメトリクスは、ジョブスクリプト内の GlueContext を初期化すると有効になります。メトリクスが更新されるのは Apache Spark タスクの終了時です。ジョブメトリクスは、完了済みのすべての Spark タスクの集計値を表します。

解決方法

AWS Glue ジョブの実行時間を増やす。CloudWatch メトリクスは 30 秒ごとにレポートされます。したがって、ジョブの実行時間が 30 秒未満の場合、ジョブメトリクスは CloudWatch に送信されません。AWS Glue は Spark のメトリクスを使用し、Spark はメトリクスを公開するために DropWizard メトリクスライブラリを使用します。AWS Glue メトリクスを取得するには、ジョブを少なくとも 30 秒間実行する必要があります。より多くのデータを処理するようにジョブを更新すると、ジョブの実行時間を長くすることができます。一時的な回避策を使用してジョブのメトリクスを表示することもできます。AWS Glue ジョブの実行時間は、関数 time.sleep () をジョブに含めることによって長くすることができます。time.sleep () は、ユースケースに基づいて、コードの最初または末尾でジョブに含めることができます。

重要: time.sleep () 関数の使用は、コーディングのベストプラクティスではありません。

Python の場合:

import time
time.sleep(30)

Scala の場合:

Thread.sleep(30)

ジョブが Spark タスクを完了したことを確認します。ジョブメトリクスは、Spark タスクの完了後にレポートされます。したがって、ジョブの Spark タスクが完了したこと、およびジョブが失敗していないことを確認します。

GlueContext がジョブスクリプトで初期化されていることを確認します。ジョブスクリプトの GlueContext クラスにより、CloudWatch へのメトリクスの書き込みが可能になります。DynamicFrame でなく DataFrame のみを使用するカスタムスクリプトを使用している場合は、GlueContext クラスが初期化されない可能性があります。その結果、メトリクスが CloudWatch に書き込まれない可能性があります。カスタムスクリプトを使用している場合は、GlueContext クラスを初期化するようにジョブを更新してください。

AWS Glue IAM ロールに必要なアクセス許可があることを確認します。ETL ジョブにアタッチされた IAM ロールに CloudWatch でメトリクスを作成するための cloudwatch:PutMetricData アクセス許可があることを確認してください。カスタムロールを使用している場合は、ジョブメトリクスを CloudWatch に書き込むアクセス許可がロールにあることを確認してください。
注意: AWS 管理ポリシー AWSGlueServiceRole を使用してアクセス許可を管理することをお勧めします。


この記事はお役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?