

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 日誌記錄和監控
<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 建議您保持選取**受管儲存**選項。否則，您無法使用內建應用程式 UIs。

## 使用受管儲存體記錄 EMR Serverless
<a name="jobs-log-storage-managed-storage"></a>

根據預設，EMR Serverless 會將應用程式日誌安全地存放在 Amazon EMR 受管儲存體中，最長可達 30 天。

**注意**  
如果您關閉預設選項，Amazon EMR 無法代表您疑難排解任務。範例：您無法從 EMR Serverless Console 存取 Spark-UI。

若要從 EMR Studio 關閉此選項，請在**提交任務**頁面**的其他設定**區段取消選取**允許 AWS 保留日誌 30 天**核取方塊。

若要從 關閉此選項 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>'
```

EMR Serverless 會將 Spark 驅動程式日誌儲存在下列路徑中

```
'/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 記錄，我們建議您選擇更大的工作者容量。如果 的交易每秒 (TPS) 速率太低，日誌發佈也可能會調節`PutLogEvents`。CloudWatch 限流組態適用於所有 服務，包括 EMR Serverless。如需詳細資訊，請參閱 *AWS re：post* 上的[如何判斷 CloudWatch 日誌中的限流？](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>

若要設定 Amazon CloudWatch 從 存放 EMR Serverless 的日誌 AWS CLI，請在開始任務執行時使用 `cloudWatchLoggingConfiguration`組態。若要這樣做，請提供下列組態覆寫。或者，您也可以提供日誌群組名稱、日誌串流字首名稱、日誌類型和加密金鑰 ARN。

如果您未指定選用值，則 CloudWatch 會使用預設日誌串流 ，將日誌發佈至`/aws/emr-serverless`預設日誌群組 `/applications/applicationId/jobs/jobId/worker-type`。

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 也會輪換驅動程式和執行器的 Spark 應用程式日誌，例如 `stdout`和 `stderr` 檔案。您可以使用 Spark 歷史記錄伺服器和即時使用者介面連結，選擇 Studio 中的日誌連結來存取最新的日誌檔案。日誌檔案是最新日誌的截斷版本。若要參考較舊的輪換日誌，請在儲存日誌時指定 Amazon S3 位置。如需詳細資訊，請參閱[使用 Amazon S3 儲存貯體記錄 EMR Serverless](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>

提交任務或檢視日誌或應用程式 UIs 的使用者必須具有使用金鑰的許可。您可以在 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 或 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 金鑰許可，如下所示。

在 KMS 金鑰的政策中，`emr-serverless.amazonaws.com`委託人必須具有下列許可：

```
{
    "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"
       }
     }
 }
```

作為安全最佳實務，我們建議您將 `aws:SourceArn`條件金鑰新增至 KMS 金鑰政策。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"
    }
  ]
}
```

------

設定 KMS 金鑰政策，將 KMS 許可授予 Amazon CloudWatch：

------
#### [ 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>

此頁面說明如何為位於 的 EMR Serverless 任務設定自訂 [Apache Log4j 2.x 屬性。](https://logging.apache.org/log4j/2.x/) `StartJobRun`如果您想要在應用程式層級設定 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>

下列範例顯示如何使用 提交 Spark 任務`applicationConfiguration`，以自訂 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 - 使用 Log4j2 搭配 Python 進行 Spark 任務**  

```
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 - 使用 Log4j2 搭配 Scala 進行 Spark 任務**  

```
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>

下列 Log4j2.x 屬性無法針對 Spark 程序設定：
+ `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 應用程式的near-real-time操作和效能。

EMR Serverless 每分鐘將指標傳送至 CloudWatch。EMR Serverless 會在應用程式層級以及任務、工作者類型和capacity-allocation-type層級發出這些指標。

若要開始使用，請使用 EMR Serverless [ GitHub 儲存庫中提供的 EMR Serverless](https://github.com/aws-samples/emr-serverless-samples/tree/main/cloudformation/emr-serverless-cloudwatch-dashboard/) CloudWatch 儀表板範本並進行部署。

**注意**  
[EMR Serverless 互動式工作負載](interactive-workloads.md)僅啟用應用程式層級監控，並具有新的工作者類型維度 `Spark_Kernel`。若要監控和偵錯互動式工作負載，請從 [EMR Studio 工作區中](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 指標的維度**  

| 維度 | Description | 
| --- | --- | 
| ApplicationId | 使用應用程式 ID 篩選 EMR Serverless 應用程式的所有指標。 | 
| ApplicationName | 使用 名稱篩選 EMR Serverless 應用程式的所有指標。如果未提供名稱，或包含非 ASCII 字元，則會發佈為 **【未指定】**。 | 
| JobId | 篩選任務執行 ID 的 EMR Serverless 的所有指標。 | 
| JobName | 使用 名稱篩選 EMR Serverless 任務執行的所有指標。如果未提供名稱，或包含非 ASCII 字元，則會發佈為 **【未指定】**。 | 
| WorkerType | 篩選指定工作者類型的所有指標。例如，您可以篩選 Spark 任務的 `SPARK_DRIVER`和 `SPARK_EXECUTORS` 。 | 
| CapacityAllocationType | 篩選指定容量分配類型的所有指標。例如，您可以篩選 `PreInitCapacity`的預先初始化容量和其他`OnDemandCapacity`項目。 | 

## 應用程式層級監控
<a name="app-level-metrics"></a>

您可以使用 Amazon CloudWatch 指標監控 EMR Serverless 應用程式層級的容量使用量。您也可以設定單一顯示器來監控 CloudWatch 儀表板中的應用程式容量用量。


**EMR Serverless 應用程式指標**  

| 指標 | Description | 單位 | 維度 | 
| --- | --- | --- | --- | 
| MaxCPUAllowed |  應用程式允許的 CPU 上限。  | vCPU | ApplicationId, ApplicationName | 
| MaxMemoryAllowed |  應用程式允許的記憶體上限，以 GB 為單位。  | GB (GB) | ApplicationId, ApplicationName | 
| MaxStorageAllowed |  應用程式允許的最大儲存體，以 GB 為單位。  | GB (GB) | ApplicationId, ApplicationName | 
| CPUAllocated |  配置vCPUs 總數。  | vCPU | ApplicationId, ApplicationName, WorkerType, CapacityAllocationType | 
| IdleWorkerCount |  工作者閒置總數。  | 計數 | ApplicationId, ApplicationName, WorkerType, CapacityAllocationType | 
| MemoryAllocated |  配置的總記憶體，以 GB 為單位。  | GB (GB) | ApplicationId, ApplicationName, WorkerType, CapacityAllocationType | 
| PendingCreationWorkerCount |  待建立的工作者總數。  | 計數 | ApplicationId, ApplicationName, WorkerType, CapacityAllocationType | 
| RunningWorkerCount |  應用程式正在使用的工作者總數。  | 計數 | ApplicationId, ApplicationName, WorkerType, CapacityAllocationType | 
| StorageAllocated |  配置的總磁碟儲存體，以 GB 為單位。  | GB (GB) | ApplicationId, ApplicationName, WorkerType, CapacityAllocationType | 
| TotalWorkerCount |  可用的工作者總數。  | 計數 | ApplicationId, ApplicationName, WorkerType, CapacityAllocationType | 

## 任務層級監控
<a name="job-level-metrics"></a>

Amazon EMR Serverless Amazon CloudWatch 每一分鐘會將下列任務層級指標傳送至 。您可以存取依任務執行狀態彙總任務執行的指標值。每個指標的單位都是*計數*。


**EMR Serverless 任務層級指標**  

| 指標 | Description | 維度 | 
| --- | --- | --- | 
| SubmittedJobs | 處於已提交狀態的任務數量。 | ApplicationId, ApplicationName | 
| PendingJobs | 處於待定狀態的任務數量。 | ApplicationId, ApplicationName | 
| ScheduledJobs | 處於排程狀態的任務數量。 | ApplicationId, ApplicationName | 
| RunningJobs | 處於執行中狀態的任務數量。 | ApplicationId, ApplicationName | 
| SuccessJobs | 處於成功狀態的任務數量。 | ApplicationId, ApplicationName | 
| FailedJobs | 處於失敗狀態的任務數量。 | ApplicationId, ApplicationName | 
| CancellingJobs | 處於取消狀態的任務數量。 | ApplicationId, ApplicationName | 
| CancelledJobs | 處於已取消狀態的任務數量。 | ApplicationId, ApplicationName | 

您可以使用引擎特定應用程式 UIs 監控引擎特定指標，以執行和完成 EMR Serverless 任務。當您存取執行中任務的 UI 時，即時應用程式 UI 會顯示即時更新。當您存取已完成任務的 UI 時，會顯示持久性應用程式 UI。

**執行任務**

對於執行中的 EMR Serverless 任務，請存取提供引擎特定指標的即時界面。您可以使用 Apache Spark UI 或 Hive Tez UI 來監控和偵錯任務。若要存取這些 UIs，請使用 EMR Studio 主控台或透過 請求安全 URL 端點 AWS Command Line Interface。

**已完成的任務**

對於您已完成的 EMR Serverless 任務，請使用 Spark 歷史記錄伺服器或持久性 Hive Tez UI 來存取 Spark 或 Hive 任務執行的任務詳細資訊、階段、任務和指標。若要存取這些 UIs，請使用 EMR Studio 主控台，或透過 請求安全 URL 端點 AWS Command Line Interface。

## 任務工作者層級監控
<a name="job-worker-level-metrics"></a>

Amazon EMR Serverless 會將`AWS/EMRServerless`命名空間和`Job Worker Metrics`指標群組中可用的下列任務工作者層級指標傳送至 Amazon CloudWatch。EMR Serverless 會在任務層級、工作者類型和capacity-allocation-type層級的任務執行期間，收集個別工作者的資料點。您可以使用 `ApplicationId`做為維度，以監控屬於相同應用程式的多個任務。

**注意**  
若要在 Amazon CloudWatch 主控台中檢視指標時，檢視 EMR Serverless 任務所使用的 CPU 和記憶體總數，請使用統計資料總和和和期間 1 分鐘。


**EMR Serverless 任務工作者層級指標**  

| 指標 | Description | 單位 | 維度 | 
| --- | --- | --- | --- | 
| WorkerCpuAllocated | 任務執行中為工作者配置的 vCPU 核心總數。 | vCPU | JobId、JobName、ApplicationId、ApplicationName、WorkerType 和 CapacityAllocationType | 
| WorkerCpuUsed | 工作執行中工作者使用的 vCPU 核心總數。 | vCPU | JobId、JobName、ApplicationId、ApplicationName、WorkerType 和 CapacityAllocationType | 
| WorkerMemoryAllocated | 任務執行中為工作者配置的總記憶體，以 GB 為單位。 | GB (GB) | JobId、JobName、ApplicationId、ApplicationName、WorkerType 和 CapacityAllocationType | 
| WorkerMemoryUsed | 工作者在任務執行中所使用的總記憶體，以 GB 為單位。 | GB (GB) | JobId、JobName、ApplicationId、ApplicationName、WorkerType 和 CapacityAllocationType | 
| WorkerEphemeralStorageAllocated | 任務執行中為工作者配置的暫時性儲存的位元組數。 | GB (GB) | JobId、JobName、ApplicationId、ApplicationName、WorkerType 和 CapacityAllocationType | 
| WorkerEphemeralStorageUsed | 工作者在任務執行中使用的暫時性儲存的位元組數。 | GB (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. 若要存取執行中任務的引擎特定應用程式 UIs和日誌：

   1. 選擇`RUNNING`狀態為 的任務。

   1. 在**應用程式詳細資訊**頁面上選取任務，或導覽至任務**的任務詳細資訊**頁面。

   1. 在**顯示 UI** 下拉式功能表下，選擇 **Spark UI** 或 **Hive Tez UI**，以導覽至任務類型的應用程式 UI。

   1. 若要存取 Spark 引擎日誌，請導覽至 Spark UI 中的**執行器**索引標籤，然後選擇驅動程式的**日誌**連結。若要存取 Hive 引擎日誌，請在 **Hive Tez UI 中選擇適當 DAG 的日誌**連結。

1. 若要存取已完成任務的引擎特定應用程式 UIs和日誌：

   1. 選擇`SUCCESS`狀態為 的任務。

   1. 在應用程式**的應用程式詳細資訊**頁面上選取任務，或導覽至任務**的任務詳細資訊**頁面。

   1. 在**顯示 UI** 下拉式功能表下，選擇 **Spark 歷史記錄伺服器**或**持久性 Hive Tez UI**，以導覽至任務類型的應用程式 UI。

   1. 若要存取 Spark 引擎日誌，請導覽至 Spark UI 中的**執行器**索引標籤，然後選擇驅動程式的**日誌**連結。若要存取 Hive 引擎日誌，請在 **Hive Tez UI 中選擇適當 DAG 的日誌**連結。

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

**使用 存取您的應用程式 UI AWS CLI**
+ 若要產生 URL，以使用 存取應用程式 UI 來執行和完成的任務，請呼叫 `GetDashboardForJobRun` API。

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

  您產生的 URL 有效期為一小時。

------

# 使用 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 或 `start-job-run`命令時，您也可以使用 `create-application`或 EMR Serverless API 將您的 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 指標的代理程式來執行 Spark 任務，並將其寫入 Amazon Managed Service for Prometheus 的`remoteWriteUrl`端點。然後，您可以使用 Amazon Managed Service for Prometheus 中的 Spark 指標進行視覺化、提醒和分析。

## 進階組態屬性
<a name="monitoring-with-prometheus-config-options"></a>

EMR Serverless 在 Spark 中使用名為 的元件`PrometheusServlet`來收集 Spark 指標，並將效能資料轉譯為與 Amazon Managed Service for Prometheus 相容的資料。根據預設，EMR Serverless 會在 Spark 中設定預設值，並在您使用 提交任務時剖析驅動程式和執行器指標`PrometheusMonitoringConfiguration`。

下表說明提交將指標傳送至 Amazon Managed Service for Prometheus 的 Spark 任務時設定的所有屬性。


| Spark 屬性 | 預設值 | Description | 
| --- | --- | --- | 
| 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 搭配使用的支援僅適用於 [AWS 區域 Amazon Managed Service for Prometheus 正式推出所在的 。](https://docs.aws.amazon.com/general/latest/gr/prometheus-service.html)
+ 在 Amazon Managed Service for Prometheus 上執行代理程式以收集 Spark 指標，需要工作者提供更多資源。如果您選擇較小的工作者大小，例如一個 vCPU 工作者，您的任務執行時間可能會增加。
+ Amazon Managed Service for Prometheus 搭配 EMR Serverless 的支援僅適用於 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 和 Amazon CloudWatch 警示](https://docs.aws.amazon.com/servicequotas/latest/userguide/configure-cloudwatch.html)。 *Service Quotas *

如需 EMR Serverless 服務配額的詳細資訊，請參閱 [的端點和配額 EMR Serverless](endpoints-quotas.md)。

## EMR Serverless 的服務配額用量指標
<a name="usage-metrics"></a>

EMR Serverless 會在 `AWS/Usage` 命名空間中發佈下列服務配額用量指標。


****  

| 指標 | Description | 
| --- | --- | 
| `ResourceCount`  | 您帳戶上執行的指定資源總數。資源是由與指標相關聯的[維度](#usage-metrics-dimensions)所定義。 | 

## EMR Serverless 服務配額用量指標的維度
<a name="usage-metrics-dimensions"></a>

您可以使用下列維度來精簡 EMR Serverless 發佈的用量指標。


****  

| 維度 | Value | Description | 
| --- | --- | --- | 
|  `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 發出四種類型的事件：
+ 應用程式狀態變更事件 – 發出應用程式每個狀態變更的事件。如需應用程式狀態的詳細資訊，請參閱 [應用程式狀態](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 報告的事件會`aws.emr-serverless`指派給 的值`source`，如下列範例所示。

**應用程式狀態變更事件**

下列範例事件顯示`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** 欄位才會出現在事件中。