

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# EMR Serverless のモニタリング
<a name="metrics"></a>

このセクションでは、Amazon EMR Serverless アプリケーションとジョブをモニタリングする方法について説明します。

**Topics**
+ [EMR Serverless アプリケーションとジョブのモニタリング](app-job-metrics.md)
+ [Amazon Managed Service for Prometheus で Spark メトリクスをモニタリングする](monitor-with-prometheus.md)
+ [EMR Serverless 使用状況メトリクス](monitoring-usage.md)

# EMR Serverless アプリケーションとジョブのモニタリング
<a name="app-job-metrics"></a>

EMR Serverless の Amazon CloudWatch メトリクスを使用することにより、1 分間の CloudWatch メトリクスを受け取り、CloudWatch ダッシュボードにアクセスして、EMR Serverless アプリケーションのパフォーマンスとオペレーションにほぼリアルタイムでアクセスできます。

EMR Serverless は CloudWatch に毎分メトリクスを送信します。EMR Serverless は、これらのメトリクスをアプリケーションレベルだけでなく、ジョブ、ワーカータイプ、容量の割り当てタイプのレベルで出力します。

開始するには、[EMR Serverless GitHub リポジトリ](https://github.com/aws-samples/emr-serverless-samples/tree/main/cloudformation/emr-serverless-cloudwatch-dashboard/)に用意されている EMR Serverless CloudWatch ダッシュボードテンプレートを使用してデプロイします。

**注記**  
[EMR Serverless インタラクティブワークロード](interactive-workloads.md)では、アプリケーションレベルのモニタリングのみが有効化されており、新しいワーカータイプのディメンション `Spark_Kernel` があります。インタラクティブワークロードをモニタリングおよびデバッグするには、[EMR Studio Workspace 内](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-studio-debug.html#emr-studio-debug-serverless)からログと Apache Spark UI にアクセスします。

## メトリクスのモニタリング
<a name="app-job-metrics-versions"></a>

**重要**  
メトリクス表示を再構築して、ディメンションとして `ApplicationName` および `JobName` を追加しています。リリース 7.10 以降では、古いメトリクスは更新されなくなります。7.10 以前の EMR リリースでは、古いメトリクスは引き続き使用できます。

**現在のディメンション**

以下の表は、`AWS/EMR Serverless` 名前空間内で使用可能な EMR Serverless ディメンションを示しています。


**EMR Serverless メトリクスのディメンション**  

| ディメンション | 説明 | 
| --- | --- | 
| ApplicationId | アプリケーション ID を使用して、EMR Serverless アプリケーションのすべてのメトリクスをフィルタリングします。 | 
| ApplicationName | その名前を使用して、EMR Serverless アプリケーションのすべてのメトリクスをフィルタリングします。名前が指定されていない場合、または ASCII 以外の文字が含まれている場合、**[指定なし]** として発行されます。 | 
| JobId | EMR Serverless ジョブ実行 ID のすべてのメトリクスをフィルタリングします。 | 
| JobName | その名前を使用して、EMR Serverless ジョブ実行のすべてのメトリクスをフィルタリングします。名前が指定されていない場合、または ASCII 以外の文字が含まれている場合、**[指定なし]** として発行されます。 | 
| WorkerType | 特定のワーカータイプのすべてのメトリクスをフィルタリングします。例えば、Spark ジョブの `SPARK_DRIVER` と `SPARK_EXECUTORS` をフィルタリングできます。 | 
| CapacityAllocationType | 特定の容量割り当てタイプのすべてのメトリクスをフィルタリングします。例えば、事前に初期化された容量と、その他すべての `OnDemandCapacity` に対して `PreInitCapacity` をフィルタリングできます。 | 

## アプリケーションレベルのモニタリング
<a name="app-level-metrics"></a>

Amazon CloudWatch メトリクスを使用して、EMR Serverless アプリケーションレベルで容量の使用状況をモニタリングできます。CloudWatch ダッシュボードでアプリケーション容量の使用状況をモニタリングするように 1 つのディスプレイを設定することもできます。


**EMR Serverless アプリケーションメトリクス**  

| メトリクス | 説明 | Unit | ディメンション | 
| --- | --- | --- | --- | 
| MaxCPUAllowed |  アプリケーションに許容される CPU の最大数。  | vCPU | ApplicationId, ApplicationName | 
| MaxMemoryAllowed |  アプリケーションに許容されるメモリの最大 GB 数。  | ギガバイト数 (GB) | ApplicationId, ApplicationName | 
| MaxStorageAllowed |  アプリケーションに許容されるストレージの最大 GB 数。  | ギガバイト数 (GB) | ApplicationId, ApplicationName | 
| CPUAllocated |  割り当てられた vCPU の合計数。  | vCPU | ApplicationId, ApplicationName, WorkerType, CapacityAllocationType | 
| IdleWorkerCount |  アイドル状態のワーカーの合計数。  | カウント | ApplicationId, ApplicationName, WorkerType, CapacityAllocationType | 
| MemoryAllocated |  割り当てられたメモリの合計 GB 数。  | ギガバイト数 (GB) | ApplicationId, ApplicationName, WorkerType, CapacityAllocationType | 
| PendingCreationWorkerCount |  作成保留中のワーカーの合計数。  | カウント | ApplicationId, ApplicationName, WorkerType, CapacityAllocationType | 
| RunningWorkerCount |  アプリケーションで使用されているワーカーの合計数。  | カウント | ApplicationId, ApplicationName, WorkerType, CapacityAllocationType | 
| StorageAllocated |  割り当てられたディスクストレージの合計 GB 数。  | ギガバイト数 (GB) | ApplicationId, ApplicationName, WorkerType, CapacityAllocationType | 
| TotalWorkerCount |  使用可能なワーカーの合計数。  | カウント | ApplicationId, ApplicationName, WorkerType, CapacityAllocationType | 

## ジョブレベルのモニタリング
<a name="job-level-metrics"></a>

Amazon EMR Serverless は、1 分ごとに次のジョブレベルのメトリクスを Amazon CloudWatch に送信します。ジョブ実行集計のメトリクス値は、ジョブ実行状態別にアクセスできます。各メトリクスの単位は*カウント*です。


**EMR Serverless ジョブレベルのメトリクス**  

| メトリクス | 説明 | ディメンション | 
| --- | --- | --- | 
| SubmittedJobs | 送信済み状態のジョブの数。 | ApplicationId, ApplicationName | 
| PendingJobs | 保留中状態のジョブの数。 | ApplicationId, ApplicationName | 
| ScheduledJobs | スケジュールされた状態のジョブの数。 | ApplicationId, ApplicationName | 
| RunningJobs | 実行中状態のジョブの数。 | ApplicationId, ApplicationName | 
| SuccessJobs | 成功状態のジョブの数。 | ApplicationId, ApplicationName | 
| FailedJobs | 失敗状態のジョブの数。 | ApplicationId, ApplicationName | 
| CancellingJobs | キャンセル中状態のジョブの数。 | ApplicationId, ApplicationName | 
| CancelledJobs | キャンセル済み状態のジョブの数。 | ApplicationId, ApplicationName | 

エンジン固有のアプリケーション UI を使用して、実行中の EMR Serverless ジョブと完了した EMR Serverless ジョブのエンジン固有のメトリクスをモニタリングできます。実行中のジョブの UI にアクセスすることにより、リアルタイムの更新が反映されたライブアプリケーション UI が表示されます。完了したジョブの UI にアクセスすることにより、永続アプリケーション UI が表示されます。

**ジョブの実行**

実行中の EMR Serverless ジョブでは、エンジン固有のメトリクスを示すリアルタイムインターフェイスにアクセスします。Apache Spark UI または Hive Tez UI のいずれかを使用して、ジョブをモニタリングおよびデバッグできます。これらの UI にアクセスするには、EMR Studio コンソールを使用するか、 AWS Command Line Interfaceで安全な URL エンドポイントをリクエストします。

**完了したジョブ**

完了した EMR Serverless ジョブについては、Spark History Server または Persistent Hive Tez UI を使用して、Spark または Hive ジョブ実行のジョブの詳細、ステージ、タスク、メトリクスにアクセスします。これらの UI にアクセスするには、EMR Studio コンソールを使用するか、 AWS Command Line Interfaceで安全な URL エンドポイントをリクエストします。

## ジョブワーカーレベルのモニタリング
<a name="job-worker-level-metrics"></a>

Amazon EMR Serverless は、`AWS/EMRServerless` 名前空間および `Job Worker Metrics` メトリクスグループで利用可能な以下のジョブワーカーレベルのメトリクスを Amazon CloudWatch に送信します。EMR Serverless は、ジョブレベル、ワーカータイプ、容量割り当てタイプのレベルでジョブの実行中に個別のワーカーからデータポイントを収集します。`ApplicationId` をディメンションとして使用して、同じアプリケーションに属する複数のジョブをモニタリングできます。

**注記**  
Amazon CloudWatch コンソールでメトリクスを表示するときに EMR Serverless ジョブが使用する CPU とメモリの合計を表示するには、Statistic as Sum and Period as 1 minutes を使用します。


**EMR Serverless ジョブワーカーレベルのメトリクス**  

| メトリクス | 説明 | Unit | ディメンション | 
| --- | --- | --- | --- | 
| WorkerCpuAllocated | ジョブ実行でワーカーに割り当てられた vCPU コアの合計数。 | vCPU | JobId、JobName、ApplicationId、ApplicationName、WorkerType、および CapacityAllocationType | 
| WorkerCpuUsed | ジョブ実行でワーカーによって使用されている vCPU コアの合計数。 | vCPU | JobId、JobName、ApplicationId、ApplicationName、WorkerType、および CapacityAllocationType | 
| WorkerMemoryAllocated | ジョブ実行でワーカーに割り当てられたメモリの合計 GB 数。 | ギガバイト数 (GB) | JobId、JobName、ApplicationId、ApplicationName、WorkerType、および CapacityAllocationType | 
| WorkerMemoryUsed | ジョブ実行でワーカーによって使用されるメモリの合計 GB 数。 | ギガバイト数 (GB) | JobId、JobName、ApplicationId、ApplicationName、WorkerType、および CapacityAllocationType | 
| WorkerEphemeralStorageAllocated | ジョブ実行でワーカーに割り当てられたエフェメラルストレージのバイト数。 | ギガバイト数 (GB) | JobId、JobName、ApplicationId、ApplicationName、WorkerType、および CapacityAllocationType | 
| WorkerEphemeralStorageUsed | ジョブ実行でワーカーによって使用されるエフェメラルストレージのバイト数。 | ギガバイト数 (GB) | JobId、JobName、ApplicationId、ApplicationName、WorkerType、および CapacityAllocationType | 
| WorkerStorageReadBytes | ジョブ実行でワーカーがストレージから読み取るバイト数。 | バイト | JobId、JobName、ApplicationId、ApplicationName、WorkerType、および CapacityAllocationType | 
| WorkerStorageWriteBytes | ジョブ実行でワーカーからストレージに書き込まれたバイト数。 | バイト | JobId、JobName、ApplicationId、ApplicationName、WorkerType、および CapacityAllocationType | 

以下の手順では、さまざまなタイプのメトリクスにアクセスする方法について説明します。

------
#### [ Console ]

**コンソールを使用してアプリケーション UI にアクセスするには**

1. [コンソールからの開始方法](https://docs.aws.amazon.com/emr/latest/EMR-Serverless-UserGuide/getting-started.html#gs-console)の手順を使用して、EMR Studio の EMR Serverless アプリケーションに移動します。

1. 実行中ジョブのエンジン固有のアプリケーション UI とログにアクセスするには: 

   1. `RUNNING` ステータスのジョブを選択します。

   1. **[アプリケーションの詳細]** ページでジョブを選択するか、ジョブの **[ジョブの詳細]** ページに移動します。

   1. **[UI を表示]** ドロップダウンメニューで、**[Spark UI]** または **[Hive Tez UI]** のいずれかを選択して、ジョブタイプのアプリケーション UI に移動します。

   1. Spark エンジンログにアクセスするには、Spark UI の **[エグゼキュター]** タブに移動し、ドライバーの**ログ**リンクを選択します。Hive エンジンログにアクセスするには、Hive Tez UI で適切な DAG の**ログ**リンクを選択します。

1. 完了したジョブのエンジン固有のアプリケーション UI とログにアクセスするには: 

   1. `SUCCESS` ステータスのジョブを選択します。

   1. アプリケーションの **[アプリケーションの詳細]** ページでジョブを選択するか、ジョブの **[ジョブの詳細]** ページに移動します。

   1. **[UI を表示]** ドロップダウンメニューで、**[Spark 履歴サーバー]** または **[Persistent Hive Tez UI]** のいずれかを選択して、ジョブタイプのアプリケーション UI に移動します。

   1. Spark エンジンログにアクセスするには、Spark UI の **[エグゼキュター]** タブに移動し、ドライバーの**ログ**リンクを選択します。Hive エンジンログにアクセスするには、Hive Tez UI で適切な DAG の**ログ**リンクを選択します。

------
#### [ AWS CLI ]

**を使用してアプリケーション UI にアクセスするには AWS CLI**
+ 実行中のジョブと完了したジョブでアプリケーション UI にアクセスするために使用できる URL を生成するには、`GetDashboardForJobRun` API を呼び出します。

  ```
  aws emr-serverless get-dashboard-for-job-run /
  --application-id <application-id> /
  --job-run-id <job-id>
  ```

  生成した URL は 1 時間有効です。

------

# Amazon Managed Service for Prometheus で Spark メトリクスをモニタリングする
<a name="monitor-with-prometheus"></a>

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

## 前提条件
<a name="monitoring-with-prometheus-prereqs"></a>

Spark メトリクスを Amazon Managed Service for Prometheus に配信するには、次の前提条件を満たします。
+ [Amazon Managed Service for Prometheus ワークスペースを作成します。](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-onboard-create-workspace.html)このワークスペースは、取り込みエンドポイントとして機能します。**エンドポイント - リモート書き込み 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>"
  }
  ```

## セットアップ
<a name="monitoring-with-prometheus-setup"></a>

**AWS コンソールを使用して Amazon Managed Service for Prometheus と統合されたアプリケーションを作成するには**

1. 「[Amazon EMR Serverless の使用を開始する](https://docs.aws.amazon.com/emr/latest/EMR-Serverless-UserGuide/getting-started.html                             )」を参照してアプリケーションを作成します。

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

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

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

** 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 メトリクスを使用して、視覚化、アラート、分析を行うことができます。

## 高度な設定プロパティ
<a name="monitoring-with-prometheus-config-options"></a>

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

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


| Spark プロパティ | デフォルトの値 | 説明 | 
| --- | --- | --- | 
| spark.metrics.conf.\$1.sink.prometheusServlet.class | org.apache.spark.metrics.sink.PrometheusServlet | Spark が Amazon Managed Service for Prometheus にメトリクスを送信するために使用するクラス。デフォルトの動作をオーバーライドするには、独自のカスタムクラスを指定します。 | 
| spark.metrics.conf.\$1.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 メトリクス](https://spark.apache.org/docs/3.5.0/monitoring.html#metrics)」を参照してください。

## 考慮事項と制限事項
<a name="monitoring-with-prometheus-limitations"></a>

Amazon Managed Service for Prometheus を使用して EMR Serverless からメトリクスを収集する場合は、以下の考慮事項と制限事項を検討してください。
+ Amazon Managed Service for Prometheus を EMR Serverless で使用するためのサポートは、[Amazon Managed Service for Prometheus が一般的に利用可能なAWS リージョン でのみ利用できます。](https://docs.aws.amazon.com/general/latest/gr/prometheus-service.html)
+ 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 を実行するのと同じアカウントにデプロイする必要があります。

# EMR Serverless 使用状況メトリクス
<a name="monitoring-usage"></a>

Amazon CloudWatch 使用状況メトリクスを使用して、アカウントが使用するリソースを可視化できます。これらのメトリクスを使用して、CloudWatch グラフやダッシュボードでサービスの使用状況を可視化できます。

EMR Serverless 使用状況メトリクスは、Service Quotas に対応しています。使用量がサービスクォータに近づいたときに警告するアラームを設定することもできます。詳細については、「*Service Quotas ユーザーガイド*」の「[Service Quotas and Amazon CloudWatch alarms](https://docs.aws.amazon.com/servicequotas/latest/userguide/configure-cloudwatch.html)」を参照してください。

EMR Serverless のサービスクォータの詳細については、「[EMR Serverless のエンドポイントとクォータ](endpoints-quotas.md)」を参照してください。

## EMR Serverless のサービスクォータ使用状況メトリクス
<a name="usage-metrics"></a>

EMR Serverless は、以下のサービスクォータ使用状況メトリクスを `AWS/Usage` 名前空間で発行します。


****  

| メトリクス | 説明 | 
| --- | --- | 
| `ResourceCount`  | アカウントで実行されている指定されたリソースの合計数。リソースは、メトリクスに関連付けられた[ディメンション](#usage-metrics-dimensions)によって定義されます。 | 

## EMR Serverless サービスクォータ使用状況メトリクスのディメンション
<a name="usage-metrics-dimensions"></a>

次のディメンションを使用して、EMR Serverless が発行する使用状況メトリクスを絞り込むことができます。


****  

| ディメンション | 値 | 説明 | 
| --- | --- | --- | 
|  `Service`  |  EMR Serverless  | リソース AWS のサービス を含む の名前。 | 
|  `Type`  |  [リソース]   | EMR Serverless がレポートするエンティティのタイプ。 | 
|  `Resource`  |  vCPU  | EMR Serverless が追跡しているリソースのタイプ。 | 
|  `Class`  |  なし  | EMR Serverless が追跡しているリソースのクラス。 | 