

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 진단 규칙 문제
<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 절 조건이 일치하는지 여부에 대한 정보도 얻을 수 있습니다. 자세한 내용은 [CloudWatch Logs AWS IoT 를 사용하여 모니터링](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 확장](iot-sql-json.md) 단원을 참조하세요.
+ 

**JSON 객체 또는 속성 이름에 예약된 문자 또는 숫자가 포함되어 있는지 확인합니다.**  
SQL 쿼리의 JSON 개체 참조의 예약 문자에 대한 자세한 내용은 [JSON 확장](iot-sql-json.md) 단원을 참조하세요.