日志记录和监控 - SageMaker 工作室管理最佳实践

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

日志记录和监控

为协助您调试编译作业、处理作业、训练作业、端点、转换作业、笔记本实例及其生命周期配置,亚马逊会将发送到 stdout 或 stderr 的算法容器、模型容器或笔记本实例生命周期配置的内容也发送到 Amazon CloudWatch Logs。您可以使用 Amazon CloudWatch 监控 SageMaker Studio,Amazon CloudWatch 会收集原始数据,并将数据处理为近实时的可读指标。这些统计数据会保存 15 个月,方便您访问历史信息并更好地了解 Web 应用程序或服务的运行情况。

使用 CloudWatch 进行日志记录

数据科学流程本质上具有实验性和迭代性,必须记录笔记本使用情况、训练/处理作业运行时间、训练指标和端点服务指标(如调用延迟)等活动。SageMaker 默认发布指标到 CloudWatch Logs,并使用 AWS KMS 客户托管密钥加密这些日志。

您也可以在不使用公共互联网的情况下,通过 VPC 端点将日志发送到 CloudWatch。还可以设置特定阈值监视警报,在达到对应阈值时发送通知或采取行动。有关更多信息,请参阅 Amazon CloudWatch 用户指南

SageMaker 在 /aws/sagemaker/studio 目录下创建了一个 Studio 日志组。此日志组下的每个用户配置文件和应用程序都有专属日志流,而生命周期配置脚本也有专属日志流。例如,“studio-user”用户配置文件具有 Jupyter 服务器应用程序和附加的生命周期脚本,而数据科学内核网关应用程序具有以下日志流:

/aws/sagemaker/studio/<domain-id>/studio-user/JupyterServer/default

/aws/sagemaker/studio/<domain-id>/studio-user/JupyterServer/default/LifecycleConfigOnStart

/aws/sagemaker/studio/<domain-id>/studio-user/KernelGateway/datascience-app

训练/处理/转换作业 API 的调用者需要具备以下权限,才能让 SageMaker 以您的名义向 CloudWatch 发送日志:

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "logs:CreateLogDelivery", "logs:CreateLogGroup", "logs:CreateLogStream", "logs:DeleteLogDelivery", "logs:Describe*", "logs:GetLogEvents", "logs:GetLogDelivery", "logs:ListLogDeliveries", "logs:PutLogEvents", "logs:PutResourcePolicy", "logs:UpdateLogDelivery" ], "Resource": "*", "Effect": "Allow" } ] }

如需使用自定义 AWS KMS 密钥加密这些日志,您首先要修改密钥策略,允许 CloudWatch 服务加密和解密密钥。创建用于日志加密的 AWS KMS 密钥后,请修改密钥策略以涵盖以下内容:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "logs.region.amazonaws.com" }, "Action": [ "kms:Encrypt*", "kms:Decrypt*", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:Describe*" ], "Resource": "*", "Condition": { "ArnLike": { "kms:EncryptionContext:aws:logs:arn": "arn:aws:logs:region:account-id:*" } } } ] }

请注意,您可以随时使用 ArnEquals 并为希望加密的 CloudWatch 日志提供特定的 Amazon 资源名称 (ARN)。为简单起见,亚马逊为您演示如何使用此密钥加密账户中的所有日志。训练、处理和模型端点还会发布实例 CPU 和内存利用率、托管调用延迟等相关指标。您可以进一步配置 Amazon SNS,以便在超过特定阈值时向管理员发出事件通知。训练和处理 API 的使用者需要具备以下权限:

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "cloudwatch:DeleteAlarms", "cloudwatch:DescribeAlarms", "cloudwatch:GetMetricData", "cloudwatch:GetMetricStatistics", "cloudwatch:ListMetrics", "cloudwatch:PutMetricAlarm", "cloudwatch:PutMetricData", "sns:ListTopics" ], "Resource": "*", "Effect": "Allow", "Condition": { "StringLike": { "cloudwatch:namespace": "aws/sagemaker/*" } } }, { "Action": [ "sns:Subscribe", "sns:CreateTopic" ], "Resource": [ "arn:aws:sns:*:*:*SageMaker*", "arn:aws:sns:*:*:*Sagemaker*", "arn:aws:sns:*:*:*sagemaker*" ], "Effect": "Allow" } ] }

使用 AWS CloudTrail 进行审计

如需提高合规性,请使用 AWS CloudTrail 对所有 API 进行审计。默认使用 AWS CloudTrail 对所有 SageMaker API 进行日志记录。启用 CloudTrail 无需其他任何 IAM 权限。

InvokeEndpointInvokeEndpointAsync 以外的所有 SageMaker 操作均由 CloudTrail 进行日志记录并载入操作。例如,CloudTrail 日志文件会为 CreateTrainingJobCreateEndpointCreateNotebookInstance 的调用操作生成条目。

每个 CloudTrail 事件条目中都有请求生成者的相关信息。身份信息可帮助您确定以下内容:

  • 请求是使用根用户凭证还是 AWS IAM 用户凭证发出的。

  • 请求是使用角色还是联合用户的临时安全凭证发出的。

  • 请求是否由其它 AWS 服务发出。有关示例事件,请参阅使用 CloudTrail 记录 SageMaker API 调用文档。

CloudTrail 默认将用户配置文件的 Studio 执行角色名称记录为每个事件的标识符。此方法适用于每位用户都有专属执行角色的情况。如果有多个用户共享一个执行角色,则可以使用 sourceIdentity 配置,将 Studio 用户配置文件名称传播到 CloudTrail。如需启用 sourceIdentity 功能,请参阅监控 Amazon SageMaker Studio 中的用户资源访问权限。共享空间中的所有操作都将空间 ARN 作为参考源,您无法使用 sourceIdentity 进行审计。