本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 CloudWatch Logs 进行日志记录
标准工作流在 Amazon Step Functions 中记录执行历史记录,但您也可以选择将其配置为记录到 Amazon CloudWatch Logs 中。
与标准工作流不同,快速工作流不会在 Amazon Step Functions 中记录执行历史记录。要查看快速工作流的执行历史记录和结果,必须将日志记录配置为 Amazon CloudWatch Logs。发布日志不会阻止或减慢执行速度。
注意
配置日志记录时,将收取 CloudWatch Logs 费用
配置日志记录
使用 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 的链接,并配置了正确的筛选器,以获取该执行特定的日志事件。
要配置日志记录,可以在使用 CreateStateMachine 或 UpdateStateMachine 时传递 LoggingConfiguration 参数。您可以使用 CloudWatch Logs Insights 进一步分析 CloudWatch Logs 中的数据。有关更多信息,请参阅使用 CloudWatch Logs Insights 分析日志数据。
CloudWatch Logs 有效负载
执行历史事件的定义中可能包含输入或输出属性。如果发送到 CloudWatch Logs 的转义输入或转义输出超过 248KB,则会因为 CloudWatch Logs 配额而被截断。
-
您可以通过查看
inputDetails
和outputDetails
属性来确定有效负载是否已被截断。有关更多信息,请参阅HistoryEventExecutionDataDetails
数据类型。 -
对于标准工作流,您可以使用
GetExecutionHistory
查看完整的执行历史记录。 -
GetExecutionHistory
不适用于快速工作流。如果要查看完整的输入和输出,则可以使用 Amazon S3 ARN。有关更多信息,请参阅使用 Amazon S3 ARN 而不是传递大量有效负载。
用于记录到 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,请确保您已完成以下操作:
-
配置状态机的执行 IAM 角色,使其拥有向 CloudWatch Logs 记录日志的适当权限。
如果您使用的是 CreateStateMachine 或 UpdateStateMachine 请求,请确保在包含权限的
roleArn
参数中指定了 IAM 角色,如上例所示。 -
检查 CloudWatch Logs 资源策略,确认未超过 CloudWatch Logs 资源策略的 5120 字符限制。
如果超过了字符限制,请删除 CloudWatch Logs 资源策略中不必要的权限,或在日志组名称前加上
/aws/vendedlogs
,这将为日志组授予权限,而无需在资源策略中添加更多字符。在 Step Functions 控制台中创建日志组时,日志组名称的前缀为/aws/vendedlogs/states
。有关更多信息,请参阅Amazon CloudWatch Logs 资源策略大小限制。