本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 CloudWatch Logs 記錄 Step Functions 中的執行歷史記錄
標準工作流程會在 中記錄執行歷史記錄 AWS Step Functions,但您可以選擇設定記錄至 Amazon CloudWatch Logs。
快速工作流程與標準工作流程不同,它不會在 AWS Step Functions中記錄執行歷史記錄。若要查看快速工作流程的執行歷史記錄和結果,您必須設定記錄至 Amazon CloudWatch Logs。發佈日誌不會阻擋執行或降低執行速度。
注意
當您設定記錄時,CloudWatch Logs
設定 記錄
當您使用 Step Functions 主控台建立標準工作流程時,該狀態機器將不會設定為將日誌傳送至 CloudWatch Logs。當您使用 Step Functions 主控台建立快速工作流程時,預設會將該狀態機器設定為將日誌傳送至 CloudWatch Logs。
對於 Express 工作流程,Step Functions 可以使用 CloudWatch Logs 的必要 AWS Identity and Access Management (IAM) 政策來建立角色。如果您使用 API、CLI 或 建立標準工作流程或快速工作流程 AWS CloudFormation,Step Functions 預設不會啟用記錄,而且您需要確保您的角色具有必要的許可。
對於從主控台啟動的每個執行,Step Functions 會提供 CloudWatch Logs 的連結,以正確的篩選條件設定來擷取該執行特定的日誌事件。
您可以選擇性地設定客戶受管 AWS KMS 金鑰來加密您的日誌。如需詳細資訊和許可設定靜態資料加密,請參閱 。
若要設定記錄,您可以在使用 CreateStateMachine 或 UpdateStateMachine 時傳遞 LoggingConfiguration 參數。您可以使用 CloudWatch Logs Insights 進一步分析 CloudWatch Logs 中的資料。如需詳細資訊,請參閱搭配 CloudWatch Logs Insights 分析日誌資料。
CloudWatch Logs 承載
執行歷史記錄事件在其定義中可能包含輸入或輸出屬性。如果傳送至 CloudWatch Logs 的逸出輸入或逸出輸出超過 248 KiB,則會因為 CloudWatch Logs 配額而截斷。
-
您可以檢閱
inputDetails
和outputDetails
屬性,判斷承載是否已截斷。如需詳細資訊,請參閱HistoryEventExecutionDataDetails
資料類型。 -
對於標準工作流程,您可以使用 查看完整的執行歷史記錄
GetExecutionHistory
。 -
GetExecutionHistory
不適用於 Express Workflows。如果您想要查看完整的輸入和輸出,您可以使用 Amazon S3 ARNs。如需詳細資訊,請參閱在 Step Functions 中使用 Amazon S3 ARNs 而非傳遞大型承載。
用於記錄至 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,請嘗試下列步驟:
-
確認狀態機器的執行角色具有記錄到 CloudWatch Logs 的許可。
當您呼叫 CreateStateMachine 或 UpdateStateMachine API 端點時,請確定
roleArn
參數中指定的 IAM 角色提供必要的許可,如上述 IAM 政策範例所示。 -
驗證 CloudWatch Logs 資源政策不超過 5,120 個字元限制。
如果政策超過字元限制,請將您的日誌群組名稱加上 字首
/aws/vendedlogs/states
,以將許可授予狀態機器並避免限制。當您在 Step Functions 主控台中建立日誌群組時,建議的日誌群組名稱已加上 的字首/aws/vendedlogs/states
。如需記錄最佳實務的詳細資訊,請參閱 CloudWatch Logs 資源政策大小限制。
Step Functions 執行事件的日誌層級
日誌層級範圍從 ALL
ERROR
到 FATAL
到 OFF
。會記錄 的所有事件類型ALL
,設定為 時不會記錄任何事件類型OFF
。針對 ERROR
和 FATAL
,請參閱下表。
如需根據這些日誌層級顯示快速工作流程執行之執行資料的詳細資訊,請參閱標準和快速主控台體驗差異。
事件類型 | 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 | 已記錄 | 未記錄 | 未記錄 | 未記錄 |