

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

# 將 Amazon EMR 日誌發佈至 CloudWatch Logs
<a name="emr-plan-logging-cw"></a>

## 概觀
<a name="emr-plan-logging-cw-overview"></a>

Amazon EMR on EC2 提供與 Amazon CloudWatch Logs 的原生整合，可讓您將叢集日誌直接傳送至 CloudWatch。此功能可簡化日誌管理，並提供 EMR 叢集日誌的集中存取，以進行監控、疑難排解和分析。

啟用 CloudWatch 記錄功能後，您就可以自動擷取日誌，並將日誌從 EMR 叢集串流至 CloudWatch 日誌群組。這包括步驟執行日誌、Spark 驅動程式日誌和 Spark 執行器日誌，可讓您全面了解叢集操作和應用程式行為。

CloudWatch 記錄功能從 Amazon EMR 7.11.0 版開始可用，並在建立叢集時透過 `MonitoringConfiguration` 參數設定。啟用後，日誌會在產生時自動串流至 CloudWatch，透過 CloudWatch 主控台或 API 提供近乎即時的日誌資料存取。

## 先決條件
<a name="emr-plan-logging-cw-prerequisites"></a>

為您的 EMR 叢集啟用 CloudWatch 記錄之前，請確定符合下列先決條件：
+ **Amazon EMR 版本：**您的叢集必須使用 Amazon EMR 7.11.0 或更新版本。
+ **CloudWatch Agent 應用程式：**Amazon CloudWatch Agent 必須安裝在您的叢集上。
+ **IAM 許可：**叢集的 EC2 執行個體描述檔必須具有所需的 CloudWatch Logs 許可。
+ **VPC 端點 （適用於私有子網路）：如果您的**叢集位於私有子網路中，您必須為 CloudWatch Logs 設定 VPC 端點。

## 許可
<a name="emr-plan-logging-cw-permissions"></a>

CloudWatch Agent 需要特定 AWS Identity and Access Management(IAM) 許可，才能建立日誌群組、建立日誌串流，以及將日誌事件寫入 CloudWatch Logs。這些許可必須連接到 EMR 叢集所使用的 Amazon EC2 執行個體描述檔。

### 必要的 IAM 政策
<a name="emr-plan-logging-cw-required-policy"></a>

將下列政策新增至 [Amazon EMR 的 EC2 執行個體描述檔](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-iam-role-for-ec2.html)，以授予必要的許可：

```
{
  "Version": "2012-10-17", 		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "logs:PutLogEvents",
        "logs:PutRetentionPolicy",
        "logs:DescribeLogStreams",
        "logs:DescribeLogGroups",
        "logs:CreateLogStream",
        "logs:CreateLogGroup"
      ],
      "Resource": "*",
      "Sid": "AllowCWACloudWatchLogs"
    }
  ]
}
```

### 連接政策
<a name="emr-plan-logging-cw-permissions-attaching"></a>

若要將此政策連接至 EMR 的 EC2 執行個體描述檔：

1. 導覽至 IAM 主控台。

1. 找出 EMR 叢集使用的執行個體描述檔。 通常為 `EMR_EC2_DefaultRole`。

1. 建立新的內嵌政策或附加具有上述許可的客戶受管政策。

1. 儲存政策變更。

如需 Amazon EMR 的 IAM 角色詳細資訊，請參閱《[Amazon EMR 管理指南》中的設定 Amazon EMR 的 IAM 角色對 AWS 服務和資源的許可](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-iam-roles.html)。

## 設定 CloudWatch Logging
<a name="emr-plan-logging-cw-config"></a>

您可以透過 AWS 管理主控台或 AWS SDKs 建立新的 EMR 叢集時 AWS CLI，啟用 CloudWatch 記錄。組態是透過 `MonitoringConfiguration` 參數指定。

### 使用 AWS 管理主控台
<a name="emr-plan-logging-cw-config-console"></a>

若要從主控台建立具有 CloudWatch 記錄的叢集：

1. 導覽至 [AWS EMR 主控台](https://console.aws.amazon.com/emr/)。

1. 選擇 **Create Cluster** (建立叢集)。

1. 在**名稱和應用程式**下，選取 Amazon EMR 7.11.0 或更新版本。

1. 在**應用程式套件**下，選取您要安裝的應用程式，並確保您的選擇中包含 Amazon CloudWatch Agent。

1. 在**叢集日誌**下，選取將**叢集特定日誌發佈至 Amazon CloudWatch** 的選項。

1. （選用） 設定下列設定：
   + **日誌群組名稱** - 自訂日誌群組名稱。預設值為 `/aws/emr/{cluster_id}`。
   + **日誌串流字首** - 日誌串流名稱的字首 預設值為 `empty`。
   + **CloudWatch KMS 金鑰** - 日誌加密的 KMS 金鑰 ARN （選用）。
   + **日誌類型** - 選取要擷取的日誌類型 （預設：步驟和 Spark 驅動程式）

1. 完成剩餘的叢集組態設定。

1. 選擇 **Create Cluster** (建立叢集)。

建立叢集之後，您可以從**叢集管理** → Amazon CloudWatch 中的**日誌目的地**下的 **EMR 叢集詳細資訊**頁面存取 CloudWatch Logs 連結。 Amazon CloudWatch

### 使用 AWS CLI
<a name="emr-plan-logging-cw-config-using-the-cli"></a>

您可以使用 AWS CLI 搭配 `create-cluster`命令來啟用 CloudWatch 記錄。CloudWatch 代理程式必須包含在 `--applications` 參數中，並透過 `--monitoring-configuration` 參數設定記錄。

#### 範例：預設組態
<a name="emr-plan-logging-cw-config-default-configuration"></a>

EMR 只會自動擷取步驟日誌和 Spark 驅動程式日誌，並將其傳送至預設日誌群組。

```
aws emr create-cluster \
  --name "EMR cluster with CloudWatch Logs" \
  --release-label emr-7.11.0 \
  --applications Name=Spark Name=AmazonCloudWatchAgent \
  --instance-type m7g.2xlarge \
  --instance-count 3 \
  --use-default-roles \
  --monitoring-configuration '{
    "CloudWatchLogConfiguration": {
      "Enabled": true
    }
  }'
```

使用預設組態時：
+ **日誌群組名稱：** `/aws/emr/{cluster_id}`（其中 `{cluster_id}` 會自動取代為您的叢集 ID)。
+ **日誌串流字首：空白 **（無字首）。
+ **日誌類型：** `STEP_LOGS`和 `SPARK_DRIVER` 已啟用，每個都會同時擷取 `STDOUT`和 `STDERR`。
+ **加密：**無客戶受管金鑰 （預設使用 CloudWatch Server 端加密）

#### 範例：自訂組態
<a name="emr-plan-logging-cw-config-default-configuration-custom"></a>

此範例示範具有特定日誌群組名稱、KMS 加密和選擇性日誌類型的自訂組態。

```
aws emr create-cluster \
  --name "EMR cluster with custom CloudWatch Logs" \
  --release-label emr-7.11.0 \
  --applications Name=Spark Name=AmazonCloudWatchAgent \
  --instance-type m7g.2xlarge \
  --instance-count 3 \
  --use-default-roles \
  --monitoring-configuration '{
    "CloudWatchLogConfiguration": {
      "Enabled": true,
      "LogGroupName": "/my-company/emr/production",
      "LogStreamNamePrefix": "cluster-prod",
      "EncryptionKeyArn": "arn:aws:kms:us-east-1:123456789012:key/12345678-1234-1234-1234-123456789012",
      "LogTypes": {
        "STEP_LOGS": ["STDOUT", "STDERR"],
        "SPARK_DRIVER": ["STDOUT", "STDERR"],
        "SPARK_EXECUTOR": ["STDERR", "STDOUT"]
      }
    }
  }'
```

此組態：
+ 在自訂日誌群組 中建立日誌`/my-company/emr/production`。
+ 使用 為所有日誌串流名稱加上字首`cluster-prod`。
+ 使用指定的 KMS 金鑰加密日誌。
+ 擷取所有日誌類型 - 步驟日誌、Spark 驅動程式日誌和 Spark 執行器日誌。

如需 AWS CLI 搭配 Amazon EMR 使用 的詳細資訊，請參閱 [AWS CLI EMR 的命令參考](https://docs.aws.amazon.com/cli/latest/reference/emr/)。

### 組態參考
<a name="emr-plan-logging-cw-configuration-reference"></a>

#### CloudWatchLogConfiguration 參數
<a name="emr-plan-logging-cw-configuration-parameters"></a>

`CloudWatchLogConfigurationv` 物件支援下列參數：


**CloudWatchLogConfiguration 參數**  

| 參數 | Type | 必要 | 描述 | 
| --- | --- | --- | --- | 
| Enabled | Boolean | 是 | 設定為 true以啟用 CloudWatch 記錄。設定為 false以停用。 | 
| LogGroupName | String | 否 | CloudWatch 日誌群組名稱。預設：/aws/emr/{cluster\_id} | 
| LogStreamNamePrefix | String | 否 | 日誌串流名稱的字首。預設：空字串 | 
| EncryptionKeyArn | String | 否 | 日誌加密的 KMS 金鑰 ARN。如果未指定，日誌會透過 CloudWatch 伺服器端加密進行加密。 | 
| LogTypes | 物件 | 否 | 指定要擷取的日誌類型。預設： STEP\_LOGS和 SPARK\_DRIVER類型搭配 STDOUT 和 STDERR。 | 

#### 日誌類型
<a name="emr-plan-logging-cw-configuration-log-types"></a>

Amazon EMR 支援三種日誌類型，每個都同時擷取標準輸出和標準錯誤串流：


**支援的日誌類型**  

| 日誌類型 | Description | 可用的串流 | 
| --- | --- | --- | 
| STEP\_LOGS | EMR 步驟執行日誌，包括步驟控制器日誌 | STDOUT, STDERR | 
| SPARK\_DRIVER | 來自 Spark 應用程式的 Apache Spark 驅動程式日誌 | STDOUT, STDERR | 
| SPARK\_EXECUTOR | 工作者節點的 Apache Spark 執行器日誌 | STDOUT, STDERR | 

##### 預設日誌類型組態
<a name="emr-plan-logging-cw-default-log-types"></a>

當您未指定 `LogTypes` 參數時，EMR 會使用下列預設組態：

```
"LogTypes": {
  "STEP_LOGS": ["STDOUT", "STDERR"],
  "SPARK_DRIVER": ["STDOUT", "STDERR"]
}
```

##### 自訂日誌類型組態
<a name="emr-plan-logging-cw-default-log-types-configuration"></a>

您可以明確指定 `LogTypes` 參數來自訂要擷取的日誌類型。例如，若要僅擷取步驟日誌：

```
"LogTypes": {
  "STEP_LOGS": ["STDOUT", "STDERR"]
}
```

或者，若要僅從 Spark 驅動程式擷取標準錯誤：

```
"LogTypes": {
  "SPARK_DRIVER": ["STDERR"]
}
```

#### 日誌群組和串流命名
<a name="emr-plan-logging-cw-log-group-and-stream-naming"></a>

CloudWatch 會將日誌整理成日誌群組和日誌串流：
+ **日誌群組：**共用相同保留、監控和存取控制設定的日誌串流集合。
  + **預設名稱：** `/aws/emr/{cluster_id}`
  + **自訂名稱：**您指定的任何有效 CloudWatch 日誌群組名稱。
+ **日誌串流：**來自單一來源的一系列日誌事件：
  + 命名模式：
    + **步驟日誌：**`{prefix}/steps/{step_id}/{file_name}`。
    + **Spark 驅動程式和執行器日誌：** `{prefix}/applications/{application_id}/{container_id}/{file_name}`
  + 範例：
    + `/steps/s-ABCDEFG123456/stdout`
    + `cluster-prod/steps/s-ABCDEFG123456/stderr`
    + `/applications/application_1234567890_0001/container_1234567890_0001_01_000001/stdout`

### 使用 加密日誌 AWS KMS
<a name="emr-plan-logging-cw-encrypting-logs-with-kms"></a>

您可以使用 AWS Key Management Service (KMS) 加密靜態 CloudWatch 日誌。若要啟用加密：

1. 在 AWS 與 EMR 叢集相同的區域中建立或識別 KMS 金鑰。

1. 確保 KMS 金鑰政策允許 CloudWatch Logs 服務使用金鑰。

1. 將 `EncryptionKeyArn` 參數新增至您的 `CloudWatchLogConfiguration`。

如需加密 CloudWatch Logs 資料的詳細資訊，請參閱[使用 在 CloudWatch Logs 中加密日誌資料 AWS Key Management Service](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/encrypt-log-data-kms.html)。

#### 使用 KMS 加密的範例
<a name="emr-plan-logging-cw-encrypting-logs-with-kms-example"></a>

```
{
  "CloudWatchLogConfiguration": {
    "Enabled": true,
    "EncryptionKeyArn": "arn:aws:kms:us-east-1:123456789012:key/12345678-1234-1234-1234-123456789012"
  }
}
```

### 在 CloudWatch 中檢視日誌
<a name="emr-plan-logging-cw-viewing-logs"></a>

叢集執行並啟用 CloudWatch 記錄後，您可以透過 CloudWatch 主控台或 API 檢視和分析日誌。

#### 從 EMR 主控台存取日誌
<a name="emr-plan-logging-cw-viewing-accessing"></a>

存取叢集日誌的最快方式是直接從 EMR 主控台：

1. 導覽至 Amazon EMR 主控台。

1. 從叢集清單中選取您的叢集。

1. 在叢集詳細資訊頁面上，找到**叢集管理**區段。

1. 按一下 **Amazon CloudWatch 連結中的日誌目的地**。

此連結會引導您直接前往篩選至叢集日誌群組的 CloudWatch Logs 主控台。

#### 從 CloudWatch 主控台存取日誌
<a name="emr-plan-logging-cw-viewing-accessing-console"></a>

若要手動導覽至 CloudWatch 中的日誌：

1. 開啟 [CloudWatch 主控台](https://console.aws.amazon.com/cloudwatch/)。

1. 在導覽窗格中，選擇 **Log groups** (日誌群組)。

1. 尋找您的日誌群組 （預設： `/aws/emr/{cluster_id}`或您的自訂日誌群組名稱）

1. 選擇日誌群組以檢視可用的日誌串流。

1. 選取日誌串流以檢視其日誌事件。

如需有關 CloudWatch Logs 的詳細資訊，請參閱 [Amazon CloudWatch Logs 使用者指南](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/)。

### 考量事項
<a name="emr-plan-logging-cw-considerations"></a>

#### CloudWatch 代理程式行為
<a name="emr-plan-logging-cw-considerations-agent-behavior"></a>

Amazon CloudWatch Agent 同時提供指標和記錄功能：
+ 單獨啟用 CloudWatch Agent （不含 `MonitoringConfiguration`) 只會將 CloudWatch 指標發佈至 CloudWatch。不會傳送日誌。
+ 啟用 CloudWatch 記錄需要 CloudWatch Agent 應用程式和具有 的 `MonitoringConfiguration` 參數`CloudWatchLogConfiguration`。這可同時啟用指標和記錄。

#### 僅啟用 CloudWatch 記錄 （停用 CloudWatch 指標）
<a name="emr-plan-logging-cw-considerations-disabling"></a>

如果您想要啟用 CloudWatch 記錄，但停用指標收集功能，您可以設定 CloudWatch Agent 來停止匯出指標。將下列分類新增至叢集組態：

```
[
  {
    "Classification": "emr-metrics",
    "Properties": {},
    "Configurations": [
      {
        "Classification": "emr-system-metrics",
        "Properties": {},
        "Configurations": []
      }
    ]
  }
]
```

如需 CloudWatch 指標的詳細資訊，請參閱[使用 Amazon CloudWatch 監控指標](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/AmazonCloudWatchAgent-metrics.html)。

#### 已知限制
<a name="emr-plan-logging-cw-considerations-disabling-known"></a>

日誌上傳期間的指標資料點：  
當 CloudWatch 記錄處於作用中狀態時，您可能會在高日誌活動期間發現 CloudWatch 指標資料偶爾出現差距，特別是在步驟提交期間。這是因為 EMR 執行個體控制器會在提交步驟時重新啟動 CloudWatch Agent 以套用新的日誌組態，暫時中斷指標收集。這不會影響日誌交付或叢集功能。

#### 私有子網路需求
<a name="emr-plan-logging-cw-considerations-disabling-known-private"></a>

若要將日誌發佈至私有子網路中 EMR 叢集的 CloudWatch Logs，請建立 CloudWatch Logs VPC 端點並將其與叢集的 VPC 建立關聯。

如需 CloudWatch Logs 端點的詳細資訊，請參閱《 *AWS 一般參考指南*》中的 [Amazon CloudWatch Logs 端點和配額](https://docs.aws.amazon.com/general/latest/gr/cwl_region.html)。

#### 成本考量
<a name="emr-plan-logging-cw-cost-considerations"></a>

CloudWatch Logs 費用是根據：
+ **資料擷取：**擷取至 CloudWatch 的日誌資料量
+ **儲存：**根據您的保留設定存放的日誌資料量
+ **資料分析：**使用 CloudWatch Logs Insights 執行的查詢

若要最佳化成本：
+ 為您的日誌群組設定適當的日誌保留期間。
+ 使用選擇性日誌類型僅擷取您需要的日誌。
+ 考慮以較低的成本使用 Amazon S3 日誌記錄進行長期日誌儲存。

如需目前的定價資訊，請參閱 [Amazon CloudWatch 定價](https://aws.amazon.com/cloudwatch/pricing/)。

### 其他資源
<a name="emr-plan-logging-cw-additional-resources"></a>
+ [使用 Amazon CloudWatch 監控指標](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/AmazonCloudWatchAgent-metrics.html) - CloudWatch 指標集合的相關資訊
+ [設定 Amazon EMR 的 IAM 角色](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-iam-roles.html) - EMR 叢集的 IAM 角色組態
+ [Amazon CloudWatch Logs 使用者指南](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/) - CloudWatch Logs 功能完整指南
+ [AWS CLI EMR 的命令參考](https://docs.aws.amazon.com/cli/latest/reference/emr/) - CLI 參考文件