Amazon Managed Service for Prometheus で Spark メトリクスをモニタリングする - Amazon EMR

Amazon Managed Service for Prometheus で Spark メトリクスをモニタリングする

Amazon EMR リリース 7.1.0 以降では、EMR Serverless を Amazon Managed Service for Prometheus と統合して、EMR Serverless ジョブとアプリケーションの Apache Spark メトリクスを収集できます。この統合は、AWS コンソール、EMR Serverless API、または AWS CLI を使用してジョブを送信するか、アプリケーションを作成するときに実施できます。

前提条件

Spark メトリクスを Amazon Managed Service for Prometheus に配信するには、次の前提条件を満たす必要があります。

  • Amazon Managed Service for Prometheus ワークスペースを作成します。このワークスペースは、取り込みエンドポイントとして機能します。エンドポイント - リモート書き込み URL に表示された URL を書き留めます。EMR Serverless アプリケーションを作成するときに URL を指定する必要があります。

  • モニタリング目的で Amazon Managed Service for Prometheus にジョブへのアクセス許可を付与するには、ジョブ実行ロールに次のポリシーを追加します。

    { "Sid": "AccessToPrometheus", "Effect": "Allow", "Action": ["aps:RemoteWrite"], "Resource": "arn:aws:aps:<AWS_REGION>:<AWS_ACCOUNT_ID>:workspace/<WORKSPACE_ID>" }

セットアップ

AWS コンソールを使用して、Amazon Managed Service for Prometheus と統合されたアプリケーションを作成するには
  1. Amazon EMR Serverless の使用を開始する」を参照してアプリケーションを作成します。

  2. アプリケーションの作成中に、[カスタム設定を使用する] を選択し、設定するフィールドに情報を指定してアプリケーションを設定します。

  3. [アプリケーションのログとメトリクス] で、[エンジンメトリクスを Amazon Managed Service for Prometheus に配信] を選択し、リモート書き込み URL を指定します。

  4. 必要な他の設定を指定し、[アプリケーションの作成と起動] を選択します。

AWS CLI または EMR Serverless API を使用する

AWS CLI または EMR Serverless API を使用して、create-application または start-job-run コマンドを実行しているときに EMR Serverless アプリケーションを Amazon Managed Service for Prometheus と統合することもできます。

create-application
aws emr-serverless create-application \ --release-label emr-7.1.0 \ --type "SPARK" \ --monitoring-configuration '{ "prometheusMonitoringConfiguration": { "remoteWriteUrl": "https://aps-workspaces.<AWS_REGION>.amazonaws.com/workspaces/<WORKSPACE_ID>/api/v1/remote_write" } }'
start-job-run
aws emr-serverless start-job-run \ --application-id <APPPLICATION_ID> \ --execution-role-arn <JOB_EXECUTION_ROLE> \ --job-driver '{ "sparkSubmit": { "entryPoint": "local:///usr/lib/spark/examples/src/main/python/pi.py", "entryPointArguments": ["10000"], "sparkSubmitParameters": "--conf spark.dynamicAllocation.maxExecutors=10" } }' \ --configuration-overrides '{ "monitoringConfiguration": { "prometheusMonitoringConfiguration": { "remoteWriteUrl": "https://aps-workspaces.<AWS_REGION>.amazonaws.com/workspaces/<WORKSPACE_ID>/api/v1/remote_write" } } }'

コマンドで prometheusMonitoringConfiguration を指定すると、EMR Serverless は Spark メトリクスを収集し、Amazon Managed Service for Prometheus の remoteWriteUrl エンドポイントに書き込むエージェントを使用して Spark ジョブを実行する必要があることが示されます。その後、Amazon Managed Service for Prometheus の Spark メトリクスを使用して、視覚化、アラート、分析を行うことができます。

高度な設定プロパティ

EMR Serverless は、PrometheusServlet という名前の Spark 内のコンポーネントを使用して Spark メトリクスを収集し、パフォーマンスデータを Amazon Managed Service for Prometheus と互換性のあるデータに変換します。デフォルトでは、EMR Serverless は Spark にデフォルト値を設定し、PrometheusMonitoringConfiguration を使用してジョブを送信するときにドライバーとエグゼキュターのメトリクスを解析します。

次の表は、Amazon Managed Service for Prometheus にメトリクスを送信する Spark ジョブを送信するときに設定できるすべてのプロパティを示しています。

Spark プロパティ デフォルト値 説明
spark.metrics.conf.*.sink.prometheusServlet.class

org.apache.spark.metrics.sink.PrometheusServlet

Spark が Amazon Managed Service for Prometheus にメトリクスを送信するために使用するクラス。デフォルトの動作をオーバーライドするには、独自のカスタムクラスを指定します。

spark.metrics.conf.*.source.jvm.class

org.apache.spark.metrics.source.JvmSource

Spark が基盤となる Java 仮想マシンから重要なメトリクスを収集して送信するために使用するクラス。JVM メトリクスの収集を停止するには、このプロパティを "" などの空の文字列に設定して無効にします。デフォルトの動作をオーバーライドするには、独自のカスタムクラスを指定します。

spark.metrics.conf.driver.sink.prometheusServlet.path

/metrics/prometheus

Amazon Managed Service for Prometheus がドライバーからメトリクスを収集するために使用する個別の URL。デフォルトの動作をオーバーライドするには、独自のパスを指定します。ドライバーメトリクスの収集を停止するには、このプロパティを "" などの空の文字列に設定して無効にします。

spark.metrics.conf.executor.sink.prometheusServlet.path

/metrics/executor/prometheus

Amazon Managed Service for Prometheus がエグゼキュターからメトリクスを収集するために使用する個別の URL。デフォルトの動作をオーバーライドするには、独自のパスを指定します。エグゼキュターメトリクスの収集を停止するには、このプロパティを "" などの空の文字列に設定して無効にします。

Spark メトリクスの詳細については、「Apache Spark メトリクス」を参照してください。

考慮事項と制限事項

Amazon Managed Service for Prometheus を使用して EMR Serverless からメトリクスを収集する場合は、以下の考慮事項と制限事項を検討してください。

  • Amazon Managed Service for Prometheus を EMR Serverless で使用するためのサポートは、Amazon Managed Service for Prometheus が一般的に利用可能な AWS リージョンでのみ利用できます。

  • Amazon Managed Service for Prometheus で Spark メトリクスを収集するためにエージェントを実行するには、より多くのワーカーのリソースが必要です。1 つの vCPU ワーカーなど、より小さなワーカーサイズを選択すると、ジョブの実行時間が長くなる可能性があります。

  • EMR Serverless で Amazon Managed Service for Prometheus を使用するためのサポートは、Amazon EMR リリース 7.1.0 以降でのみ利用できます。

  • Amazon Managed Service for Prometheus は、メトリクスを収集するために EMR Serverless を実行するのと同じアカウントにデプロイする必要があります。