

# 记录和监控 Apache Spark 会话
<a name="notebooks-spark-logging-monitoring"></a>

从 Apache Spark 3.5 发行版开始，您可以指定托管、Amazon S3 或 CloudWatch 作为日志记录选项。

对于托管日志记录和 S3 日志记录，下表列出了选择这些选项时预期的日志位置和 UI 可用性。


****  

| Option | 事件日志 | 容器日志 | 应用程序 UI | 
| --- | --- | --- | --- | 
| 托管日志记录（默认） | 存储在托管 S3 存储桶中 | 存储在托管 S3 存储桶中 | 支持 | 
| 托管日志记录和 S3 存储桶 | 存放在两个位置 | 存储在 S3 存储桶中 | 支持 | 
| Amazon S3 存储桶 | 存储在 S3 存储桶中 | 存储在 S3 存储桶中 | 不支持1 | 

1 建议您保持选中托管日志记录选项。否则，您将无法使用内置应用程序 UI。

## 托管日志记录
<a name="notebooks-spark-logging-monitoring-managed"></a>

默认情况下，Athena Spark 工作组将应用程序日志安全存储在 S3 存储桶中，最长 30 天。

您可以选择提供 KMS 密钥（密钥 id、arn、别名或别名 arn），服务将使用该密钥对托管日志进行加密。

```
aws athena start-session \
  --work-group "WORKGROUP" \
  --monitoring-configuration '{
    "ManagedLoggingConfiguration": {
        "Enabled": true,
        "KmsKey": "KMS_KEY"
    },
  }'
  --engine-configuration ''
```

**注意**  
如果关闭托管日志，Athena 将无法代表您对会话进行故障排除。示例：您将无法通过 Amazon SageMaker AI Studio 笔记本或使用 `GetResourceDashboard` API 访问 Spark-UI。

要从 Amazon CLI 关闭此选项，请在启动交互式会话时使用 `ManagedLoggingConfiguration` 配置。

```
aws athena start-session \
  --work-group "WORKGROUP" \
  --monitoring-configuration '{
    "ManagedLoggingConfiguration": {
      "Enabled": false
    },
  }'
  --engine-configuration ''
```

### 托管日志记录所需的权限
<a name="notebooks-spark-logging-monitoring-managed-permissions"></a>

如果您提供 KMS 密钥，则需要在执行角色的权限策略中提供以下权限。

```
{
    "Action": [
        "kms:Encrypt",
        "kms:Decrypt",
        "kms:ReEncrypt*",
        "kms:GenerateDataKey*",
        "kms:DescribeKey"
    ],
    "Resource": "*",
    "Effect": "Allow"
}
```

## Amazon S3 日志记录
<a name="notebooks-spark-logging-monitoring-s3"></a>

您可以配置将日志传输到 Amazon S3 存储桶。

要从 Amazon CLI 启用 S3 日志传输，请在启动交互式会话时使用 `S3LoggingConfiguration` 配置。

```
aws athena start-session \
  --work-group "WORKGROUP" \
  --monitoring-configuration '{
    "S3LoggingConfiguration": {
      "Enabled":true,
      "LogLocation": "s3://bucket/",
    },
  }'
  --engine-configuration ''
```

您可以选择提供 KMS 密钥（密钥 id、arn、别名或别名 arn），服务将使用该密钥对 S3 日志进行加密。

```
aws athena start-session \
  --work-group "WORKGROUP" \
  --monitoring-configuration '{
    "S3LoggingConfiguration": {
      "Enabled":true,
      "LogLocation": "s3://bucket/",
      "KmsKey": "KMS_KEY"
    },
  }'
  --engine-configuration ''
```

### 将日志传输到 Amazon S3 所需的权限
<a name="notebooks-spark-logging-monitoring-s3-permissions"></a>

执行角色的权限策略中必须包含以下权限，会话才能将日志发送到 Amazon S3 存储桶。

```
{
    "Action": "s3:*",
    "Resource": "*",
    "Effect": "Allow"
}
```

如果您提供 KMS 密钥，则还需要在执行角色的权限策略中提供以下权限。

```
{
    "Action": [
        "kms:Encrypt",
        "kms:Decrypt",
        "kms:ReEncrypt*",
        "kms:GenerateDataKey*",
        "kms:DescribeKey"
    ],
    "Resource": "*",
    "Effect": "Allow"
}
```

如果 KMS 密钥和存储桶并非来自同一个账户，则 KMS 需要允许 S3 服务主体。

```
{
  "Effect": "Allow",
  "Principal": { "Service": "s3.amazonaws.com" },
  "Action": [
    "kms:Encrypt",
    "kms:Decrypt",
    "kms:GenerateDataKey*"
  ],
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "aws:SourceAccount": "ACCOUNT_HAVING_KMS_KEY"
    }
  }
}
```

## CloudWatch 日志记录
<a name="notebooks-spark-logging-monitoring-cloudwatch"></a>

您可以配置将日志传输到 CloudWatch 日志组。

要从 Amazon CLI 启用 S3 日志传输，请在启动交互式会话时使用 `CloudWatchLoggingConfiguration` 配置。

```
aws athena start-session \
  --work-group "WORKGROUP" \
  --monitoring-configuration '{
    "CloudWatchLoggingConfiguration": {
      "Enabled": true,
      "LogGroup": "/aws/athena/sessions/${workgroup}",
      "LogStreamNamePrefix": "session-"
    }
  }'
  --engine-configuration ''
```

默认情况下，将传送所有日志，但您可以选择指定要包含的日志类型。

```
aws athena start-session \
  --work-group "WORKGROUP" \
  --monitoring-configuration '{
    "CloudWatchLoggingConfiguration": {
      "Enabled": true,
      "LogGroup": "/aws/athena/sessions/${workgroup}",
      "LogStreamNamePrefix": "session-",
      "LogTypes": {
          "SPARK_DRIVER": [
              "STDOUT",
              "STDERR"
          ],
          "SPARK_EXECUTOR": [
              "STDOUT",
              "STDERR"
          ]
       }
    }
  }'
  --engine-configuration ''
```

### 将日志传输到 CloudWatch 所需的权限
<a name="notebooks-spark-logging-monitoring-cloudwatch-permissions"></a>

执行角色的权限策略中必须包含以下权限，会话才能将日志发送到 CloudWatch 日志组。

```
{
    "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents",
        "logs:DescribeLogGroups",
        "logs:DescribeLogStreams"
    ],
    "Resource": "*",
    "Effect": "Allow"
}
```

并允许 KMS 密钥资源策略的以下权限。

```
{
  "Effect": "Allow",
  "Principal": {
    "Service": "logs.<region>.amazonaws.com"
  },
  "Action": [
    "kms:Encrypt",
    "kms:Decrypt",
    "kms:ReEncrypt*",
    "kms:GenerateDataKey*",
    "kms:DescribeKey"
  ],
  "Resource": "*"
}
```

## 配置工作组日志记录默认值
<a name="notebooks-spark-logging-monitoring-workgroup-defaults"></a>

您还可以在工作组级别指定默认的日志记录选项。

要从 Amazon CLI 指定工作组的默认日志记录选项，请在创建新工作组时使用 `monitoring-configuration` 配置：

```
aws athena create-work-group \
  --region "REGION" \
  --name "WORKGROUP_NAME" \
  --monitoring-configuration '{
      "CloudWatchLoggingConfiguration": {
          "Enabled": true,
          "LogGroup": "/aws/athena/sessions/${workgroup}",
          "LogStreamNamePrefix": "session-",
          "LogTypes": {
              "SPARK_DRIVER": [
                  "STDOUT",
                  "STDERR"
              ],
              "SPARK_EXECUTOR": [
                  "STDOUT",
                  "STDERR"
              ]
          }
        },
        "ManagedLoggingConfiguration": {
            "Enabled": true,
            "KmsKey": "KMS_KEY"
        },
        "S3LoggingConfiguration": {
            "Enabled": true,
            "KmsKey": "KMS_KEY"
            "LogLocation": "s3://bucket/",
            "LogTypes": {
                "SPARK_DRIVER": [
                    "STDOUT",
                    "STDERR"
                ],
                "SPARK_EXECUTOR": [
                    "STDOUT",
                    "STDERR"
                ]
            }
        }
    }'
```

要从 Amazon CLI 修改工作组的默认日志记录选项，请在更新工作组时使用 `monitoring-configuration` 配置。这些更改适用于今后的新交互式会话。

```
aws athena update-work-group \
  --region "REGION" \
  --work-group "WORKGROUP_NAME" 
  --monitoring-configuration '{
      "CloudWatchLoggingConfiguration": {
          "Enabled": true,
          "LogGroup": "/aws/athena/sessions/${workgroup}",
          "LogStreamNamePrefix": "session-",
          "LogTypes": {
              "SPARK_DRIVER": [
                  "STDOUT",
                  "STDERR"
              ],
              "SPARK_EXECUTOR": [
                  "STDOUT",
                  "STDERR"
              ]
          }
        },
        "ManagedLoggingConfiguration": {
            "Enabled": true,
            "KmsKey": "KMS_KEY"
        },
        "S3LoggingConfiguration": {
            "Enabled": true,
            "KmsKey": "KMS_KEY"
            "LogLocation": "s3://bucket/",
            "LogTypes": {
                "SPARK_DRIVER": [
                    "STDOUT",
                    "STDERR"
                ],
                "SPARK_EXECUTOR": [
                    "STDOUT",
                    "STDERR"
                ]
            }
        }
    }'
```