使用 CloudWatch Logs 进行日志记录 - Amazon Step Functions
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

使用 CloudWatch Logs 进行日志记录

标准工作流在 Amazon Step Functions 中记录执行历史记录,但您也可以选择将其配置为记录到 Amazon CloudWatch Logs 中。

与标准工作流不同,快速工作流不会在 Amazon Step Functions 中记录执行历史记录。要查看快速工作流的执行历史记录和结果,必须将日志记录配置为 Amazon CloudWatch Logs。发布日志不会阻止或减慢执行速度。

注意

配置日志记录时,将收取 CloudWatch Logs 费用,并且将按照公开日志费率计费。有关更多信息,请参阅 CloudWatch 定价页面上日志选项卡下的公开日志

配置日志记录

使用 Step Functions 控制台创建标准工作流时,不会将其配置为支持记录到 CloudWatch Logs 中。默认情况下,使用 Step Functions 控制台创建的快速工作流会被配置为支持记录到 CloudWatch Logs 中。

对于快速工作流,Step Functions 可以使用必要的 Amazon Identity and Access Management (IAM) 策略(针对 CloudWatch Logs)创建角色。如果您使用 API、CLI 或 Amazon CloudFormation 创建标准工作流,Step Functions 默认不会启用日志记录,并且您需要确保您的角色具有必要的权限。

对于从控制台启动的每个执行,Step Functions 都会提供一个指向 CloudWatch Logs 的链接,并配置了正确的筛选器,以获取该执行特定的日志事件。

要配置日志记录,可以在使用 CreateStateMachineUpdateStateMachine 时传递 LoggingConfiguration 参数。您可以使用 CloudWatch Logs Insights 进一步分析 CloudWatch Logs 中的数据。有关更多信息,请参阅使用 CloudWatch Logs Insights 分析日志数据

CloudWatch Logs 有效负载

执行历史事件的定义中可能包含输入或输出属性。如果发送到 CloudWatch Logs 的转义输入或转义输出超过 248KB,则会因为 CloudWatch Logs 配额而被截断。

用于记录到 CloudWatch Logs 的 IAM 策略

您还需要配置状态机的执行 IAM 角色,使其拥有记录到 CloudWatch Logs 的适当权限,如下例所示。

IAM 策略示例

以下是可用于配置权限的示例策略。如以下示例所示,您需要在 Resource 字段中指定 *,因为 CloudWatch API 操作(例如 CreateLogDelivery 和 DescribeLogGroups)不支持 Amazon CloudWatch Logs 定义的资源类型。有关更多信息,请参阅 Amazon CloudWatch Logs 定义的操作

  • 有关 CloudWatch 资源的信息,请参阅《Amazon CloudWatch 用户指南》中的 CloudWatch Logs 资源和操作

  • 有关设置向 CloudWatch Logs 发送日志所需权限的信息,请参阅《发送到 CloudWatch Logs 的日志》部分中的用户权限

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogDelivery", "logs:CreateLogStream", "logs:GetLogDelivery", "logs:UpdateLogDelivery", "logs:DeleteLogDelivery", "logs:ListLogDeliveries", "logs:PutLogEvents", "logs:PutResourcePolicy", "logs:DescribeResourcePolicies", "logs:DescribeLogGroups" ], "Resource": "*" } ] }
无法访问 CloudWatch Logs

如果您无法访问 CloudWatch Logs,请确保您已完成以下操作:

  1. 配置状态机的执行 IAM 角色,使其拥有向 CloudWatch Logs 记录日志的适当权限。

    如果您使用的是 CreateStateMachineUpdateStateMachine 请求,请确保在包含权限的 roleArn 参数中指定了 IAM 角色,如上例所示。

  2. 检查 CloudWatch Logs 资源策略,确认未超过 CloudWatch Logs 资源策略的 5120 字符限制。

    如果超过了字符限制,请删除 CloudWatch Logs 资源策略中不必要的权限,或在日志组名称前加上 /aws/vendedlogs,这将为日志组授予权限,而无需在资源策略中添加更多字符。在 Step Functions 控制台中创建日志组时,日志组名称的前缀为 /aws/vendedlogs/states。有关更多信息,请参阅Amazon CloudWatch Logs 资源策略大小限制