

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

# 设置 OTA 更新的 CloudWatch 日志
<a name="ota-logging"></a>

OTA 更新服务支持使用 Amazon 进行登录 CloudWatch。您可以使用 AWS IoT 控制台为 OTA 更新启用和配置 Amazon CloudWatch 日志记录。有关更多信息，请参阅 [Cloudwatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html)。

要启用日志记录，必须创建 IAM 角色并配置 OTA 更新日志记录。

**注意**  
在启用 OTA 更新日志记录之前，请确保您了解 CloudWatch 日志访问权限。有权访问 CloudWatch 日志的用户可以看到您的调试信息。有关信息，请参阅 [Amazon CloudWatch 日志的身份验证和访问控制](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. 从导航窗格中，选择**设置**。

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 日志中查看 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**  
与生成日志请求关联的客户端令牌。

**details**  
有关生成日志的操作的更多信息。

**logLevel**  
日志的日志记录级别。对于 OTA 更新日志，该属性始终设置为 `DEBUG`。

**otaUpdateId**  
生成日志的 OTA 更新的 ID。

**protocol**  
用于发出生成日志请求的协议。

**status**  
生成日志操作的状态。有效值为：  
+ 成功
+ Failure

**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." 
}
```