诊断规则问题 - Amazon IoT Core
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

诊断规则问题

本部分介绍了在遇到规则问题时要检查的一些事项。

配置 CloudWatch Logs 以进行故障排除

对规则所存在的问题进行调试的最佳方法是使用 CloudWatch Logs。为 Amazon IoT 启用 CloudWatch Logs 后,您可了解哪些规则被触发以及操作是成功还是失败。您还可以了解 WHERE 子句条件是否匹配。有关更多信息,请参阅 使用 CloudWatch Logs 监控 Amazon IoT

最常见的规则问题是授权问题。可通过日志了解您的角色是否获得对资源执行 AssumeRole 操作所需的权限。下面是一个精细日志记录功能生成的示例日志:

{ "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)" }

下面是一个全局日志记录功能生成的类似示例日志:

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 控制台中查看 Amazon IoT 日志

诊断外部服务

外部服务由最终用户控制。在执行规则之前,请确保已设置链接到规则的外部服务,并且具有足够的应用程序吞吐量和容量单位。

诊断 SQL 问题

如果您的 SQL 查询没有返回您期望的数据:

  • 查看日志中的错误消息。

  • 确认您的 SQL 语法与消息中的 JSON 文档匹配。

    查看查询中使用的对象和属性名称,以及主题消息负载的 JSON 文档中使用的对象名和属性名称。有关 SQL 查询中 JSON 格式的更多信息,请参阅 JSON 扩展

  • 检查 JSON 对象或属性名称是否包含预留字符或数字字符。

    有关 SQL 查询中 JSON 对象引用中预留字符的更多信息,请参阅 JSON 扩展