本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在 Step Functions 中使用 CloudWatch 日志记录执行历史记录
标准工作流程在中记录执行历史记录 AWS Step Functions,但您可以选择配置对 Amazon 日志的 CloudWatch 日志记录。
与标准工作流程不同,Express Workflows 不记录执行历史记录 AWS Step Functions。 要查看 Express 工作流程的执行历史和结果,您必须配置对 Amazon Logs 的 CloudWatch 日志记录。发布日志不会阻止或减慢执行速度。
注意
配置日志记录时,将收取CloudWatch 日志费用
配置日志记录
使用 Step Functions 控制台创建标准工作流程时,该状态机不会配置为向日志发送 CloudWatch 日志。使用 Step Functions 控制台创建 Express Workflow 时,该状态机将默认配置为向日志发送 CloudWatch 日志。
对于 Express 工作流程,Step Functions 可以创建具有必要功能的角色 AWS Identity and Access Management (IAM) CloudWatch 日志策略。如果您使用、或创建了标准工作流程或快速工作流程 API CLI AWS CloudFormation,Step Functions 默认不启用日志记录,您需要确保自己的角色具有必要的权限。
对于从控制台启动的每次执行,Step Functions 都会提供一个指向 CloudWatch 日志的链接,该链接配置了正确的过滤器,用于获取特定于该执行的日志事件。
您可以选择配置客户托管 AWS KMS 加密日志的密钥。静态数据加密有关详细信息和权限设置,请参阅。
要配置日志记录,可以在使用CreateStateMachine或时传递LoggingConfiguration参数UpdateStateMachine。您可以使用 Logs Insights 进一步分析 CloudWatch CloudWatch 日志中的数据。有关更多信息,请参阅使用 Log CloudWatchs Insights 分析日志数据。
CloudWatch 记录有效负载
执行历史事件的定义中可能包含输入或输出属性。如果发送到 CloudWatch 日志的转义输入或转义输出超过 248KB,则会由于日志配额而被截断。 CloudWatch
-
您可以通过查看
inputDetails
和outputDetails
属性来确定有效负载是否已被截断。有关更多信息,请参阅HistoryEventExecutionDataDetails
数据类型。 -
对于标准工作流,您可以使用
GetExecutionHistory
查看完整的执行历史记录。 -
GetExecutionHistory
不适用于快速工作流。如果您想查看完整的输入和输出,可以使用 Amazon S3 ARNs。有关更多信息,请参阅 使用 Amazon S3 ARNs 而不是在 Step Functions 中传递大型有效负载。
IAM登录 CloudWatch 日志的策略
您还需要将状态机的执行IAM角色配置为具有登录日志的适当权限, CloudWatch 如以下示例所示。
IAM策略示例
以下是可用于配置权限的示例策略。如以下示例所示,您需要在Resource
字段中指定 *。 CloudWatch API诸如 CreateLogDelivery 和 DescribeLogGroups之类的操作不支持由定义的资源类型 Amazon CloudWatch Logs。 有关更多信息,请参阅由定义的操作 Amazon CloudWatch Logs.
-
有关信息 CloudWatch 资源,请参阅 CloudWatch Logs Amazon CloudWatch 用户指南中的资源和操作。
-
有关设置向日志发送日志所需的权限的信息,请参阅标题为 “发送到 CloudWatch 的日志” 部分中的用户权限 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 日志,请尝试以下步骤:
-
验证您的状态机的执行角色是否有权登录到 CloudWatch 日志。
当您调用CreateStateMachine或UpdateStateMachineAPI终端节点时,请确保
roleArn
参数中指定的IAM角色提供必要的权限,如前面的IAM策略示例所示。 -
验证 CloudWatch 日志资源策略不超过 5,120 个字符的限制。
如果策略超过字符限制,请在日志组名称前加上前缀
/aws/vendedlogs/states
,以向状态机授予权限并避免该限制。在 Step Functions 控制台中创建日志组时,建议的日志组名称已经带有/aws/vendedlogs/states
前缀。有关日志记录最佳做法的更多信息,请参阅CloudWatch 日志资源策略大小限制。
Step Functions 执行事件的日志级别
日志级别的范围从ALL
ERROR
到FATAL
到OFF
。将记录所有事件类型ALL
,设置为时不记录任何事件类型OFF
。对于 ERROR
和 FATAL
,请参阅下表。
有关根据这些日志级别为快速工作流执行显示的执行数据的更多信息,请参阅标准版和 Express 主机体验差异。
事件类型 | 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 | 已记录 | 未登录 | 未登录 | 未登录 |