Amazon CloudWatch メトリクスを使用した AWS Glue のモニタリング - AWS Glue

Amazon CloudWatch メトリクスを使用した AWS Glue のモニタリング

AWS Glue ジョブプロファイラーを使用して AWS Glue オペレーションをプロファイルおよびモニタリングできます。AWS Glue ジョブから raw データが収集され、ほぼリアルタイムの読み取り可能なメトリクスに加工されて、Amazon CloudWatch に保存されます。これらの統計は CloudWatch に保持されて集計されるため、履歴情報にアクセスしてアプリケーションの動作をより的確に把握できます。

注記

ジョブメトリクスを有効にし、CloudWatch カスタムメトリクスが作成されると、追加料金が発生することがあります。詳細については、「Amazon CloudWatch の料金」を参照してください。

AWS Glue メトリクスの概要

AWS Glue を操作するときに、CloudWatch にメトリクスが送信されます。これらのメトリクスは、AWS Glue コンソール (推奨される方法)、CloudWatch コンソールダッシュボード、または AWS Command Line Interface (AWS CLI) で表示できます。

AWS Glue コンソールダッシュボードを使ってメトリクスを表示するには

ジョブのメトリクスの概要または詳細なグラフを表示したり、ジョブの実行の詳細なグラフを表示したりできます。

  1. AWS Management Consoleにサインインし、AWS Glue コンソール (https://console.aws.amazon.com/glue/) を開きます。

  2. ナビゲーションペインで、[ジョブ実行モニタリング] を選択します。

  3. [Job の実行][アクション] を選択して、現在実行中のジョブの停止、ジョブの表示、またはジョブのブックマークの巻き戻しを実行します。

  4. ジョブを選択し、[実行の詳細を表示する] を選択すると、そのジョブ実行に関する追加情報が表示されます。

CloudWatch コンソールダッシュボードを使用してメトリクスを表示するには

メトリクスはまずサービスの名前空間ごとにグループ化され、次に各名前空間内のさまざまなディメンションの組み合わせごとにグループ化されます。

  1. CloudWatch コンソール (https://console.aws.amazon.com/cloudwatch/) を開きます。

  2. ナビゲーションペインで [Metrics (メトリクス)] を選択します。

  3. [Glue] 名前空間を選択します。

AWS CLI を使ってメトリクスを表示するには
  • コマンドプロンプトで、次のコマンドを使用します。

    aws cloudwatch list-metrics --namespace Glue

メトリクスは 30 秒ごとに AWS Glue から CloudWatch に報告され、CloudWatch メトリクスダッシュボードは 1 分ごとにそれらを表示するように設定されています。AWS Glue メトリクスは、以前に報告された値からデルタ値を表示します。必要に応じて、メトリクスのダッシュボードにより 30 秒の値が集計 (合計) され、直近 1 分間分の値を取得できます。

Spark ジョブの AWS Glue メトリクス動作

AWS Glue メトリクスは、スクリプトでの GlueContext の初期化時に有効になり、基本的には Apache Spark タスクの終了時にのみ更新されます。また、これまでに完了した Spark タスク全体の集計値を表します。

ただし、AWS Glue が CloudWatch に渡す Spark メトリクスは、一般的に報告された時点で現在の状態を表す絶対値です。それらは 30 秒ごとに AWS Glue から CloudWatch に報告され、一般的にメトリクスダッシュボードには直近 1 分間に受け取ったデータポイントの平均が表示されます。

すべての AWS Glue メトリクス名の前には、必ず次のいずれかの種類のプレフィックスが付きます。

  • glue.driver. – 名前がこのプレフィックスで始まるメトリクスは、Spark ドライバーのすべてのエグゼキュターから集計された AWS Glue メトリクスか、Spark ドライバーに対応する Spark メトリクスを表します。

  • .executorIdglue.executorId は、特定の Spark エグゼキュターの番号です。ログに表示されているエグゼキュータに対応します。

  • glue.ALL. – 名前がこのプレフィックスで始まるメトリクスは、すべての Spark エグゼキュターからの値を集計します。

AWS Glue のメトリクス

AWS Glue によって、プロファイルが作成され、次のメトリクスが 30 秒ごとに CloudWatch に送信され、AWS Glue メトリクスダッシュボードに 1 分に 1 回表示されます。

メトリクス 説明

glue.driver.aggregate.bytesRead

すべてのエグゼキュターで実行され完了したすべての Spark タスクによるすべてのデータソースから読み取られたバイト数。

有効なディメンション: JobName (AWS Glue Job の名前)、JobRunId (JobRun ID. または ALL)、Type (カウント)。

有効な統計: SUM。このメトリクスは、最後に報告された値からのデルタ値であるため、AWS Glue メトリクスダッシュボードでは、集計に SUM 統計が使用されます。

単位: バイト

次のモニタリングに使用できます。

  • 読み込みバイト。

  • ジョブ進行状況。

  • JDBC データソース。

  • ジョブブックマークの問題。

  • ジョブ実行間の差異。

このメトリクスは、glue.ALL.s3.filesystem.read_bytes メトリクスと同様に使用できます。ただし、このメトリクスは Spark タスクの最後に更新され、S3 以外のデータソースも取得するという点が異なります。

glue.driver.aggregate.elapsedTime

ETL の経過時間 (ミリ秒単位) (ジョブのブートストラップ時間は含まれません)。

有効なディメンション: JobName (AWS Glue Job の名前)、JobRunId (JobRun ID. または ALL)、Type (カウント)。

有効な統計: SUM。このメトリクスは、最後に報告された値からのデルタ値であるため、AWS Glue メトリクスダッシュボードでは、集計に SUM 統計が使用されます。

単位: ミリ秒

ジョブの実行に平均どのくらいの時間がかかるかを調べるために利用できます。

データの使用法をいくつか次に示します。

  • ストラグラーにアラームを設定する。

  • ジョブ実行間の差異を測定する。

glue.driver.aggregate.numCompletedStages

ジョブの完了したステージの数

有効なディメンション: JobName (AWS Glue Job の名前)、JobRunId (JobRun ID. または ALL)、Type (カウント)。

有効な統計: SUM。このメトリクスは、最後に報告された値からのデルタ値であるため、AWS Glue メトリクスダッシュボードでは、集計に SUM 統計が使用されます。

単位: 個

次のモニタリングに使用できます。

  • ジョブ進行状況。

  • 他のメトリクスとの関連におけるジョブ実行のステージごとのタイムライン。

データの使用法をいくつか次に示します。

  • ジョブの実行における要求の厳しい段階を特定する。

  • ジョブ実行全体の中で関連するスパイク (要求の厳しいステージ) にアラームを設定する。

glue.driver.aggregate.numCompletedTasks

ジョブで完了したタスクの数。

有効なディメンション: JobName (AWS Glue Job の名前)、JobRunId (JobRun ID. または ALL)、Type (カウント)。

有効な統計: SUM。このメトリクスは、最後に報告された値からのデルタ値であるため、AWS Glue メトリクスダッシュボードでは、集計に SUM 統計が使用されます。

単位: 個

次のモニタリングに使用できます。

  • ジョブ進行状況。

  • ステージ内の並列性。

glue.driver.aggregate.numFailedTasks

失敗したタスクの数。

有効なディメンション: JobName (AWS Glue Job の名前)、JobRunId (JobRun ID. または ALL)、Type (カウント)。

有効な統計: SUM。このメトリクスは、最後に報告された値からのデルタ値であるため、AWS Glue メトリクスダッシュボードでは、集計に SUM 統計が使用されます。

単位: 個

次のモニタリングに使用できます。

  • ジョブのタスクが失敗する原因となるデータ異常。

  • ジョブのタスクが失敗する原因となるクラスター異常。

  • ジョブのタスクが失敗する原因となるスクリプト異常。

データを使用して、データ、クラスター、スクリプトの異常を示唆する可能性のある障害の増加に対するアラームを設定できます。

glue.driver.aggregate.numKilledTasks

強制終了したタスクの数。

有効なディメンション: JobName (AWS Glue Job の名前)、JobRunId (JobRun ID. または ALL)、Type (カウント)。

有効な統計: SUM。このメトリクスは、最後に報告された値からのデルタ値であるため、AWS Glue メトリクスダッシュボードでは、集計に SUM 統計が使用されます。

単位: 個

次のモニタリングに使用できます。

  • タスクが強制終了される例外 (OOM) が発生するデータスキュー異常。

  • タスクが強制終了される例外 (OOM) が発生するスクリプト異常。

データの使用法をいくつか次に示します。

  • データ異常を示す障害が増加した場合のアラームを設定する。

  • クラスター異常を示す障害が増加した場合のアラームを設定する。

  • スクリプト異常を示す障害が増加した場合のアラームを設定する。

glue.driver.aggregate.recordsRead

すべてのエグゼキュターで実行され完了したすべての Spark タスクによるすべてのデータソースから読み取られたレコードの数。

有効なディメンション: JobName (AWS Glue Job の名前)、JobRunId (JobRun ID. または ALL)、Type (カウント)。

有効な統計: SUM。このメトリクスは、最後に報告された値からのデルタ値であるため、AWS Glue メトリクスダッシュボードでは、集計に SUM 統計が使用されます。

単位: 個

次のモニタリングに使用できます。

  • 読み込まれたレコード。

  • ジョブ進行状況。

  • JDBC データソース。

  • ジョブブックマークの問題。

  • ジョブ実行の日々のスキュー。

このメトリクスは、glue.ALL.s3.filesystem.read_bytes メトリクスと同様に使用できますが、このメトリクスは Spark タスクの最後に更新される点が異なります。

glue.driver.aggregate.shuffleBytesWritten

前のレポート以降にデータをシャッフルするためにそれらのエグゼキュターにより書き込まれたバイト数 (直前の 1 分間にこの目的のために書き込まれたバイト数として AWS Glue メトリクスダッシュボードにより集計)。

有効なディメンション: JobName (AWS Glue Job の名前)、JobRunId (JobRun ID. または ALL)、Type (カウント)。

有効な統計: SUM。このメトリクスは、最後に報告された値からのデルタ値であるため、AWS Glue メトリクスダッシュボードでは、集計に SUM 統計が使用されます。

単位: バイト

ジョブのデータシャッフル (大規模な結合、グループ化、再分割、合体) をモニタリングするために使用できます。

データの使用法をいくつか次に示します。

  • さらに処理する前に、大きな入力ファイルを再分割または解凍します。

  • ホットキーを避けるために、データをより均一に再分割します。

  • 結合またはグループ化オペレーションの前にデータを事前にフィルタリングします。

glue.driver.aggregate.shuffleLocalBytesRead

前のレポート以降にデータをシャッフルするためにそれらのエグゼキュターにより読み取られたバイト数 (直前の 1 分間にこの目的のために読み取られたバイト数として AWS Glue メトリクスダッシュボードにより集計)。

有効なディメンション: JobName (AWS Glue Job の名前)、JobRunId (JobRun ID. または ALL)、Type (カウント)。

有効な統計: SUM。このメトリクスは、最後に報告された値からのデルタ値であるため、AWS Glue メトリクスダッシュボードでは、集計に SUM 統計が使用されます。

単位: バイト

ジョブのデータシャッフル (大規模な結合、グループ化、再分割、合体) をモニタリングするために使用できます。

データの使用法をいくつか次に示します。

  • さらに処理する前に、大きな入力ファイルを再分割または解凍します。

  • ホットキーを使用して、データをより均一に再分割します。

  • 結合またはグループ化オペレーションの前にデータを事前にフィルタリングします。

glue.driver.BlockManager.disk.diskSpaceUsed_MB

すべてのエグゼキュターで使用されたディスク領域のメガバイト数。

有効なディメンション: JobName (AWS Glue Job の名前)、JobRunId (JobRun ID. または ALL)、Type (ゲージ)。

有効な統計: Average これは Spark メトリクスで、絶対値としてレポートされます。

単位: メガバイト

次のモニタリングに使用できます。

  • キャッシュされた RDD パーティションを表すブロックに使用されるディスク領域。

  • 中間シャッフル出力を表すブロックに使用されるディスク領域。

  • ブロードキャストを表すブロックに使用されるディスク領域。

データの使用法をいくつか次に示します。

  • ディスク使用量の増加によるジョブの障害を特定する。

  • スピルやシャッフルを引き起こす大きなパーティションを特定する。

  • これらの問題を解決するためにプロビジョニングされた DPU 容量を増やす。

glue.driver.ExecutorAllocationManager.executors.numberAllExecutors

アクティブに実行されているジョブエグゼキュターの数。

有効なディメンション: JobName (AWS Glue Job の名前)、JobRunId (JobRun ID. または ALL)、Type (ゲージ)。

有効な統計: Average これは Spark メトリクスで、絶対値としてレポートされます。

単位: 個

次のモニタリングに使用できます。

  • ジョブアクティビティ。

  • 高負荷エグゼキュター (少数のエグゼキュターのみが実行されている)

  • 現在のエグゼキュターレベルの並列処理。

データの使用法をいくつか次に示します。

  • クラスターの使用率が低い場合に、事前に大きな入力ファイルを再分割または解凍する。

  • 一部が高負荷であるために起こるステージまたはジョブ実行の遅延を特定する。

  • • numberMaxNeededExecutors と比較して、より多くの DPU をプロビジョニングするためにバックログを理解する。

glue.driver.ExecutorAllocationManager.executors.numberMaxNeededExecutors

現在の負荷を満たすために必要な (アクティブに実行中および保留中の) ジョブエグゼキュターの最大数。

有効なディメンション: JobName (AWS Glue Job の名前)、JobRunId (JobRun ID. または ALL)、Type (ゲージ)。

有効な統計: Maximum。これは Spark メトリクスで、絶対値としてレポートされます。

単位: 個

次のモニタリングに使用できます。

  • ジョブアクティビティ。

  • DPU の容量または強制終了/失敗したエグゼキュターのために使用できないエグゼキュターが原因で、まだスケジュールされていない現在のエグゼキュターレベルの並列処理と保留タスクのバックログ。

データの使用法をいくつか次に示します。

  • スケジューリングキューの保留中/バックログを特定する。

  • 一部が高負荷であるために起こるステージまたはジョブ実行の遅延を特定する。

  • numberAllExecutors と比較して、より多くの DPU をプロビジョニングするためにバックログを理解する。

  • プロビジョニングされた DPU 容量を増やして、保留中のエグゼキュターのバックログを修正する。

glue.driver.jvm.heap.usage

glue.executorId.jvm.heap.usage

glue.ALL.jvm.heap.usage

ドライバー、executorId により識別されるエグゼキュター、またはすべてのエグゼキュターに対する、このドライバー (スケール: 0~1) の JVM ヒープにより使用されるメモリの割合。

有効なディメンション: JobName (AWS Glue Job の名前)、JobRunId (JobRun ID. または ALL)、Type (ゲージ)。

有効な統計: Average これは Spark メトリクスで、絶対値としてレポートされます。

単位: パーセント

次のモニタリングに使用できます。

  • glue.driver.jvm.heap.usage 使用時のドライバーのメモリ不足状態 (OOM)。

  • glue.ALL.jvm.heap.usage 使用時のエグゼキュターのメモリ不足状態 (OOM)。

データの使用法をいくつか次に示します。

  • メモリを消費するエグゼキュター ID とステージを特定する。

  • 高負荷のエグゼキュター ID とステージを特定する。

  • ドライバーのメモリ不足状態 (OOM) を特定する。

  • エグゼキュターのメモリ不足状態 (OOM) を特定し、対応するエグゼキュター ID を取得して、エグゼキュターログからスタックトレースを取得できるようにする。

  • 高負荷またはメモリ不足状態 (OOM) の原因となるデータのスキューがある可能性があるファイルまたはパーティションを特定します。

glue.driver.jvm.heap.used

glue.executorId.jvm.heap.used

glue.ALL.jvm.heap.used

ドライバー、executorId によって特定されたエグゼキュター、またはすべてのエグゼキュターのために JVM ヒープが使用したメモリバイト数。

有効なディメンション: JobName (AWS Glue Job の名前)、JobRunId (JobRun ID. または ALL)、Type (ゲージ)。

有効な統計: Average これは Spark メトリクスで、絶対値としてレポートされます。

単位: バイト

次のモニタリングに使用できます。

  • ドライバーのメモリ不足状態 (OOM)。

  • エグゼキュターのメモリ不足状態 (OOM)。

データの使用法をいくつか次に示します。

  • メモリを消費するエグゼキュター ID とステージを特定する。

  • 高負荷のエグゼキュター ID とステージを特定する。

  • ドライバーのメモリ不足状態 (OOM) を特定する。

  • エグゼキュターのメモリ不足状態 (OOM) を特定し、対応するエグゼキュター ID を取得して、エグゼキュターログからスタックトレースを取得できるようにする。

  • 高負荷またはメモリ不足状態 (OOM) の原因となるデータのスキューがある可能性があるファイルまたはパーティションを特定します。

glue.driver.s3.filesystem.read_bytes

glue.executorId.s3.filesystem.read_bytes

glue.ALL.s3.filesystem.read_bytes

前のレポート以降に、ドライバー、executorId によって特定されるエグゼキュター、またはすべてのエグゼキュターが Amazon S3 から読み取ったバイト数 (直前 1 分間に読み取ったバイト数として AWS Glue メトリクスダッシュボードに集計されます)。

有効なディメンション: JobNameJobRunId、および Type (ゲージ)。

有効な統計: SUM。このメトリクスは、最後に報告された値からのデルタ値であるため、AWS Glue メトリクスダッシュボードでは、集計に SUM 統計が使用されます。AWS Glue メトリクスダッシュボードのカーブの下にある領域は、2 つの異なるジョブ実行によって読み取られたバイト数を視覚的に比較するために使用できます。

単位: バイト

次のモニタリングに使用できます。

  • ETL データ移動。

  • ジョブ進行状況。

  • ジョブのブックマークの問題 (処理されたデータ、再処理されたデータ、およびスキップされたデータ)

  • 読み取りと外部データソースからの取り込みとの比率の比較。

  • ジョブ実行間の差異。

結果データは、次の目的で使用できます。

  • DPU 容量の計画。

  • ジョブ実行およびジョブステージのデータ読み取りの急激な増加または落ち込みに対するアラームの設定

glue.driver.s3.filesystem.write_bytes

glue.executorId.s3.filesystem.write_bytes

glue.ALL.s3.filesystem.write_bytes

前のレポート以降に、ドライバー、executorId によって特定されるエグゼキュター、またはすべてのエグゼキュターが Amazon S3 に書き込んだバイト数 (直前 1 分間に書き込んだバイト数として AWS Glue メトリクスダッシュボードに集計されます)。

有効なディメンション: JobNameJobRunId、および Type (ゲージ)。

有効な統計: SUM。このメトリクスは、最後に報告された値からのデルタ値であるため、AWS Glue メトリクスダッシュボードでは、集計に SUM 統計が使用されます。AWS Glue メトリクスダッシュボードのカーブの下にある領域は、2 つの異なるジョブ実行によって書き込まれたバイト数を視覚的に比較するために使用できます。

単位: バイト

次のモニタリングに使用できます。

  • ETL データ移動。

  • ジョブ進行状況。

  • ジョブのブックマークの問題 (処理されたデータ、再処理されたデータ、およびスキップされたデータ)

  • 読み取りと外部データソースからの取り込みとの比率の比較。

  • ジョブ実行間の差異。

データの使用法をいくつか次に示します。

  • DPU 容量の計画。

  • ジョブ実行およびジョブステージのデータ読み取りの急激な増加または落ち込みに対するアラームの設定

glue.driver.streaming.numRecords

マイクロバッチで受信されたレコードの数。このメトリクスは AWS Glue バージョン 2.0 以降の AWS Glue ストリーミングジョブにのみ使用できます。です。

有効なディメンション: JobName (AWS Glue Job の名前)、JobRunId (JobRun ID. または ALL)、Type (カウント)。

有効な統計: Sum, Maximum, Minimum, Average, Percentile

単位: 個

次のモニタリングに使用できます。

  • 読み込まれたレコード。

  • ジョブ進行状況。

glue.driver.streaming.batchProcessingTimeInMs

バッチの処理に要する時間 (ミリ秒単位)。このメトリクスは AWS Glue バージョン 2.0 以降の AWS Glue ストリーミングジョブにのみ使用できます。です。

有効なディメンション: JobName (AWS Glue Job の名前)、JobRunId (JobRun ID. または ALL)、Type (カウント)。

有効な統計: Sum, Maximum, Minimum, Average, Percentile

単位: 個

次のモニタリングに使用できます。

  • ジョブ進行状況。

  • スクリプトのパフォーマンス。

glue.driver.system.cpuSystemLoad

glue.executorId.system.cpuSystemLoad

glue.ALL.system.cpuSystemLoad

ドライバー、executorId により識別されるエグゼキュター、またはすべてのエグゼキュターに対する使用された CPU システムロードの割合 (スケール: 0 ~ 1)。

有効なディメンション: JobName (AWS Glue Job の名前)、JobRunId (JobRun ID. または ALL)、Type (ゲージ)。

有効な統計: Average このメトリクスは絶対値としてレポートされます。

単位: パーセント

次のモニタリングに使用できます。

  • ドライバー CPU 負荷。

  • エグゼキュター CPU 負荷。

  • ジョブ内の CPU 制約または IO 制約のエグゼキュターまたはステージの検出。

データの使用法をいくつか次に示します。

  • IO メトリクス (読み取りバイト数/シャッフルバイト数、タスクの並列処理) および必要な最大エグゼキュター数のメトリクスとともに、DPU 容量を計画する。

  • CPU/IO 制約比を確認する。これにより、CPU 使用率が低い分割可能なデータセットを使用して、長時間実行されるジョブに対して、再分割とプロビジョニングされた容量の増加が可能になります。

AWS Glue メトリクスのディメンション

AWS Glue メトリクスは AWS Glue 名前空間を使用し、以下のディメンションのメトリクスを提供しています。

ディメンション 説明

JobName

このディメンションで、特定の AWS Glue ジョブのすべてのジョブ実行のメトリクスがフィルタリングされます。

JobRunId

このディメンションで、JobRun ID によって特定の AWS Glue ジョブ実行のメトリクスがフィルタリングされるか、ALL となります。

Type

このディメンションで、count (集計した数) または gauge (ある時点での値) によってメトリクスがフィルタリングされます。

詳細については、『Amazon CloudWatch ユーザーガイド』を参照してください。