

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

# 診斷規則問題
<a name="diagnosing-rules"></a>

**協助我們改善此主題**  
 [讓我們知道如何能使其變得更好](https://docs.aws.amazon.com//forms/aws-doc-feedback?hidden_service_name=IoT%20Docs&topic_url=http://docs.aws.amazon.com/en_us/iot/latest/developerguide/diagnosing-rules.html) 

本節說明當您遇到規則問題時，要檢查的一些事項。

## 配置 CloudWatch Logs 進行疑難排解
<a name="diagnosing-rules-logs"></a>

對規則所發生的問題進行疑難排解的最佳方法是使用 CloudWatch Logs。當您為 啟用 CloudWatch Logs 時 AWS IoT，您可以查看觸發哪些規則及其成功或失敗。也會獲得 WHERE 子句條件是否符合的資訊。如需詳細資訊，請參閱[AWS IoT 使用 CloudWatch Logs 進行監控](cloud-watch-logs.md)。

最常見的問題在於授權。若您的角色未獲得在該資源上執行 AssumeRole 的授權，即會顯示在日誌中。以下為[精細記錄](configure-logging.md#fine-logging-cli)所產生的日誌範例：

```
{
    "timestamp": "2017-12-09 22:49:17.954",
    "logLevel": "ERROR",
    "traceId": "ff563525-6469-506a-e141-78d40375fc4e",
    "accountId": "123456789012",
    "status": "Failure",
    "eventType": "RuleExecution",
    "clientId": "iotconsole-123456789012-3",
    "topicName": "test-topic",
    "ruleName": "rule1",
    "ruleAction": "DynamoAction",
    "resources": {
        "ItemHashKeyField": "id",
        "Table": "trashbin",
        "Operation": "Insert",
        "ItemHashKeyValue": "id",
        "IsPayloadJSON": "true"
    },
    "principalId": "ABCDEFG1234567ABCD890:outis",
    "details": "User: arn:aws:sts::123456789012:assumed-role/dynamo-testbin/5aUMInJH is not authorized to perform: dynamodb:PutItem on resource: arn:aws:dynamodb:us-east-1:123456789012:table/testbin (Service: AmazonDynamoDBv2; Status Code: 400; Error Code: AccessDeniedException; Request ID: AKQJ987654321AKQJ123456789AKQJ987654321AKQJ987654321)"
}
```

以下為[全域記錄](configure-logging.md#global-logging-cli)所產生的類似日誌範例：

```
2017-12-09 22:49:17.954 TRACEID:ff562535-6964-506a-e141-78d40375fc4e 
PRINCIPALID:ABCDEFG1234567ABCD890:outis [ERROR] EVENT:DynamoActionFailure 
TOPICNAME:test-topic CLIENTID:iotconsole-123456789012-3 
MESSAGE:Dynamo Insert record failed. The error received was User: arn:aws:sts::123456789012:assumed-role/dynamo-testbin/5aUMInJI is not authorized to perform: dynamodb:PutItem on resource: arn:aws:dynamodb:us-east-1:123456789012:table/testbin 
(Service: AmazonDynamoDBv2; Status Code: 400; Error Code: AccessDeniedException; Request ID: AKQJ987654321AKQJ987654321AKQJ987654321AKQJ987654321). 
Message arrived on: test-topic, Action: dynamo, Table: trashbin, HashKeyField: id, HashKeyValue: id, RangeKeyField: None, RangeKeyValue: 123456789012
No newer events found at the moment. Retry.
```

如需詳細資訊，請參閱[在 CloudWatch 主控台中檢視 AWS IoT 日誌](cloud-watch-logs.md#viewing-logs)。

## 診斷外部服務
<a name="diagnosing-rules-ext"></a>

外部服務受最終使用者的控制。在執行規則之前，請確認您連結至規則的外部服務已經設定，並為您的應用程式提供足夠的輸送量和容量單位。

## 診斷 SQL 問題
<a name="diagnosing-rules-sql"></a>

**若您的 SQL 查詢並未傳回您想要的資料：**
+ **請檢閱錯誤訊息的日誌。**
+ 

**確認您的 SQL 語法符合訊息中的 JSON 文件。**  
檢閱用於查詢中的物件和屬性名稱，及主題訊息承載的 JSON 文件中所使用名稱。如需 SQL 查詢中 JSON 格式的詳細資訊，請參閱 [JSON Extensions](iot-sql-json.md)。
+ 

**檢查 JSON 物件或屬性名稱是否包含保留或數字字元。**  
如需 SQL 查詢中 JSON 物件參考中保留字元的詳細資訊，請參閱 [JSON Extensions](iot-sql-json.md)。