

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 CloudWatch Logs 在 Step Functions 中記錄執行歷史記錄
<a name="cw-logs"></a>

標準工作流程會在 中記錄執行歷史記錄 AWS Step Functions，但您可以選擇設定記錄至 Amazon CloudWatch Logs。

快速工作流程與標準工作流程不同，它不會在 AWS Step Functions中記錄執行歷史記錄。若要查看快速工作流程的執行歷史記錄和結果，您必須設定記錄至 Amazon CloudWatch Logs。發佈日誌不會阻擋執行或降低執行速度。

**日誌交付保證**  
Amazon CloudWatch Logs 會盡最大努力交付。不保證日誌項目的完整性和及時性。如果您在快速工作流程中需要保證工作流程歷史記錄，我們建議您實作工作流程步驟，以在適當的資料儲存服務中記錄資料，例如 Amazon DynamoDB。或者，您可以考慮使用**標準工作流程**來保證執行歷史記錄。

**定價資訊**  
當您設定記錄時，將會收取 [CloudWatch Logs 費用](https://aws.amazon.com/cloudwatch/pricing)，而且會按付費日誌費率向您收費。如需詳細資訊，請參閱 CloudWatch 定價頁面上日誌索引標籤下的**已修訂****日誌**。

## 設定 記錄
<a name="monitoring-logging-configure"></a>

當您使用 Step Functions 主控台建立標準工作流程時，**不會**將該狀態機器設定為將日誌傳送至 CloudWatch Logs。當您使用 Step Functions 主控台建立快速工作流程時，該狀態機器預設會設定為將日誌傳送至 CloudWatch Logs。

對於快速工作流程，Step Functions 可以使用 CloudWatch Logs 的必要 AWS Identity and Access Management (IAM) 政策來建立角色。如果您使用 API、CLI 或 建立標準工作流程或快速工作流程 CloudFormation，Step Functions 預設不會啟用記錄，而且您需要確保您的角色具有必要的許可。

對於從主控台啟動的每個執行，Step Functions 會提供 CloudWatch Logs 的連結，以正確的篩選條件設定來擷取該執行特定的日誌事件。

您可以選擇性地設定客戶受管 AWS KMS 金鑰來加密您的日誌。如需詳細資訊和許可設定[靜態資料加密](encryption-at-rest.md)，請參閱 。

若要設定記錄，您可以在使用 [CreateStateMachine](https://docs.aws.amazon.com/step-functions/latest/apireference/API_CreateStateMachine.html) 或 [UpdateStateMachine](https://docs.aws.amazon.com/step-functions/latest/apireference/API_UpdateStateMachine.html) 時傳遞 [LoggingConfiguration](https://docs.aws.amazon.com/step-functions/latest/apireference/API_LoggingConfiguration.html) 參數。您可以使用 CloudWatch Logs Insights 進一步分析 CloudWatch Logs 中的資料。如需詳細資訊，請參閱[搭配 CloudWatch Logs Insights 分析日誌資料](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AnalyzingLogData.html)。

## CloudWatch Logs 承載
<a name="cloudwatch-payload"></a>

執行歷史記錄事件在其定義中可能包含輸入或輸出屬性。如果傳送至 CloudWatch Logs 的逸出輸入或逸出輸出超過 248 KiB，則會因為 CloudWatch Logs 配額而截斷。
+  您可以檢閱 `inputDetails`和 `outputDetails` 屬性，判斷承載是否已截斷。如需詳細資訊，請參閱 [`HistoryEventExecutionDataDetails` 資料類型](https://docs.aws.amazon.com/step-functions/latest/apireference/API_HistoryEventExecutionDataDetails.html)。
+  對於標準工作流程，您可以使用 查看完整的執行歷史記錄[https://docs.aws.amazon.com/step-functions/latest/apireference/API_GetExecutionHistory.html](https://docs.aws.amazon.com/step-functions/latest/apireference/API_GetExecutionHistory.html)。
+  `GetExecutionHistory` 不適用於快速工作流程。如果您想要查看完整的輸入和輸出，您可以使用 Amazon S3 ARNs。如需詳細資訊，請參閱[在 Step Functions 中使用 Amazon S3 ARNs 而非傳遞大型承載](sfn-best-practices.md#avoid-exec-failures)。

## 用於記錄至 CloudWatch Logs 的 IAM 政策
<a name="cloudwatch-iam-policy"></a>

您也需要將狀態機器的執行 IAM 角色設定為具有登入 CloudWatch Logs 的適當許可，如下列範例所示。

**IAM 政策範例**  
下列是您可用來設定許可的範例政策。如下列範例所示，您需要在 欄位中指定 **\***`Resource`。CreateLogDelivery 和 DescribeLogGroups 等 CloudWatch API 動作不支援 [定義的資源類型Amazon CloudWatch Logs](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoncloudwatchlogs.html#amazoncloudwatchlogs-resources-for-iam-policies)。如需詳細資訊，請參閱 [定義的動作Amazon CloudWatch Logs](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoncloudwatchlogs.html#amazoncloudwatchlogs-actions-as-permissions)。
+ 如需 CloudWatch 資源的資訊，請參閱《*Amazon CloudWatch 使用者指南*》中的[CloudWatch Logs資源和操作](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/iam-access-control-overview-cwl.html#CWL_ARN_Format)。
+ 如需設定傳送日誌至 CloudWatch Logs 所需許可的相關資訊，請參閱 區段中的[使用者許可](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AWS-logs-and-resource-policy.html#AWS-logs-infrastructure-CWL)，主題為*傳送至 的日誌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": "*"
        }
    ]
}
```

## Step Functions 執行事件的日誌層級
<a name="cloudwatch-log-level"></a>

日誌層級的範圍從 `ALL``ERROR`到 `FATAL`到 `OFF`。會記錄 的所有事件類型`ALL`，設定為 時不會記錄任何事件類型`OFF`。針對 `ERROR` 和 `FATAL`，請參閱下表。

如需根據這些**日誌層級**顯示快速工作流程執行之執行資料的詳細資訊，請參閱 [標準和快速主控台體驗差異](concepts-view-execution-details.md#console-exp-differences)。


| 事件類型 | `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 | 已記錄 | 未記錄 | 未記錄 | 未記錄 | 

## 對記錄到 CloudWatch Logs 進行故障診斷
<a name="cloudwatch-log-troubleshooting"></a><a name="troubleshooting-logging-to-cloudwatch"></a>

如果您的狀態機器無法將日誌傳送至 CloudWatch Logs 或您收到錯誤："`AccessDeniedException : The state machine IAM Role is not authorized to access the Log Destination`"，請嘗試下列步驟：

1. 驗證狀態機器的執行角色是否具有登入 CloudWatch Logs 的許可。

   當您呼叫 [CreateStateMachine](https://docs.aws.amazon.com/step-functions/latest/apireference/API_CreateStateMachine.html) 或 [UpdateStateMachine](https://docs.aws.amazon.com/step-functions/latest/apireference/API_UpdateStateMachine.html) API 端點時，請確定 `roleArn` 參數中指定的 IAM 角色提供必要的許可，如上述 IAM 政策範例所示。

1. 驗證 CloudWatch Logs 資源政策不超過 5，120 個字元的限制。

   如果政策超過字元限制，請在日誌群組名稱前面加上 `/aws/vendedlogs/states`，以將許可授予狀態機器並避免限制。

   當您在 Step Functions 主控台中建立日誌群組時，建議的日誌群組名稱已加上 的字首`/aws/vendedlogs/states`。如需記錄最佳實務的詳細資訊，請參閱 [避免 CloudWatch 資源政策大小限制](sfn-best-practices.md#bp-cwl)。

1. 驗證帳戶中 CloudWatch Logs 日誌資源政策的數量少於**十**個。

   CloudWatch Logs 具有每個帳戶每個區域的十個資源政策配額。如果您嘗試在已有十個資源政策的狀態機器上啟用記錄，則不會建立或更新狀態機器，而且您會收到錯誤。如需記錄配額的詳細資訊，請參閱 [CloudWatch Logs 配額](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/cloudwatch_limits_cwl.html)

   若要驗證問題，請使用 CLI 命令檢查資源政策的數量：

    [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/logs/describe-resource-policies.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/logs/describe-resource-policies.html)

   若要解決問題，請修改現有的資源政策。

   首先，備份現有的政策。然後，將類似的動作或資源加入新政策，並使用下列 CLI 命令在帳戶中建立新的交付來源：

   [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/logs/put-delivery-source.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/logs/put-delivery-source.html)

   備份和更新政策之後，請使用下列命令移除任何未使用的政策：

    [https://docs.aws.amazon.com/cli/latest/reference/logs/delete-resource-policy.html](https://docs.aws.amazon.com/cli/latest/reference/logs/delete-resource-policy.html)