

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

# 儲存日誌
<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"]`