记录和监控 Apache Spark 会话
从 Apache Spark 3.5 发行版开始,您可以指定托管、Amazon S3 或 CloudWatch 作为日志记录选项。
对于托管日志记录和 S3 日志记录,下表列出了选择这些选项时预期的日志位置和 UI 可用性。
| Option | 事件日志 | 容器日志 | 应用程序 UI |
|---|---|---|---|
| 托管日志记录(默认) | 存储在托管 S3 存储桶中 | 存储在托管 S3 存储桶中 | 支持 |
| 托管日志记录和 S3 存储桶 | 存放在两个位置 | 存储在 S3 存储桶中 | 支持 |
| Amazon S3 存储桶 | 存储在 S3 存储桶中 | 存储在 S3 存储桶中 | 不支持1 |
1 建议您保持选中托管日志记录选项。否则,您将无法使用内置应用程序 UI。
托管日志记录
默认情况下,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 ''
托管日志记录所需的权限
如果您提供 KMS 密钥,则需要在执行角色的权限策略中提供以下权限。
{ "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*", "Effect": "Allow" }
Amazon S3 日志记录
您可以配置将日志传输到 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 所需的权限
执行角色的权限策略中必须包含以下权限,会话才能将日志发送到 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 日志记录
您可以配置将日志传输到 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 所需的权限
执行角色的权限策略中必须包含以下权限,会话才能将日志发送到 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": "*" }
配置工作组日志记录默认值
您还可以在工作组级别指定默认的日志记录选项。
要从 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" ] } } }'