

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

# 对 Amazon IoT SiteWise 规则操作进行故障排除
<a name="troubleshoot-rule"></a>

要对中的 Amazon IoT SiteWise 规则操作进行故障排除 Amazon IoT Core，可以执行以下步骤之一：
+ 配置 Amazon CloudWatch 日志
+ 为规则配置重新发布错误操作

然后，将错误消息与本主题中的错误进行比较，以排查问题。

**Topics**
+ [配置 Amazon IoT Core 日志](#configure-iot-logs)
+ [配置重新发布错误操作](#configure-republish-error-action)
+ [排查规则问题](#troubleshoot-rule-issues)
+ [排查规则问题（Amazon IoT SiteWise）](#rule-tutorial-troubleshoot-rule)
+ [对规则进行故障排除（DynamoDB）](#dynamodb-tutorial-troubleshoot-rule)

## 配置 Amazon IoT Core 日志
<a name="configure-iot-logs"></a>

您可以配置为 Amazon IoT 将不同级别的信息 CloudWatch 记录到 Logs 中。

**配置和访问 CloudWatch 日志**

1. 要为配置日志记录 Amazon IoT Core，请参阅《*Amazon IoT 开发人员指南》*中的[使用 CloudWatch 日志进行监控](https://docs.amazonaws.cn/iot/latest/developerguide/cloud-watch-logs.html)。

1. 导航至 [CloudWatch 控制台](https://console.amazonaws.cn/cloudwatch/)。

1. 在导航窗格中，选择**日志组**。

1. 选择**AWSIot日志**组。

1. 选择最近的日志流。默认情况下，首先 CloudWatch 显示最新的日志流。

1. 选择日志条目以展开日志消息。您的日志条目可能类似于以下屏幕截图。  
![\[CloudWatch “Amazon IoT 日志” 屏幕截图。\]](http://docs.amazonaws.cn/iot-sitewise/latest/userguide/images/rule-ingestion/troubleshoot-rule-logs-console.png)

1. 将错误消息与本主题中的错误进行比较，以排查问题。

## 配置重新发布错误操作
<a name="configure-republish-error-action"></a>

您可以对规则的错误操作进行配置以处理错误消息。在该过程中，您将重新发布规则操作配置为错误操作，以在 MQTT 测试客户端中查看错误消息。

**注意**  
重新发布错误操作仅输出 `ERROR` 级别日志的等效内容。如果需要更多详细日志，则必须[配置 CloudWatch ](#configure-iot-logs)日志。

**在规则中添加重新发布错误操作**

1. 导航至 [Amazon IoT 控制台](https://console.amazonaws.cn/iot/)。

1. 在左侧导航窗格中，选择**行动**，然后选择**规则**。

1. 选择您的规则。

1. 在 **错误操作** 下面，选择 **添加操作**。

1. 选择 “**向 Amazon IoT 主题重新发布消息”**。  
![\[Amazon IoT Core “选择操作” 页面屏幕截图，其中突出显示了 “重新发布” 操作。\]](http://docs.amazonaws.cn/iot-sitewise/latest/userguide/images/rule-ingestion/rule-choose-republish-action-console.png)

1. 选择页面底部的 **配置操作**。

1. 在**主题**中，输入唯一的主题（例如，**sitewise/windfarm/rule/error**）。 Amazon IoT Core 将重新发布此主题的错误消息。

1. 选择 **“选择”** 以授予执行错误操作的 Amazon IoT Core 访问权限。

1. 选择为规则创建的角色旁边的 **选择**。

1. 选择 **更新角色** 以在角色中添加其他权限。

1. 选择**添加操作**。

   您的规则的错误操作应类似于以下屏幕截图。  
![\[Amazon IoT Core “规则” 页面重新发布错误操作屏幕截图。\]](http://docs.amazonaws.cn/iot-sitewise/latest/userguide/images/rule-ingestion/rule-confirm-republish-error-action-console.png)

1. 选择主机左上角的返回箭头返回 Amazon IoT 主机主页。

在设置重新发布错误操作后，您可以在 Amazon IoT Core上的 MQTT 测试客户端中查看错误消息。

在以下过程中，您在 MQTT 测试客户端中订阅错误主题。在 MQTT 测试客户端中，您可以接收规则的错误消息以排查问题。

**订阅错误操作主题**

1. 导航至 [Amazon IoT 控制台](https://console.amazonaws.cn/iot/)。

1. 在左侧导航页面中，选择 **测试** 以打开 MQTT 测试客户端。

1. 在 **订阅主题** 字段中，输入您之前配置的错误主题（例如，**sitewise/windfarm/rule/error**），然后选择 **订阅主题**。  
![\[Amazon IoT Core “MQTT 客户端” 页面屏幕截图，突出显示 “订阅主题” 按钮。\]](http://docs.amazonaws.cn/iot-sitewise/latest/userguide/images/rule-ingestion/troubleshoot-rule-subscribe-error-topic-console.png)

1. 等待错误消息出现，然后在任何错误消息中展开 `failures` 数组。

   接下来，将错误消息与本主题中的错误进行比较，以排查问题。

## 排查规则问题
<a name="troubleshoot-rule-issues"></a>

使用以下信息排查规则问题。

**Topics**
+ [错误：成员必须在当前时间戳之前 604800 秒和之后 300 秒范围内](#rule-error-timestamp-out-of-range)
+ [错误：Property value does not match data type <type> (属性值与数据类型 <type> 不匹配)](#rule-error-invalid-data-type)
+ [错误：用户：<role-arn>无权在资源上执行：iotsitewise：BatchPutAssetPropertyValue](#rule-error-role-not-authorized)
+ [错误：iot.amazonaws.com 无法在资源上执行：sts：AssumeRole <role-arn>](#rule-error-unable-to-assume-role)
+ [信息：未发送任何请求。 PutAssetPropertyValueEntries 执行替换模板后为空。](#rule-info-request-was-empty)

### 错误：成员必须在当前时间戳之前 604800 秒和之后 300 秒范围内
<a name="rule-error-timestamp-out-of-range"></a>

与当前 Unix 纪元时间相比，您的时间戳早了超过 7 天或晚了超过 5 分钟。尝试以下操作：
+ 检查您的时间戳是否采用 Unix 纪元 (UTC) 时间。如果您提供具有不同时区的时间戳，则会收到此错误。
+ 检查您的时间戳是否以秒为单位。 Amazon IoT SiteWise 期望时间戳分为以秒为单位的时间（以 Unix 纪元时间为单位）和以纳秒为单位的偏移量。
+ 检查您正在上传的数据的时间戳是否是在过去 7 天之前。

### 错误：Property value does not match data type <type> (属性值与数据类型 <type> 不匹配)
<a name="rule-error-invalid-data-type"></a>

规则操作中的条目与目标资产属性具有不同的数据类型。例如，您的目标资产属性为 `DOUBLE`，但您选择的数据类型为 **整数**，或者您用 `integerValue` 传递了值。尝试以下操作：
+ 如果您从 Amazon IoT 控制台配置规则，请检查是否为每个条目选择了正确**的数据类型**。
+ 如果您通过 API 或 Amazon Command Line Interface (Amazon CLI) 配置规则，请检查您的`value`对象是否使用了正确的类型字段（`doubleValue`例如，`DOUBLE`属性字段）。

### 错误：用户：<role-arn>无权在资源上执行：iotsitewise：BatchPutAssetPropertyValue
<a name="rule-error-role-not-authorized"></a>

未授权您的规则访问目标资产属性，或者目标资产属性不存在。尝试以下操作：
+ 检查您的属性别名是否正确，以及您是否有具有给定属性别名的资产属性。有关更多信息，请参阅 [管理数据流 Amazon IoT SiteWise](manage-data-streams.md)。
+ 检查您的规则是否具有角色以及该角色是否允许目标资产属性具有 `iotsitewise:BatchPutAssetPropertyValue` 权限，例如通过目标资产的层次结构。有关更多信息，请参阅 [授 Amazon IoT 予所需的访问权限](grant-rule-access.md)。

### 错误：iot.amazonaws.com 无法在资源上执行：sts：AssumeRole <role-arn>
<a name="rule-error-unable-to-assume-role"></a>

您的用户无权代入您在 Amazon Identity and Access Management (IAM) 中的规则中的角色。

检查是否对您的用户授予规则上角色的 `iam:PassRole` 权限。有关更多信息，请参阅 *Amazon IoT 开发人员指南*中的 [传递角色权限](https://docs.amazonaws.cn/iot/latest/developerguide/pass-role.html)。

### 信息：未发送任何请求。 PutAssetPropertyValueEntries 执行替换模板后为空。
<a name="rule-info-request-was-empty"></a>

**注意**  
此消息是 `INFO` 级别日志。

您的请求必须至少具有一个包含所有必需参数的条目。

检查规则的参数（包括替换模板）是否会导致非空值。替换模板无法访问规则查询语句中的 `AS` 子句定义的值。有关更多信息，请参阅 *Amazon IoT 开发人员指南*中的[替换模板](https://docs.amazonaws.cn/iot/latest/developerguide/iot-substitution-templates.html)。

## 排查规则问题（Amazon IoT SiteWise）
<a name="rule-tutorial-troubleshoot-rule"></a>

如果 CPU 和内存使用率数据未按预期显示，请按照此过程中的 Amazon IoT SiteWise 步骤对规则进行故障排除。在该过程中，您将重新发布规则操作配置为错误操作，以在 MQTT 测试客户端中查看错误消息。您也可以配置日志记录以 CloudWatch 进行故障排除。有关更多信息，请参阅 [对 Amazon IoT SiteWise 规则操作进行故障排除](#troubleshoot-rule)。

**在规则中添加重新发布错误操作**

1. 导航至 [Amazon IoT 控制台](https://console.amazonaws.cn/iot/)。

1. 在左侧导航窗格中，选择**消息路由**，然后选择**规则**。

1. 选择您以前创建的规则，然后选择**编辑**。

1. 在**错误操作 -*可选***下，选择**添加错误操作**。

1. 选择 “**向 Amazon IoT 主题重新发布消息”**。

1. 在**主题**中，输入错误路径（例如**sitewise/rule/tutorial/error**）。 Amazon IoT Core 将重新发布此主题的错误消息。

1. 选择您之前创建的角色（例如，**SiteWiseTutorialDeviceRuleRole**）。

1. 选择**更新**。

在设置重新发布错误操作后，您可以在 Amazon IoT Core上的 MQTT 测试客户端中查看错误消息。

在以下过程中，您在 MQTT 测试客户端中订阅错误主题。

**订阅错误操作主题**

1. 导航至 [Amazon IoT 控制台](https://console.amazonaws.cn/iot/)。

1. 在左侧导航页面中，选择 **MQTT 测试客户端**以打开 MQTT 测试客户端。

1. 在**主题筛选器**字段中，输入 **sitewise/rule/tutorial/error** 并选择**订阅**。

出现错误消息时，查看任何错误消息中的 `failures` 阵列以诊断问题。有关可能的问题以及如何解决这些问题的更多信息，请参阅[对 Amazon IoT SiteWise 规则操作进行故障排除](#troubleshoot-rule)。

如果未显示错误，请检查是否启用了您的规则，以及您是否订阅了在重新发布错误操作中配置的相同主题。如果在执行此操作后仍未出现错误，请检查设备脚本是否正在运行并成功更新设备的影子。

**注意**  
您还可以订阅设备的影子更新主题，以查看您的 Amazon IoT SiteWise 操作解析的有效负载。为此，请订阅以下主题。  

```
$aws/things/+/shadow/update/accepted
```

## 对规则进行故障排除（DynamoDB）
<a name="dynamodb-tutorial-troubleshoot-rule"></a>

如果演示资产数据未按预期方式显示在 DynamoDB 表中，请按照该过程中的步骤排除规则故障。在该过程中，您将重新发布规则操作配置为错误操作，以在 MQTT 测试客户端中查看错误消息。您也可以配置日志记录以 CloudWatch 进行故障排除。有关更多信息，请参阅《Amazon IoT 开发人员指南》中的[使用 CloudWatch 日志进行监控](https://docs.amazonaws.cn/iot/latest/developerguide/cloud-watch-logs.html)。

**在规则中添加重新发布错误操作**

1. 导航至 [Amazon IoT 控制台](https://console.amazonaws.cn/iot/)。

1. 在左侧导航窗格中，选择**行动**，然后选择**规则**。

1. 选择您以前创建的规则。  
![\[Amazon IoT 核心 “规则” 页面屏幕截图。\]](http://docs.amazonaws.cn/iot-sitewise/latest/userguide/images/interact-dynamo-db/rule-choose-rule-console.png)

1. 在 **错误操作** 下面，选择 **添加操作**。

1. 选择 “**向 Amazon IoT 主题重新发布消息”**。  
![\[Amazon IoT 核心 “选择操作” 页面屏幕截图，其中突出显示了 “重新发布” 操作。\]](http://docs.amazonaws.cn/iot-sitewise/latest/userguide/images/interact-dynamo-db/rule-choose-republish-action-console.png)

1. 选择页面底部的 **配置操作**。

1. 在 **Topic**（主题）中输入 **windspeed/error**。 Amazon IoT Core 将重新发布此主题的错误消息。  
![\[Amazon IoT 核心 “配置重新发布操作” 页面屏幕截图，突出显示 “主题”。\]](http://docs.amazonaws.cn/iot-sitewise/latest/userguide/images/interact-dynamo-db/rule-configure-republish-action-console.png)

1. **选择** Select 以授予使用您之前创建的角色执行错误操作的 C Amazon IoT ore 访问权限。

1. 选择您的角色旁边的 **选择**。  
![\[Amazon IoT 核心 “配置重新发布操作” 页面屏幕截图，其中角色选择按钮突出显示。\]](http://docs.amazonaws.cn/iot-sitewise/latest/userguide/images/interact-dynamo-db/rule-select-role-console.png)

1. 选择 **更新角色** 以在角色中添加其他权限。  
![\[Amazon IoT 核心 “配置重新发布操作” 页面屏幕截图，其中突出显示了更新角色按钮。\]](http://docs.amazonaws.cn/iot-sitewise/latest/userguide/images/interact-dynamo-db/rule-update-role-console.png)

1. 选择 **添加操作** 以完成添加错误操作的过程。

1. 选择主机左上角的后退箭头返回 Amazon IoT 酷睿主机主页。

设置重新发布错误操作后，您可以在 Core 的 MQTT 测试客户端中 Amazon IoT 查看错误消息。

在以下过程中，您在 MQTT 测试客户端中订阅错误主题。

**订阅错误操作主题**

1. 在 Amazon IoT Core 控制台的左侧导航页中，选择 “**测试**”。

1. 在 **订阅主题** 字段中，输入 **windspeed/error** 并选择 **订阅主题**。  
![\[Amazon IoT 核心 “MQTT 客户端” 页面屏幕截图，突出显示 “订阅主题” 按钮。\]](http://docs.amazonaws.cn/iot-sitewise/latest/userguide/images/interact-dynamo-db/rule-subscribe-error-topic-console.png)

1. 观察显示的错误消息，并在错误消息中浏览 `failures` 数组以诊断以下常见问题：
   + 规则查询语句中的错别字
   + 角色权限不足

   如果未显示错误，请检查是否启用了您的规则，以及您是否订阅了在重新发布错误操作中配置的相同主题。如果仍未显示错误，请检查您的演示风电场资产是否仍然存在，以及是否在风速属性上启用了通知。如果您的演示资产过期并从中消失 Amazon IoT SiteWise，则可以创建一个新的演示并更新规则查询语句以反映更新的资产模型和属性 IDs。