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

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

在 Step Functions 中使用 CloudWatch 日志记录执行历史记录

标准工作流程在中记录执行历史记录 Amazon Step Functions,但您可以选择配置对 Amazon Logs 的 CloudWatch 日志记录。

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

注意

配置日志记录时,将收取CloudWatch 日志费用,并按已售日志费率计费。有关更多信息,请参阅 “ CloudWatch 定价” 页面上 “” 选项卡下的 “销售日志”。

配置日志记录

使用 Step Functions 控制台创建标准工作流程时,该状态机不会配置为向日志发送 CloudWatch 日志。使用 Step Functions 控制台创建 Express Workflow 时,该状态机将默认配置为向日志发送 CloudWatch 日志。

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

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

您可以选择配置客户托管 Amazon KMS 密钥来加密您的日志。有关详细信息和权限设置,请参阅静态数据加密

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

CloudWatch 记录有效负载

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

IAM登录 CloudWatch 日志的策略

您还需要将状态机的执行IAM角色配置为具有登录日志的适当权限, CloudWatch 如以下示例所示。

IAM策略示例

以下是可用于配置权限的示例策略。如以下示例所示,您需要在Resource字段中指定 *。 CloudWatch API诸如 CreateLogDelivery 和 DescribeLogGroups之类的操作不支持由定义的资源类型 Amazon CloudWatch Logs。 有关更多信息,请参阅由定义的操作 Amazon 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 日志进行故障排除

如果您的状态机无法将日志发送到 CloudWatch 日志,请尝试以下步骤:

  1. 验证您的状态机的执行角色是否有权登录到 CloudWatch 日志。

    当您调用CreateStateMachineUpdateStateMachineAPI终端节点时,请确保roleArn参数中指定的IAM角色提供必要的权限,如前面的IAM策略示例所示。

  2. 验证 CloudWatch 日志资源策略不超过 5,120 个字符的限制。

    如果策略超过字符限制,请在日志组名称前加上前缀 /aws/vendedlogs/states,来授予对状态机的权限并避免该限制。在 Step Functions 控制台中创建日志组时,建议的日志组名称已经具有前缀 /aws/vendedlogs/states。有关日志记录最佳实践的更多信息,请参阅 CloudWatch 日志资源策略大小限制

Step Functions 执行事件的日志级别

日志级别的范围从 ALLERRORFATALOFF。对于 ALL,将记录所有事件类型;而当设置为 OFF 时,不会记录任何事件类型。对于 ERRORFATAL,请参阅下表。

有关根据这些日志级别为快速工作流执行显示的执行数据的更多信息,请参阅标准和快速控制台体验的差别

事件类型 ALL ERROR FATAL OFF

ChoiceStateEntered

已记录 不记录 不记录 不记录

ChoiceStateExited

已记录 不记录 不记录 不记录

ExecutionAborted

已记录 已记录 已记录 不记录

ExecutionFailed

已记录 已记录 已记录 不记录

ExecutionStarted

已记录 不记录 不记录 不记录

ExecutionSucceeded

已记录 不记录 不记录 不记录

ExecutionTimedOut

已记录 已记录 已记录 不记录

FailStateEntered

已记录 已记录 不记录 不记录

LambdaFunctionFailed

已记录 已记录 不记录 不记录
LambdaFunctionScheduled 已记录 不记录 不记录 不记录

LambdaFunctionScheduleFailed

已记录 已记录 不记录 不记录

LambdaFunctionStarted

已记录 不记录 不记录 不记录

LambdaFunctionStartFailed

已记录 已记录 不记录 不记录

LambdaFunctionSucceeded

已记录 不记录 不记录 不记录

LambdaFunctionTimedOut

已记录 已记录 不记录 不记录

MapIterationAborted

已记录 已记录 不记录 不记录

MapIterationFailed

已记录 已记录 不记录 不记录

MapIterationStarted

已记录 不记录 不记录 不记录

MapIterationSucceeded

已记录 不记录 不记录 不记录

MapRunAborted

已记录 已记录 不记录 不记录

MapRunFailed

已记录 已记录 不记录 不记录

MapStateAborted

已记录 已记录 不记录 不记录

MapStateEntered

已记录 不记录 不记录 不记录

MapStateExited

已记录 不记录 不记录 不记录

MapStateFailed

已记录 已记录 不记录 不记录

MapStateStarted

已记录 不记录 不记录 不记录

MapStateSucceeded

已记录 不记录 不记录 不记录

ParallelStateAborted

已记录 已记录 不记录 不记录

ParallelStateEntered

已记录 不记录 不记录 不记录

ParallelStateExited

已记录 不记录 不记录 不记录
ParallelStateFailed 已记录 已记录 不记录 不记录

ParallelStateStarted

已记录 不记录 不记录 不记录

ParallelStateSucceeded

已记录 不记录 不记录 不记录

PassStateEntered

已记录 不记录 不记录 不记录

PassStateExited

已记录 不记录 不记录 不记录

SucceedStateEntered

已记录 不记录 不记录 不记录

SucceedStateExited

已记录 不记录 不记录 不记录

TaskFailed

已记录 已记录 不记录 不记录

TaskScheduled

已记录 不记录 不记录 不记录
TaskStarted 已记录 不记录 不记录 不记录

TaskStartFailed

已记录 已记录 不记录 不记录

TaskStateAborted

已记录 已记录 不记录 不记录

TaskStateEntered

已记录 不记录 不记录 不记录
TaskStateExited 已记录 不记录 不记录 不记录
TaskSubmitFailed 已记录 已记录 不记录 不记录
TaskSubmitted 已记录 不记录 不记录 不记录
TaskSucceeded 已记录 不记录 不记录 不记录
TaskTimedOut 已记录 已记录 不记录 不记录
WaitStateAborted 已记录 已记录 不记录 不记录
WaitStateEntered 已记录 不记录 不记录 不记录
WaitStateExited 已记录 不记录 不记录 不记录