

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

# 對 AWS IoT SiteWise 規則動作進行故障診斷
<a name="troubleshoot-rule"></a>

若要對 中的 AWS IoT SiteWise 規則動作進行疑難排解 AWS IoT Core，您可以執行下列其中一個程序：
+ 設定 Amazon CloudWatch Logs
+ 為規則設定重新發佈錯誤動作

接下來，將錯誤訊息與本主題所述的錯誤相比較，對您的問題進行疑難排解。

**Topics**
+ [設定 AWS IoT Core 日誌](#configure-iot-logs)
+ [設定重新發佈錯誤動作](#configure-republish-error-action)
+ [對規則問題進行故障診斷](#troubleshoot-rule-issues)
+ [對規則進行故障診斷 (AWS IoT SiteWise)](#rule-tutorial-troubleshoot-rule)
+ [對規則進行故障診斷 (DynamoDB)](#dynamodb-tutorial-troubleshoot-rule)

## 設定 AWS IoT Core 日誌
<a name="configure-iot-logs"></a>

您可以設定 AWS IoT 將各種層級的資訊記錄到 CloudWatch Logs。

**設定和存取 CloudWatch Logs**

1. 若要設定 的記錄 AWS IoT Core，請參閱《 *AWS IoT 開發人員指南*》中的[使用 CloudWatch Logs 進行監控](https://docs.aws.amazon.com/iot/latest/developerguide/cloud-watch-logs.html)。

1. 導覽至 [CloudWatch 主控台](https://console.aws.amazon.com/cloudwatch/)。

1. 在導覽窗格中，選擇 **Log groups** (日誌群組)。

1. 選擇 **AWSIotLogs** 群組。

1. 選擇最近的日誌串流。根據預設，CloudWatch 會先顯示最新的日誌串流。

1. 選擇日誌項目以展開日誌訊息。日誌項目看起來可能與下列螢幕擷取畫面類似。  
![\[CloudWatch "AWS IoT Logs" 螢幕擷取畫面。\]](http://docs.aws.amazon.com/zh_tw/iot-sitewise/latest/userguide/images/rule-ingestion/troubleshoot-rule-logs-console.png)

1. 比較錯誤訊息與本主題所述的錯誤，針對您的問題進行故障診斷。

## 設定重新發佈錯誤動作
<a name="configure-republish-error-action"></a>

您可以設定規則上的錯誤動作以處理錯誤訊息。在此程序中，您會設定重新發佈規則動作做為錯誤動作，以檢視 MQTT 測試用戶端中的錯誤訊息。

**注意**  
重新發佈錯誤動作只會輸出相當於 `ERROR` 層級日誌的內容。如果您想要更多詳細日誌，則必須[設定 CloudWatch Logs](#configure-iot-logs)。

**將重新發佈錯誤動作新增到規則**

1. 導覽至 [AWS IoT 主控台](https://console.aws.amazon.com/iot/)。

1. 在左側導覽窗格中，選擇 **Act (動作)**，然後選擇 **Rules (規則)**。

1. 選擇您的規則。

1. 在 **Error action (錯誤動作)** 下方，選擇 **Add action (新增動作)**。

1. 選擇**將訊息重新發佈至 AWS IoT 主題**。  
![\[AWS IoT Core 「選取動作」頁面螢幕擷取畫面，並反白顯示重新發佈動作。\]](http://docs.aws.amazon.com/zh_tw/iot-sitewise/latest/userguide/images/rule-ingestion/rule-choose-republish-action-console.png)

1. 選擇頁面底部的 **Configure action (設定動作)**。

1. 在**主題**中，輸入唯一主題 （例如 **sitewise/windfarm/rule/error**)。 AWS IoT Core 將重新發佈錯誤訊息至此主題。

1. 選擇**選取**以授予執行錯誤動作的 AWS IoT Core 存取權。

1. 選擇您已針對規則建立之角色旁的 **Select (選取)**。

1. 選擇 **Update Role (更新角色)** 以將其他許可新增到角色。

1. 選擇**新增動作**。

   您規則的錯誤動作看起來應與下列螢幕擷取畫面類似。  
![\[AWS IoT Core 「規則」頁面 重新發佈錯誤動作螢幕擷取畫面。\]](http://docs.aws.amazon.com/zh_tw/iot-sitewise/latest/userguide/images/rule-ingestion/rule-confirm-republish-error-action-console.png)

1. 選擇主控台左上角的向後箭頭，以返回 AWS IoT 主控台首頁。

在您設定重新發佈錯誤動作後，您可以在 AWS IoT Core中檢視 MQTT 測試用戶端內的錯誤訊息。

在以下程序中，您會在 MQTT 測試用戶端中訂閱錯誤主題。在 MQTT 測試用戶端中，您可以接收規則的錯誤訊息，以針對問題進行故障診斷。

**訂閱錯誤動作主題**

1. 導覽至 [AWS IoT 主控台](https://console.aws.amazon.com/iot/)。

1. 在左側導覽頁面中，選擇 **Test (測試)** 以開啟 MQTT 測試用戶端。

1. 在 **Subscription topic (訂閱主題)** 欄位中，輸入您之前設定的錯誤主題 (例如 **sitewise/windfarm/rule/error**)，然後選擇 **Subscribe to topic (訂閱主題)**。  
![\[AWS IoT Core 「MQTT 用戶端」頁面螢幕擷取畫面，並反白顯示「訂閱主題」按鈕。\]](http://docs.aws.amazon.com/zh_tw/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)
+ [錯誤：屬性值與 <type> 資料類型不相符](#rule-error-invalid-data-type)
+ [錯誤：使用者 <role-arn> 未獲得在資源上執行 iotsitewise:BatchPutAssetPropertyValue 的授權](#rule-error-role-not-authorized)
+ [錯誤：iot.amazonaws.com 無法在資源: <role-arn> 上執行 sts:AssumeRole](#rule-error-unable-to-assume-role)
+ [資訊：未傳送任何要求。在執行替代範本後，PutAssetPropertyValueEntries 是空的。](#rule-info-request-was-empty)

### 錯誤：成員必須在目前時間戳記之前 604800 秒內和之後 300 秒內
<a name="rule-error-timestamp-out-of-range"></a>

相較於目前的 Unix epoch 時間，您的時間戳記超過 7 天或超過 5 分鐘。請嘗試以下做法：
+ 檢查您的時間戳記是否採用 Unix Epoch (UTC) 時間格式。如果您提供不同時區的時間戳記，則會發生此錯誤。
+ 檢查您的時間戳記是否以秒為單位。 AWS IoT SiteWise 預期時間戳記會以秒為單位分割為時間 （以 Unix epoch 時間為單位），並以奈秒為單位偏移。
+ 檢查您正在上傳的時間戳記不晚於過去 7 天的資料。

### 錯誤：屬性值與 <type> 資料類型不相符
<a name="rule-error-invalid-data-type"></a>

規則動作中的項目具有與目標資產屬性不同的資料類型。例如，您的目標資產屬性為 `DOUBLE`，而您選取的資料類型為 **Integer (整數)**，或您已傳遞 `integerValue` 的值。請嘗試以下做法：
+ 如果您從 AWS IoT 主控台設定規則，請檢查您是否為每個項目選擇正確的**資料類型**。
+ 如果您從 API 或 AWS Command Line Interface (AWS CLI) 設定規則，請檢查您的`value`物件是否使用正確的類型欄位 （例如`DOUBLE`， `doubleValue` 屬性）。

### 錯誤：使用者 <role-arn> 未獲得在資源上執行 iotsitewise:BatchPutAssetPropertyValue 的授權
<a name="rule-error-role-not-authorized"></a>

您的規則未獲得存取目標資產屬性的授權，或目標資產屬性不存在。請嘗試以下做法：
+ 檢查您的屬性別名是否正確，並確認您擁有具有指定屬性別名的資產屬性。如需詳細資訊，請參閱[管理 的資料串流 AWS IoT SiteWise](manage-data-streams.md)。
+ 檢查您的規則是否具有角色，且該角色允許目標資產屬性的 `iotsitewise:BatchPutAssetPropertyValue` 許可，例如透過目標資產的階層。如需詳細資訊，請參閱[授予 AWS IoT 必要的存取權](grant-rule-access.md)。

### 錯誤：iot.amazonaws.com 無法在資源: <role-arn> 上執行 sts:AssumeRole
<a name="rule-error-unable-to-assume-role"></a>

您的使用者無權在 AWS Identity and Access Management (IAM) 中擔任規則上的角色。

檢查您的使用者是否獲得規則上角色的`iam:PassRole`許可。如需詳細資訊，請參閱《 *AWS IoT 開發人員指南*》中的[傳遞角色許可](https://docs.aws.amazon.com/iot/latest/developerguide/pass-role.html)。

### 資訊：未傳送任何要求。在執行替代範本後，PutAssetPropertyValueEntries 是空的。
<a name="rule-info-request-was-empty"></a>

**注意**  
此訊息是 `INFO` 層級日誌。

您的請求必須至少具有一個含有所有必要參數的項目。

檢查您規則的參數 (包括替代範本) 是否導致非空白的值。替代範本無法存取規則查詢陳述式的 `AS` 子句中定義的值。如需詳細資訊，請參閱《 *AWS IoT 開發人員指南*》中的[替代範本](https://docs.aws.amazon.com/iot/latest/developerguide/iot-substitution-templates.html)。

## 對規則進行故障診斷 (AWS IoT SiteWise)
<a name="rule-tutorial-troubleshoot-rule"></a>

如果 CPU 和記憶體用量資料未 AWS IoT SiteWise 如預期出現在 中，請依照此程序中的步驟對規則進行疑難排解。在此程序中，您會設定重新發佈規則動作做為錯誤動作，以檢視 MQTT 測試用戶端中的錯誤訊息。您也可以設定記錄至 CloudWatch Logs 進行故障診斷。如需詳細資訊，請參閱[對 AWS IoT SiteWise 規則動作進行故障診斷](#troubleshoot-rule)。

**將重新發佈錯誤動作新增到規則**

1. 導覽至 [AWS IoT 主控台](https://console.aws.amazon.com/iot/)。

1. 在左側導覽窗格中，選擇**訊息路由**，然後選擇**規則**。

1. 選擇您先前建立的規則，然後選擇**編輯**。

1. 在**錯誤動作 - *選用***下，選擇**新增錯誤動作**。

1. 選擇**將訊息重新發佈至 AWS IoT 主題**。

1. 在**主題**中，輸入錯誤路徑 （例如 **sitewise/rule/tutorial/error**)。 AWS IoT Core 將重新發佈錯誤訊息至此主題。

1. 選擇您先前建立的角色 （例如 **SiteWiseTutorialDeviceRuleRole**)。

1. 選擇**更新**。

在您設定重新發佈錯誤動作後，您可以在 AWS IoT Core中檢視 MQTT 測試用戶端內的錯誤訊息。

在以下程序中，您會在 MQTT 測試用戶端中訂閱錯誤主題。

**訂閱錯誤動作主題**

1. 導覽至 [AWS IoT 主控台](https://console.aws.amazon.com/iot/)。

1. 在左側導覽頁面中，選擇 **MQTT 測試用戶端**以開啟 MQTT 測試用戶端。

1. 在**主題篩選條件**欄位中，輸入 **sitewise/rule/tutorial/error** 並選擇**訂閱**。

出現錯誤訊息時，請檢視任何錯誤訊息中的 `failures` 陣列以診斷問題。如需可能問題和解決方式的詳細資訊，請參閱[對 AWS IoT SiteWise 規則動作進行故障診斷](#troubleshoot-rule)。

如果沒有出現錯誤，請檢查您的規則已啟用，以及您訂閱的主題和您在重新發佈錯誤動作中設定的主題相同。如果錯誤在您這麼做之後仍未出現，請檢查裝置指令碼是否正在執行，並成功更新裝置的陰影。

**注意**  
您也可以訂閱裝置的影子更新主題，以檢視 AWS IoT SiteWise 動作剖析的承載。若要這麼做，請訂閱下列主題。  

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

## 對規則進行故障診斷 (DynamoDB)
<a name="dynamodb-tutorial-troubleshoot-rule"></a>

如果示範資產資料未如預期出現在 DynamoDB 資料表中，請依照此程序中的步驟對規則進行疑難排解。在此程序中，您會設定重新發佈規則動作做為錯誤動作，以檢視 MQTT 測試用戶端中的錯誤訊息。您也可以設定記錄至 CloudWatch Logs 進行故障診斷。如需詳細資訊，請參閱《 *AWS IoT 開發人員指南*》中的[使用 CloudWatch Logs 進行監控](https://docs.aws.amazon.com/iot/latest/developerguide/cloud-watch-logs.html)。

**將重新發佈錯誤動作新增到規則**

1. 導覽至 [AWS IoT 主控台](https://console.aws.amazon.com/iot/)。

1. 在左側導覽窗格中，選擇 **Act (動作)**，然後選擇 **Rules (規則)**。

1. 選擇您稍早建立的規則。  
![\[AWS IoT 核心「規則」頁面螢幕擷取畫面。\]](http://docs.aws.amazon.com/zh_tw/iot-sitewise/latest/userguide/images/interact-dynamo-db/rule-choose-rule-console.png)

1. 在 **Error action (錯誤動作)** 下方，選擇 **Add action (新增動作)**。

1. 選擇**將訊息重新發佈至 AWS IoT 主題**。  
![\[AWS IoT 核心「選取動作」頁面螢幕擷取畫面，並反白顯示重新發佈動作。\]](http://docs.aws.amazon.com/zh_tw/iot-sitewise/latest/userguide/images/interact-dynamo-db/rule-choose-republish-action-console.png)

1. 選擇頁面底部的 **Configure action (設定動作)**。

1. 在 **Topic** (主題) 中，輸入 **windspeed/error**。 AWS IoT Core 會將錯誤訊息重新發佈至此主題。  
![\[AWS IoT 核心「設定重新發佈動作」頁面螢幕擷取畫面，並反白顯示「主題」。\]](http://docs.aws.amazon.com/zh_tw/iot-sitewise/latest/userguide/images/interact-dynamo-db/rule-configure-republish-action-console.png)

1. 選擇**選取**以授予 AWS IoT 核心存取權，以使用您先前建立的角色執行錯誤動作。

1. 選擇您角色旁邊的 **Select (選取)**。  
![\[AWS IoT 核心「設定重新發佈動作」頁面螢幕擷取畫面，並反白顯示角色選取按鈕。\]](http://docs.aws.amazon.com/zh_tw/iot-sitewise/latest/userguide/images/interact-dynamo-db/rule-select-role-console.png)

1. 選擇 **Update Role (更新角色)** 以將其他許可新增到角色。  
![\[AWS IoT 核心「設定重新發佈動作」頁面螢幕擷取畫面，並反白顯示更新角色按鈕。\]](http://docs.aws.amazon.com/zh_tw/iot-sitewise/latest/userguide/images/interact-dynamo-db/rule-update-role-console.png)

1. 選擇 **Add action (新增動作)** 來完成新增錯誤動作。

1. 選擇主控台左上角的向後箭頭，以返回 AWS IoT 核心主控台首頁。

設定重新發佈錯誤動作後，您可以在 AWS IoT Core 的 MQTT 測試用戶端中檢視錯誤訊息。

在以下程序中，您會在 MQTT 測試用戶端中訂閱錯誤主題。

**訂閱錯誤動作主題**

1. 在 AWS IoT 核心主控台的左側導覽頁面中，選擇**測試**。

1. 在 **Subscription topic (訂閱主題)** 欄位中，輸入 **windspeed/error**，然後選擇 **Subscribe to topic (訂閱主題)**。  
![\[AWS IoT 核心「MQTT 用戶端」頁面螢幕擷取畫面，反白顯示「訂閱主題」按鈕。\]](http://docs.aws.amazon.com/zh_tw/iot-sitewise/latest/userguide/images/interact-dynamo-db/rule-subscribe-error-topic-console.png)

1. 注意出現的錯誤訊息，並探索錯誤訊息中的 `failures` 陣列，以診斷下列常見問題：
   + 規則查詢陳述式中的拼字錯誤
   + 角色許可不足

   如果沒有出現錯誤，請檢查您的規則已啟用，以及您訂閱的主題和您在重新發佈錯誤動作中設定的主題相同。如果仍然沒有出現錯誤，請檢查您的示範風力發電廠資產仍然存在，並且您已在風速屬性上啟用通知。如果您的示範資產已過期並從中消失 AWS IoT SiteWise，您可以建立新的示範並更新規則查詢陳述式，以反映更新的資產模型和屬性 IDs。