

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

# ログ記録とモニタリング
<a name="logging-monitoring"></a>

モニタリングは、EMR Serverless アプリケーションとジョブの信頼性、可用性、パフォーマンスを維持する際の重要な部分です。マルチポイント障害が発生した場合は、障害をより簡単にデバッグできるように、EMR Serverless ソリューションのすべての部分からモニタリングデータを収集する必要があります。

**Topics**
+ [ログの保存](logging.md)
+ [ログのローテーション](rotating-logs.md)
+ [ログの暗号化](jobs-log-encryption.md)
+ [Amazon EMR Serverless の Apache Log4j2 プロパティを設定する](log4j2.md)
+ [EMR Serverless のモニタリング](metrics.md)
+ [を使用した EMR Serverless の自動化 Amazon EventBridge](using-eventbridge.md)

# ログの保存
<a name="logging"></a>

EMR Serverless でのジョブの進行状況をモニタリングし、ジョブの失敗をトラブルシューティングするには、EMR Serverless がアプリケーションログを保存して処理する方法を選択します。ジョブ実行を送信する際に、ログ記録オプションとしてマネージドストレージ、Amazon S3、Amazon CloudWatch を指定します。

CloudWatch では、使用するログタイプとログの場所を指定するか、デフォルトのタイプと場所を受け入れます。CloudWatch のログの詳細については、「[Amazon CloudWatch を使用した EMR Serverless のログ記録](#jobs-log-storage-cw)」を参照してください。マネージドストレージと S3 のログ記録について、次の表に[マネージドストレージ](#jobs-log-storage-managed-storage)、[Amazon S3 バケット](#jobs-log-storage-s3-buckets)、または両方を選択した場合に想定されるログの場所と UI の可用性を一覧表示します。


| オプション | イベントログ | コンテナログ | アプリケーション UI | 
| --- | --- | --- | --- | 
|  マネージドストレージ  |  マネージドストレージに保存  |  マネージドストレージに保存  |  サポート  | 
|  マネージドストレージと S3 バケットの両方  |  両方の場所に保存  |  S3 バケットに保存  |  サポート  | 
|  Amazon S3 バケット  |  S3 バケットに保存  |  S3 バケットに保存  |  サポート外1  | 

1 **マネージドストレージ**オプションを選択したままにすることを提案します。それ以外の場合は、組み込みのアプリケーション UI を使用できません。

## マネージドストレージを使用した EMR Serverless のログ記録
<a name="jobs-log-storage-managed-storage"></a>

デフォルトでは、EMR Serverless はアプリケーションログを Amazon EMR マネージドストレージに最大 30 日間安全に保存します。

**注記**  
デフォルトのオプションをオフにすると、Amazon EMR はユーザーに代わってジョブのトラブルシューティングを行うことができません。例: EMR Serverless コンソールから Spark-UI にアクセスできません。

EMR Studio からこのオプションをオフにするには、**ジョブの送信**ページの**「追加設定**」セクションの**「30 日間のログ AWS 保持を許可する**」チェックボックスをオフにします。

からこのオプションをオフにするには AWS CLI、ジョブ実行を送信するときに `managedPersistenceMonitoringConfiguration`設定を使用します。

```
{
    "monitoringConfiguration": {
        "managedPersistenceMonitoringConfiguration": {
            "enabled": false
        }
    }
}
```

EMR Serverless アプリケーションが Amazon S3 の VPC エンドポイントを持つプライベートサブネットにあり、アクセスを制御するエンドポイントポリシーをアタッチする場合は、EMR Serverless がアプリケーションログを保存して処理するための次のアクセス許可を追加します。`Resource` を、[Amazon S3 にアクセスするプライベートサブネットのサンプルポリシー](https://docs.aws.amazon.com/emr/latest/ManagementGuide/private-subnet-iampolicy.html#private-subnet-iampolicy-regions)の使用可能なリージョンテーブルの `AppInfo` バケットに置き換えます。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "EMRServerlessManagedLogging",
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:PutObjectAcl"
      ],
      "Resource": [
        "arn:aws:s3:::prod.us-east-1.appinfo.src",
        "arn:aws:s3:::prod.us-east-1.appinfo.src/*"
      ],
      "Condition": {
        "StringEquals": {
          "aws:PrincipalServiceName": "emr-serverless.amazonaws.com",
          "aws:SourceVpc": "vpc-12345678"
        }
      }
    }
  ]
}
```

------

さらに、`aws:SourceVpc` 条件キーを使用して、リクエストが VPC エンドポイントがアタッチされている VPC を通過することを確認します。

## Amazon S3 バケットを使用した EMR Serverless のログ記録
<a name="jobs-log-storage-s3-buckets"></a>

ジョブが Amazon S3 にログデータを送信できるようにするには、ジョブのランタイムロールのアクセス許可ポリシーに次のアクセス許可を設定します。`amzn-s3-demo-logging-bucket` をログ記録バケットの名前に置き換えます。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject"
      ],
      "Resource": [
        "arn:aws:s3:::amzn-s3-demo-bucket/*"
      ],
      "Sid": "AllowS3Putobject"
    }
  ]
}
```

------

からのログを保存するように Amazon S3 バケットを設定するには AWS CLI、ジョブ実行を開始するときに `s3MonitoringConfiguration`設定を使用します。これを行うには、設定で以下の `--configuration-overrides` を指定します。

```
{
    "monitoringConfiguration": {
        "s3MonitoringConfiguration": {
            "logUri": "s3://amzn-s3-demo-logging-bucket/logs/"
        }
    }
}
```

再試行が有効になっていないバッチジョブの場合、EMR Serverless はログを次のパスに送信します。

```
'/applications/<applicationId>/jobs/<jobId>'
```

Spark ドライバーログは、EMR Serverless によって以下のパスに保存されます

```
'/applications/<applicationId>/jobs/<jobId>/SPARK_DRIVER/'
```

Spark エグゼキュターログは、EMR Serverless によって以下のパスに保存されます

```
'/applications/<applicationId>/jobs/<jobId>/SPARK_EXECUTOR/<EXECUTOR-ID>'
```

<EXECUTOR-ID> は整数です。

EMR Serverless リリース 7.1.0 以降では、ストリーミングジョブとバッチジョブの再試行がサポートされています。再試行を有効にしてジョブを実行すると、EMR Serverless はログパスプレフィックスに試行番号を自動的に追加するため、ログをより適切に区別して追跡できます。

```
'/applications/<applicationId>/jobs/<jobId>/attempts/<attemptNumber>/'
```

## Amazon CloudWatch を使用した EMR Serverless のログ記録
<a name="jobs-log-storage-cw"></a>

EMR Serverless アプリケーションにジョブを送信する場合は、アプリケーションログを保存するためのオプションとして Amazon CloudWatch を選択します。これにより、CloudWatch Logs Insights や Live Tail などの CloudWatch ログ分析機能を使用できます。CloudWatch から OpenSearch などの他のシステムにログをストリーミングして、詳細に分析することもできます。

EMR Serverless は、ドライバーログのリアルタイムログ記録を可能にします。CloudWatch ライブテール機能、または CloudWatch CLI テールコマンドを使用して、ログにリアルタイムでアクセスできます。

デフォルトでは、EMR Serverless の CloudWatch ログ記録は無効になっています。有効にするには、[AWS CLI](#jobs-log-storage-cw-cli) の設定を使用してください。

**注記**  
Amazon CloudWatch はログをリアルタイムで発行するため、ワーカーのより多くのリソースが消費されます。ワーカーの容量に対して小さな値を選択すると、ジョブの実行時間への影響が増加する可能性があります。CloudWatch のログ記録を有効にする場合は、より大きなワーカー容量の値を選択することを提案します。また、`PutLogEvents` の 1 秒あたりのトランザクション (TPS) レートが過剰に低い場合は、ログ発行がスロットリングする可能性があります。CloudWatch のスロットリング設定は、EMR Serverless を含むすべてのサービスに対してグローバルです。詳細については、*AWS re:post* の「[How do I determine throttling in my CloudWatch logs?](https://repost.aws/knowledge-center/cloudwatch-logs-throttling)」を参照してください。

### CloudWatch でのログ記録に必要なアクセス許可
<a name="jobs-log-storage-cw-permissions"></a>

ジョブが Amazon CloudWatch にログデータを送信できるようにするには、ジョブランタイムロールのアクセス許可ポリシーに次のアクセス許可を設定します。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "logs:DescribeLogGroups"
      ],
      "Resource": [
        "arn:aws:logs:*:123456789012:*"
      ],
      "Sid": "AllowLOGSDescribeloggroups"
    },
    {
      "Effect": "Allow",
      "Action": [
        "logs:PutLogEvents",
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:DescribeLogStreams"
      ],
      "Resource": [
        "arn:aws:logs:*:123456789012:log-group:my-log-group-name:*"
      ],
      "Sid": "AllowLOGSPutlogevents"
    }
  ]
}
```

------

### AWS CLI
<a name="jobs-log-storage-cw-cli"></a>

から EMR Serverless のログを保存するように Amazon CloudWatch を設定するには AWS CLI、ジョブ実行を開始するときに `cloudWatchLoggingConfiguration`設定を使用します。これを行うには、次の設定のオーバーライドを指定します。必要に応じて、ロググループ名、ログストリームプレフィックス名、ログタイプ、および暗号化キー ARN を指定します。

オプションの値を指定しない場合、CloudWatch はデフォルトのログストリーム `/applications/applicationId/jobs/jobId/worker-type` を使用して、デフォルトのロググループ `/aws/emr-serverless` にログを発行します。

EMR Serverless リリース 7.1.0 以降では、ストリーミングジョブとバッチジョブの再試行がサポートされています。ジョブの再試行を有効にした場合、EMR Serverless はログパスプレフィックスに試行番号を自動的に追加するため、ログをより適切に区別して追跡できます。

```
'/applications/<applicationId>/jobs/<jobId>/attempts/<attemptNumber>/worker-type'
```

以下では、EMR Serverless のデフォルト設定で Amazon CloudWatch ログ記録を有効にするために必要な最小設定をデモンストレーションします。

```
{
    "monitoringConfiguration": {
        "cloudWatchLoggingConfiguration": {
            "enabled": true
         }
     }
}
```

次の例は、EMR Serverless の Amazon CloudWatch ログ記録を有効にする際に指定する必須およびオプションのすべての設定を示しています。サポートされている `logTypes` 値もこの例の下に示されています。

```
{
    "monitoringConfiguration": {
        "cloudWatchLoggingConfiguration": {
            "enabled": true, // Required
            "logGroupName": "Example_logGroup", // Optional
            "logStreamNamePrefix": "Example_logStream", // Optional 
            "encryptionKeyArn": "key-arn", // Optional 
            "logTypes": { 
                "SPARK_DRIVER": ["stdout", "stderr"] //List of values
             }
         }
     }
}
```

デフォルトでは、EMR Serverless はドライバーの stdout と stderr ログのみを CloudWatch に発行します。他のログが必要な場合は、`logTypes` フィールドでコンテナロールと対応するログタイプを指定します。

次のリストは、`logTypes` 設定で指定するサポートされているワーカータイプを示しています:

**Spark**  
+ `SPARK_DRIVER : ["STDERR", "STDOUT"]`
+ `SPARK_EXECUTOR : ["STDERR", "STDOUT"]`

**[Hive]**  
+ `HIVE_DRIVER : ["STDERR", "STDOUT", "HIVE_LOG", "TEZ_AM"]`
+ `TEZ_TASK : ["STDERR", "STDOUT", "SYSTEM_LOGS"]`

# ログのローテーション
<a name="rotating-logs"></a>

Amazon EMR Serverless は、Spark アプリケーションログとイベントログをローテーションできます。ログローテーションによって、長時間実行されるジョブが大きなログファイルを生成し、すべてのディスク領域を占有する可能性がある問題を解消できます。ログをローテーションすると、ディスクストレージを節約し、ディスクに空き領域がなくなるため、ジョブの失敗を低減することができます。

ログローテーションはデフォルトで有効になっており、Spark ジョブでのみ利用できます。

**Spark イベントログ**

**注記**  
Spark イベントログローテーションは、すべての Amazon EMR リリースラベルで利用できます。

EMR Serverless は、単一のイベントログファイルを生成する代わりに、イベントログを定期的にローテーションし、古いイベントログファイルを削除します。ログをローテーションしても、S3 バケットにアップロードされたログには影響しません。

**Spark アプリケーションログ**

**注記**  
Spark アプリケーションのログローテーションは、すべての Amazon EMR リリースラベルで利用できます。

EMR Serverless は、`stdout` ファイルや `stderr` ファイルなどのドライバーやエグゼキュターの Spark アプリケーションログもローテーションします。Spark 履歴サーバーと Live UI リンクを使用して Studio のログリンクを選択すると、最新のログファイルにアクセスできます。ログファイルは、最新のログの切り捨てられたバージョンです。古いローテーションされたログを参照するには、ログを保存するときに Amazon S3 の場所を指定します。詳細については、「[ Logging for EMR Serverless with Amazon S3 buckets](https://docs.aws.amazon.com/emr/latest/EMR-Serverless-UserGuide/logging.html#jobs-log-storage-s3-buckets)」を参照してください。

最新のログファイルは、次の場所にあります。EMR Serverless は 15 秒ごとにファイルを更新します。これらのファイルの範囲は 0 MB から 128 MB です。

```
<example-S3-logUri>/applications/<application-id>/jobs/<job-id>/SPARK_DRIVER/stderr.gz
```

次の場所には、古いローテーションされたファイルが格納されています。各ファイルは 128 MB です。

```
<example-S3-logUri>/applications/<application-id>/jobs/<job-id>/SPARK_DRIVER/archived/stderr_<index>.gz 
```

Spark エグゼキュターにも同じ動作が適用されます。この変更は S3 ログ記録にのみ適用されます。ログローテーションでは、Amazon CloudWatch にアップロードされたログストリームに変更は加えられません。

EMR Serverless リリース 7.1.0 以降では、ストリーミングジョブとバッチジョブの再試行がサポートされています。ジョブで再試行を有効にした場合、EMR Serverless はそれらのジョブのログパスにプレフィックスを追加して、ログをより適切に追跡し、互いに区別できるようにします。このパスには、ローテーションされたすべてのログが含まれます。

```
'/applications/<applicationId>/jobs/<jobId>/attempts/<attemptNumber>/'.
```

# ログの暗号化
<a name="jobs-log-encryption"></a>

## マネージドストレージによる EMR Serverless ログの暗号化
<a name="jobs-log-encryption-managed-storage"></a>

独自の KMS キーを使用してマネージドストレージのログを暗号化するには、ジョブ実行を送信するときに `managedPersistenceMonitoringConfiguration` 設定を使用します。

```
{
    "monitoringConfiguration": {
        "managedPersistenceMonitoringConfiguration" : {
            "encryptionKeyArn": "key-arn"
        }
    }
}
```

## Amazon S3 バケットを使用した EMR Serverless ログの暗号化
<a name="jobs-log-encryption-s3-buckets"></a>

独自の KMS キーを使用して Amazon S3 バケットのログを暗号化するには、ジョブ実行を送信するときに `s3MonitoringConfiguration` 設定を使用します。

```
{
    "monitoringConfiguration": {
        "s3MonitoringConfiguration": {
            "logUri": "s3://amzn-s3-demo-logging-bucket/logs/",
            "encryptionKeyArn": "key-arn"
        }
    }
}
```

## Amazon CloudWatch による EMR Serverless ログの暗号化
<a name="jobs-log-encryption-cw"></a>

独自の KMS キーを使用して Amazon CloudWatch のログを暗号化するには、ジョブ実行を送信するときに `cloudWatchLoggingConfiguration` 設定を使用します。

```
{
    "monitoringConfiguration": {
        "cloudWatchLoggingConfiguration": {
            "enabled": true,
            "encryptionKeyArn": "key-arn"
         }
     }
}
```

## ログ暗号化に必要なアクセス許可
<a name="jobs-log-encryption-permissions"></a>

**Topics**
+ [必要なユーザーアクセス許可](#jobs-log-encryption-permissions-user)
+ [Amazon S3 とマネージドストレージの暗号化キーのアクセス許可](#jobs-log-encryption-permissions-s3)
+ [Amazon CloudWatch の暗号化キーアクセス許可](#jobs-log-encryption-permissions-cw)

### 必要なユーザーアクセス許可
<a name="jobs-log-encryption-permissions-user"></a>

ジョブを送信する、またはログやアプリケーション UI を表示するユーザーは、キーを使用するためのアクセス許可を付与されている必要があります。ユーザー、グループ、またはロールの KMS キーポリシーまたは IAM ポリシーでアクセス許可を指定できます。ジョブを送信するユーザーに KMS キーのアクセス許可が付与されていない場合、EMR Serverless はジョブ実行の送信を拒否します。

**キーポリシーの例**

次のキーポリシーによって、`kms:GenerateDataKey` と `kms:Decrypt` にアクセス許可が付与されます。

```
{
    "Effect": "Allow",
    "Principal":{
       "AWS": "arn:aws:iam::111122223333:user/user-name"
     },
     "Action": [
       "kms:GenerateDataKey",       
       "kms:Decrypt"
      ],
     "Resource": "*"
 }
```

**IAM ポリシーの例**

次の IAM ポリシーによって、`kms:GenerateDataKey` と `kms:Decrypt` にアクセス許可が付与されます。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "kms:GenerateDataKey",
        "kms:Decrypt"
      ],
      "Resource": [
        "arn:aws:kms:*:123456789012:key/12345678-1234-1234-1234-123456789012"
      ],
      "Sid": "AllowKMSGeneratedatakey"
    }
  ]
}
```

------

Spark UI または Tez UI を起動するには、次のように `emr-serverless:GetDashboardForJobRun` API にアクセスするためのアクセス許可をユーザー、グループ、またはロールに付与します。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "emr-serverless:GetDashboardForJobRun"
      ],
      "Resource": [
        "*"
      ],
      "Sid": "AllowEMRSERVERLESSGetdashboardforjobrun"
    }
  ]
}
```

------

### Amazon S3 とマネージドストレージの暗号化キーのアクセス許可
<a name="jobs-log-encryption-permissions-s3"></a>

マネージドストレージまたは S3 バケットで独自の暗号化キーを使用してログを暗号化する場合は、次のように KMS キーのアクセス許可を設定します。

`emr-serverless.amazonaws.com` プリンシパルには、KMS キーのポリシーで次のアクセス許可が設定されている必要があります。

```
{
    "Effect": "Allow",
    "Principal":{
       "Service": "emr-serverless.amazonaws.com" 
     },
     "Action": [
       "kms:Decrypt",
       "kms:GenerateDataKey"
      ],
     "Resource": "*"
     "Condition": {
       "StringLike": {
         "aws:SourceArn": "arn:aws:emr-serverless:region:aws-account-id:/applications/application-id"
       }
     }
 }
```

セキュリティのベストプラクティスとして、KMS キーポリシーに `aws:SourceArn` 条件キーを追加することを提案します。IAM グローバル条件キー `aws:SourceArn` によって、EMR Serverless がアプリケーション ARN にのみ KMS キーを使用するように設定できます。

ジョブのランタイムロールには、IAM ポリシーで次のアクセス許可が付与されている必要があります。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "kms:GenerateDataKey",
        "kms:Decrypt"
      ],
      "Resource": [
        "arn:aws:kms:*:123456789012:key/12345678-1234-1234-1234-123456789012"
      ],
      "Sid": "AllowKMSGeneratedatakey"
    }
  ]
}
```

------

### Amazon CloudWatch の暗号化キーアクセス許可
<a name="jobs-log-encryption-permissions-cw"></a>

KMS キー ARN をロググループに関連付けるには、ジョブランタイムロールに次の IAM ポリシーを使用します。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "logs:AssociateKmsKey"
      ],
      "Resource": [
        "arn:aws:logs:*:123456789012:log-group:my-log-group-name:*"
      ],
      "Sid": "AllowLOGSAssociatekmskey"
    }
  ]
}
```

------

Amazon CloudWatch に KMS アクセス許可を付与するように KMS キーポリシーを設定します。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Id": "key-default-1",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "kms:Decrypt",
        "kms:GenerateDataKey"
      ],
      "Resource": [
        "*"
      ],
      "Condition": {
        "ArnLike": {
          "kms:EncryptionContext:aws:logs:arn": "arn:aws:logs:*:123456789012:*"
        }
      },
      "Sid": "AllowKMSDecrypt"
    }
  ]
}
```

------

# Amazon EMR Serverless の Apache Log4j2 プロパティを設定する
<a name="log4j2"></a>

このページでは、`StartJobRun` で EMR Serverless ジョブのカスタム [Apache Log4j 2.x](https://logging.apache.org/log4j/2.x/) プロパティを設定する方法について説明します。アプリケーションレベルで Log4j 分類を設定する場合は、「[EMR Serverless のデフォルトのアプリケーション設定](default-configs.md)」を参照してください。

## Amazon EMR Serverless の Spark Log4j2 プロパティを設定する
<a name="log4j2-spark"></a>

Amazon EMR リリース 6.8.0 以降では、[Apache Log4j 2.x](https://logging.apache.org/log4j/2.x/) プロパティをカスタマイズして、詳細なログ設定を指定できます。これにより、EMR Serverless での Spark ジョブのトラブルシューティングが容易になります。これらのプロパティを設定するには、`spark-driver-log4j2` および `spark-executor-log4j2` の分類を使用します。

**Topics**
+ [Spark の Log4j2 分類](#log4j2-spark-class)
+ [Spark の Log4j2 設定例](#log4j2-spark-example)
+ [サンプル Spark ジョブの Log4j2](#log4j2-spark-jobs)
+ [Spark の Log4j2 に関する考慮事項](#log4j2-spark-considerations)

### Spark の Log4j2 分類
<a name="log4j2-spark-class"></a>

Spark ログ設定をカスタマイズするには、[https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_ConfigurationOverrides.html#emrserverless-Type-ConfigurationOverrides-applicationConfiguration](https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_ConfigurationOverrides.html#emrserverless-Type-ConfigurationOverrides-applicationConfiguration) で次の分類を使用します。Log4j 2.x プロパティを設定するには、次の [https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_Configuration.html#emrserverless-Type-Configuration-properties](https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_Configuration.html#emrserverless-Type-Configuration-properties) を使用します。

**`spark-driver-log4j2`**  
この分類は、ドライバーの `log4j2.properties` ファイル内の値を設定します。

**`spark-executor-log4j2`**  
この分類は、エグゼキュターの `log4j2.properties` ファイル内の値を設定します。

### Spark の Log4j2 設定例
<a name="log4j2-spark-example"></a>

次の例は、`applicationConfiguration` を使用して Spark ジョブを送信し、Spark ドライバーとエグゼキュターの Log4j2 設定をカスタマイズする方法を示しています。

ジョブを送信するときではなく、アプリケーションレベルで Log4j 分類を設定するには、「[EMR Serverless のデフォルトのアプリケーション設定](default-configs.md)」を参照してください。

```
aws emr-serverless start-job-run \
    --application-id application-id \
    --execution-role-arn job-role-arn \
    --job-driver '{
        "sparkSubmit": {
            "entryPoint": "/usr/lib/spark/examples/jars/spark-examples.jar",
            "entryPointArguments": ["1"],
            "sparkSubmitParameters": "--class org.apache.spark.examples.SparkPi --conf spark.executor.cores=4 --conf spark.executor.memory=20g --conf spark.driver.cores=4 --conf spark.driver.memory=8g --conf spark.executor.instances=1"
        }
    }'
    --configuration-overrides '{
        "applicationConfiguration": [
             {
                "classification": "spark-driver-log4j2",
                "properties": {
                    "rootLogger.level":"error", // will only display Spark error logs
                    "logger.IdentifierForClass.name": "classpath for setting logger",
                    "logger.IdentifierForClass.level": "info"
                   
                }
            },
            {
                "classification": "spark-executor-log4j2",
                "properties": {
                    "rootLogger.level":"error", // will only display Spark error logs
                    "logger.IdentifierForClass.name": "classpath for setting logger",
                    "logger.IdentifierForClass.level": "info"
                }
            }
       ]
    }'
```

### サンプル Spark ジョブの Log4j2
<a name="log4j2-spark-jobs"></a>

次のコードサンプルは、アプリケーションのカスタム Log4j2 設定を初期化する際に Spark アプリケーションを作成する方法を示しています。

------
#### [ Python ]

**Example - Python で Spark ジョブに Log4j2 を使用する**  

```
import os
import sys

from pyspark import SparkConf, SparkContext
from pyspark.sql import SparkSession

app_name = "PySparkApp"
if __name__ == "__main__":
    spark = SparkSession\
        .builder\
        .appName(app_name)\
        .getOrCreate()
    
    spark.sparkContext._conf.getAll()
    sc = spark.sparkContext
    log4jLogger = sc._jvm.org.apache.log4j
    LOGGER = log4jLogger.LogManager.getLogger(app_name)

    LOGGER.info("pyspark script logger info")
    LOGGER.warn("pyspark script logger warn")
    LOGGER.error("pyspark script logger error")
    
    // your code here
    
    spark.stop()
```
Spark ジョブの実行時にドライバーの Log4j2 をカスタマイズするには、以下の設定を使用します:  

```
{
   "classification": "spark-driver-log4j2",
      "properties": {
          "rootLogger.level":"error", // only display Spark error logs
          "logger.PySparkApp.level": "info", 
          "logger.PySparkApp.name": "PySparkApp"
      }
}
```

------
#### [ Scala ]

**Example - Scala で Spark ジョブに Log4j2 を使用する**  

```
import org.apache.log4j.Logger
import org.apache.spark.sql.SparkSession

object ExampleClass {
  def main(args: Array[String]): Unit = {
    val spark = SparkSession
    .builder
    .appName(this.getClass.getName)
    .getOrCreate()

    val logger = Logger.getLogger(this.getClass);
    logger.info("script logging info logs")
    logger.warn("script logging warn logs")
    logger.error("script logging error logs")

// your code here
    spark.stop()
  }
}
```
Spark ジョブの実行時にドライバーの Log4j2 をカスタマイズするには、以下の設定を使用します:  

```
{
   "classification": "spark-driver-log4j2",
      "properties": {
          "rootLogger.level":"error", // only display Spark error logs
          "logger.ExampleClass.level": "info", 
          "logger.ExampleClass.name": "ExampleClass"
      }
}
```

------

### Spark の Log4j2 に関する考慮事項
<a name="log4j2-spark-considerations"></a>

Spark プロセスでは、次の Log4j2.x プロパティは設定できません。
+ `rootLogger.appenderRef.stdout.ref`
+ `appender.console.type`
+ `appender.console.name`
+ `appender.console.target`
+ `appender.console.layout.type`
+ `appender.console.layout.pattern`

設定できる Log4j2.x プロパティの詳細については、GitHub の「[`log4j2.properties.template` ファイル](https://github.com/apache/spark/blob/v3.3.0/conf/log4j2.properties.template)」を参照してください。

# 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 が追跡しているリソースのクラス。 | 

# を使用した EMR Serverless の自動化 Amazon EventBridge
<a name="using-eventbridge"></a>

 Amazon EventBridge を使用して を自動化 AWS のサービス し、アプリケーションの可用性の問題やリソースの変更などのシステムイベントに自動的に対応できます。EventBridge は、 AWS リソースの変更を記述するシステムイベントのほぼリアルタイムのストリームを提供します。簡単なルールを記述して、注目するイベントと、イベントがルールに一致した場合に自動的に実行するアクションを指定できます。EventBridge を使用すると、自動的に以下の内容を実行できます。
+  AWS Lambda 関数を呼び出す
+ Amazon Kinesis Data Streams にイベントを中継する
+  AWS Step Functions ステートマシンをアクティブ化する
+ Amazon SNS トピックまたは Amazon SQS キューへの通知

例えば、EMR Serverless で EventBridge を使用する場合、ETL ジョブが成功したときに AWS Lambda 関数をアクティブ化する、または ETL ジョブが失敗したときに Amazon SNS トピックに通知することができます。

EMR Serverless は、次の 4 種類のイベントを出力します。
+ アプリケーションの状態変更イベント – アプリケーションの状態変更をすべて出力するイベント。アプリケーションの状態の詳細については、「[アプリケーションの状態](applications.md#application-states)」を参照してください。
+ ジョブの実行状態変更イベント – ジョブ実行のすべての状態変更を出力するイベント。詳細については、「[ジョブ実行状態](job-states.md)」を参照してください。
+ ジョブ実行の再試行イベント – Amazon EMR Serverless リリース 7.1.0 以降から実行されるジョブのすべての再試行を出力するイベント。
+ ジョブリソース使用率の更新イベント – ジョブ実行のリソース使用率の更新を 30 分に近い間隔で実行するイベント。

## EMR Serverless EventBridge のイベント例
<a name="using-eventbridge-examples"></a>

EMR Serverless によって報告されるイベントには、次の例のように、`source` に `aws.emr-serverless` の値が割り当てられます。

**アプリケーションの状態変更イベント**

次のイベント例は、`CREATING` 状態のアプリケーションを示しています。

```
{
    "version": "0",
    "id": "9fd3cf79-1ff1-b633-4dd9-34508dc1e660",
    "detail-type": "EMR Serverless Application State Change",
    "source": "aws.emr-serverless",
    "account": "123456789012",
    "time": "2022-05-31T21:16:31Z",
    "region": "us-east-1",
    "resources": [],
    "detail": {
        "applicationId": "00f1cbsc6anuij25",
        "applicationName": "3965ad00-8fba-4932-a6c8-ded32786fd42",
        "arn": "arn:aws:emr-serverless:us-east-1:111122223333:/applications/00f1cbsc6anuij25",
        "releaseLabel": "emr-6.6.0",
        "state": "CREATING",
        "type": "HIVE",
        "createdAt": "2022-05-31T21:16:31.547953Z",
        "updatedAt": "2022-05-31T21:16:31.547970Z",
        "autoStopConfig": {
            "enabled": true,
            "idleTimeout": 15
        },
        "autoStartConfig": {
            "enabled": true
        }
    }
}
```

**ジョブ実行の状態変更イベント**

次のイベント例は、`SCHEDULED` 状態から `RUNNING` 状態に移行するジョブ実行を示しています。

```
{
    "version": "0",
    "id": "00df3ec6-5da1-36e6-ab71-20f0de68f8a0",
    "detail-type": "EMR Serverless Job Run State Change",
    "source": "aws.emr-serverless",
    "account": "123456789012",
    "time": "2022-05-31T21:07:42Z",
    "region": "us-east-1",
    "resources": [],
    "detail": {
        "jobRunId": "00f1cbn5g4bb0c01",
        "applicationId": "00f1982r1uukb925",
        "arn": "arn:aws:emr-serverless:us-east-1:123456789012:/applications/00f1982r1uukb925/jobruns/00f1cbn5g4bb0c01",
        "releaseLabel": "emr-6.6.0",
        "state": "RUNNING",
        "previousState": "SCHEDULED",
        "createdBy": "arn:aws:sts::123456789012:assumed-role/TestRole-402dcef3ad14993c15d28263f64381e4cda34775/6622b6233b6d42f59c25dd2637346242",
        "updatedAt": "2022-05-31T21:07:42.299487Z",
        "createdAt": "2022-05-31T21:07:25.325900Z"
    }
}
```

**ジョブ実行再試行イベント**

ジョブ実行の再試行イベントの例を以下に示します。

```
{
    "version": "0",
    "id": "00df3ec6-5da1-36e6-ab71-20f0de68f8a0",
    "detail-type": "EMR Serverless Job Run Retry",
    "source": "aws.emr-serverless",
    "account": "123456789012",
    "time": "2022-05-31T21:07:42Z",
    "region": "us-east-1",
    "resources": [],
    "detail": {
        "jobRunId": "00f1cbn5g4bb0c01",
        "applicationId": "00f1982r1uukb925",
        "arn": "arn:aws:emr-serverless:us-east-1:123456789012:/applications/00f1982r1uukb925/jobruns/00f1cbn5g4bb0c01",
        "releaseLabel": "emr-6.6.0",
        "createdBy": "arn:aws:sts::123456789012:assumed-role/TestRole-402dcef3ad14993c15d28263f64381e4cda34775/6622b6233b6d42f59c25dd2637346242",
        "updatedAt": "2022-05-31T21:07:42.299487Z",
        "createdAt": "2022-05-31T21:07:25.325900Z",
        //Attempt Details
        "previousAttempt": 1,
        "previousAttemptState": "FAILED",
        "previousAttemptCreatedAt": "2022-05-31T21:07:25.325900Z",
        "previousAttemptEndedAt": "2022-05-31T21:07:30.325900Z",
        "newAttempt": 2,
        "newAttemptCreatedAt": "2022-05-31T21:07:30.325900Z"
    }
}
```

**ジョブリソース使用率の更新**

次のイベント例は、実行後にターミナル状態に移行したジョブの最終的なリソース使用率の更新を示しています。

```
{
    "version": "0",
    "id": "00df3ec6-5da1-36e6-ab71-20f0de68f8a0",
    "detail-type": "EMR Serverless Job Resource Utilization Update",
    "source": "aws.emr-serverless",
    "account": "123456789012",
    "time": "2022-05-31T21:07:42Z",
    "region": "us-east-1",
    "resources": [
        "arn:aws:emr-serverless:us-east-1:123456789012:/applications/00f1982r1uukb925/jobruns/00f1cbn5g4bb0c01"
    ],
    "detail": {
        "applicationId": "00f1982r1uukb925",
        "jobRunId": "00f1cbn5g4bb0c01",
        "attempt": 1,
        "mode": "BATCH",
        "createdAt": "2022-05-31T21:07:25.325900Z",
        "startedAt": "2022-05-31T21:07:26.123Z",
        "calculatedFrom": "2022-05-31T21:07:42.299487Z",
        "calculatedTo": "2022-05-31T21:07:30.325900Z",
        "resourceUtilizationFinal": true,
        "resourceUtilizationForInterval": {
            "vCPUHour": 0.023,
            "memoryGBHour": 0.114,
            "storageGBHour": 0.228
        },
        "billedResourceUtilizationForInterval": {
            "vCPUHour": 0.067,
            "memoryGBHour": 0.333,
            "storageGBHour": 0
        },
        "totalResourceUtilization": {
            "vCPUHour": 0.023,
            "memoryGBHour": 0.114,
            "storageGBHour": 0.228
        },
        "totalBilledResourceUtilization": {
            "vCPUHour": 0.067,
            "memoryGBHour": 0.333,
            "storageGBHour": 0
        }
    }
}
```

**startedAt** フィールドは、ジョブが実行中の状態に移行した場合にのみイベント内に表示されます。