

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

# 設定 CloudWatch Logs 以進行 OTA 更新
<a name="ota-logging"></a>

OTA Update 服務支援使用 Amazon CloudWatch 進行記錄。您可以使用 AWS IoT 主控台來啟用和設定 OTA 更新的 Amazon CloudWatch 記錄。如需詳細資訊，請參閱 [Cloudwatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html)。

若要啟用記錄，您必須建立 IAM 角色並設定 OTA 更新記錄。

**注意**  
啟用 OTA 更新記錄之前，請確定您了解 CloudWatch Logs 存取許可。具有 CloudWatch Logs 存取權限的使用者，皆可查看偵錯資訊。如需資訊，請參閱 [Amazon CloudWatch Logs 身分驗證與存取控制](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/auth-and-access-control-cwl.html)。

## 建立記錄角色及啟用記錄日誌
<a name="create-ota-logging-role"></a>

請使用 [AWS IoT 主控台](https://console.aws.amazon.com/iot/home)來建立記錄角色及啟用記錄日誌。

1. 從導覽窗格中，選擇 **Settings (設定)**。

1. 在 **Logs (日誌)** 下方，選擇 **Edit (編輯)**。

1. 在 **Level of verbosity (詳細層級)** 下方，選擇 **Debug (除錯)**。

1. 在**設定角色**下，選擇**建立新角色**以建立用於記錄的 IAM 角色。

1. 在 **Name (名稱)** 下方，輸入您角色的唯一名稱。隨即建立您的角色，並包含所有必要許可。

1. 選擇**更新**。

## OTA 更新日誌
<a name="ota-logs"></a>

OTA 更新服務會在發生下列其中一項情況時，將日誌發佈到您的帳戶：
+ 已建立 OTA 更新。
+ 已完成 OTA 更新。
+ 已建立程式碼簽署任務。
+ 已完成程式碼簽署任務。
+ 任務 AWS IoT 已建立。
+  AWS IoT 任務已完成。
+ 已建立串流。

您可以在 [CloudWatch 主控台中檢視日誌。](https://console.aws.amazon.com/cloudwatch/home)

**在 CloudWatch Logs 中檢視 OTA 更新**

1. 從導覽窗格中，選擇 **Logs (日誌)**。

1. 在**日誌群組**中，選擇 **AWSIoTLogsV2**。

OTA 更新日誌可包含以下屬性：

**accountId**  
產生日誌 AWS 的帳戶 ID。

**actionType**  
產生日誌的動作。這可以設為下列其中一個值：  
+ `CreateOTAUpdate`：已建立 OTA 更新。
+ `DeleteOTAUpdate`：已刪除 OTA 更新。
+ `StartCodeSigning`：已啟動程式碼簽署任務。
+ `CreateAWSJob`：已建立 AWS IoT 任務。
+ `CreateStream`：已建立串流。
+ `GetStream`：串流的請求已傳送至 AWS IoT MQTT 型檔案交付功能。
+ `DescribeStream`：有關串流資訊的請求已傳送至 AWS IoT MQTT 型檔案交付功能。

**awsJobId**  
產生日誌 AWS IoT 的任務 ID。

**clientId**  
發出產生日誌請求的 MQTT 用戶端 ID。

**clientToken**  
與產生日誌請求相關聯的用戶端字符。

**詳細資訊**  
用於產生日誌之操作的詳細資訊。

**logLevel**  
日誌的記錄層級。針對 OTA 更新日誌，這一律設為 `DEBUG`。

**otaUpdateId**  
產生日誌的 OTA 更新 ID。

**protocol**  
用於發出產生日誌請求的通訊協定。

**status**  
產生日誌操作的狀態。有效的值如下：  
+ 成功
+ 失敗

**streamId**  
產生日誌的 AWS IoT 串流 ID。

**timestamp**  
日誌產生的時間。

**topicName**  
用於發出產生日誌請求的 MQTT 主題。

### 範例日誌
<a name="ota-example-logs"></a>

以下是啟動程式碼簽署任務時產生的範例日誌：

```
{ 
    "timestamp": "2018-07-23 22:59:44.955", 
    "logLevel": "DEBUG", 
    "accountId": "123456789012", 
    "status": "Success", 
    "actionType": "StartCodeSigning", 
    "otaUpdateId": "08957b03-eea3-448a-87fe-743e6891ca3a", 
    "details": "Start code signing job. The request status is SUCCESS." 
}
```

以下是建立 AWS IoT 任務時產生的日誌範例：

```
{ 
    "timestamp": "2018-07-23 22:59:45.363", 
    "logLevel": "DEBUG", 
    "accountId": "123456789012", 
    "status": "Success", 
    "actionType": "CreateAWSJob", 
    "otaUpdateId": "08957b03-eea3-448a-87fe-743e6891ca3a", 
    "awsJobId": "08957b03-eea3-448a-87fe-743e6891ca3a", 
    "details": "Create AWS Job The request status is SUCCESS." 
}
```

以下是建立 OTA 更新時產生的範例日誌：

```
{ 
    "timestamp": "2018-07-23 22:59:45.413", 
    "logLevel": "DEBUG", 
    "accountId": "123456789012", 
    "status": "Success", 
    "actionType": "CreateOTAUpdate", 
    "otaUpdateId": "08957b03-eea3-448a-87fe-743e6891ca3a", 
    "details": "OTAUpdate creation complete. The request status is SUCCESS." 
}
```

以下是建立串流時產生的範例日誌：

```
{ 
    "timestamp": "2018-07-23 23:00:26.391", 
    "logLevel": "DEBUG", 
    "accountId": "123456789012", 
    "status": "Success", 
    "actionType": "CreateStream", 
    "otaUpdateId": "3d3dc5f7-3d6d-47ac-9252-45821ac7cfb0", 
    "streamId": "6be2303d-3637-48f0-ace9-0b87b1b9a824", 
    "details": "Create stream. The request status is SUCCESS." 
}
```

以下是刪除 OTA 更新時產生的範例日誌：

```
{ 
    "timestamp": "2018-07-23 23:03:09.505", 
    "logLevel": "DEBUG", 
    "accountId": "123456789012", 
    "status": "Success", 
    "actionType": "DeleteOTAUpdate", 
    "otaUpdateId": "9bdd78fb-f113-4001-9675-1b595982292f", 
    "details": "Delete OTA Update. The request status is SUCCESS." 
}
```

以下是裝置從 MQTT 型檔案交付功能請求串流時產生的日誌範例：

```
{ 
    "timestamp": "2018-07-25 22:09:02.678", 
    "logLevel": "DEBUG", 
    "accountId": "123456789012", 
    "status": "Success", 
    "actionType": "GetStream", 
    "protocol": "MQTT", 
    "clientId": "b9d2e49c-94fe-4ed1-9b07-286afed7e4c8", 
    "topicName": "$aws/things/b9d2e49c-94fe-4ed1-9b07-286afed7e4c8/streams/1e51e9a8-9a4c-4c50-b005-d38452a956af/get/json", 
    "streamId": "1e51e9a8-9a4c-4c50-b005-d38452a956af", 
    "details": "The request status is SUCCESS." 
}
```

以下是裝置呼叫 `DescribeStream` API 時產生的範例日誌：

```
{ 
    "timestamp": "2018-07-25 22:10:12.690", 
    "logLevel": "DEBUG", 
    "accountId": "123456789012", 
    "status": "Success", 
    "actionType": "DescribeStream", 
    "protocol": "MQTT", 
    "clientId": "581075e0-4639-48ee-8b94-2cf304168e43", 
    "topicName": "$aws/things/581075e0-4639-48ee-8b94-2cf304168e43/streams/71c101a8-bcc5-4929-9fe2-af563af0c139/describe/json", 
    "streamId": "71c101a8-bcc5-4929-9fe2-af563af0c139", 
    "clientToken": "clientToken", 
    "details": "The request status is SUCCESS." 
}
```