View a markdown version of this page

记录和监控 Apache Spark 会话 - Amazon Athena
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

记录和监控 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" ] } } }'