디바이스 통신 문제 해결 가이드 검토
다음 문제 해결 검사 목록은 지원 티켓을 제출하기 전에 시도할 몇 가지 작업을 제공합니다.
Azure IoT 허브에 연결할 수 없음
디바이스가 Azure IoT Hub에 연결할 수 없는 경우 다음과 같은 몇 가지 사항을 확인해야 합니다.
- 자격 증명이 올바른가요?
- X.509 인증서를 사용하는 경우 지문이 일치해야 합니다. 레지스트리의 지문이 사용하려는 인증서의 지문과 일치하는지 확인합니다.
- 공유 액세스 키가 있는 연결 문자열을 사용하는 경우 디바이스나 정책이 DeviceConnect 기능과 일치하는지 확인합니다.
- 공유 액세스 서명을 사용하는 경우 만료가 올바른지, 올바른 공유 액세스 키를 사용하여 서명하는지 확인합니다.
- Azure Portal을 사용하여 디바이스 레지스트리를 검토하고 디바이스가 사용하도록 설정되어 있는지 확인합니다.
- 방화벽을 통과할 수 있나요?
- 가장 쉬운 방법은 iothub-diagnostics 도구를 실행하고 디바이스의 자격 증명을 사용하여 Azure IoT Hub에 연결하도록 관리하는지 확인하는 것입니다. 지원되는 모든 프로토콜 및 WebSocket을 시도하고 테스트 결과를 표시합니다.
- iothub-diagnostics를 실행할 수 없는 경우 동일한 단계를 수동으로 실행해 볼 수 있습니다.
- 알려진 웹 사이트를 Ping하여 이름 확인 및 아웃바운드 트래픽이 작동하는지 확인합니다.
- 클라이언트를 인스턴스화하는 데 사용되는 전송(AMQP, AMQPWS, MQTT, MQTTWS 및 HTTP)을 변경합니다.
- 기본 샘플을 실행해 봅니다.
- 샘플이 연결할 수 있는 경우 프로그램과 샘플이 클라이언트를 인스턴스화하는 방법 간의 차이점을 찾아보세요. 문제는 오타만큼 간단할 수 있습니다.
- 샘플이 연결할 수 없고 iothub-diagnostics 작업도 수행할 수 없으면 자격 증명이나 네트워크에 문제가 있는 것일 수 있습니다.
연결 끊김을 감지하지 않음
연결이 끊길 때 어려운 문제는 무작위로 발생하는 것처럼 보인다는 것입니다. SDK에 오류가 발생하지 않는 경우 진행 상황을 알 수 있는 방법이 없습니다. 또는 다른 문제가 있나요?
- 다시 시도 논리로 인해 지연이 발생할 수 있나요?
- 기본적으로 재시도 논리는 4분 동안 계속됩니다. 시간이 이 정도 경과되었나요?
- 기다리지 않으려면
client.setRetryPolicy(new NoRetry())
을(를) 호출하여 다시 시도 논리를 사용하지 않도록 설정하세요.
- 자세한 로그가 필요한가요? SDK는 로깅을 위해 디버그 라이브러리를 사용합니다.
DEBUG
환경 변수를 설정하고 애플리케이션을 다시 실행합니다. 시작하기 좋은DEBUG
환경 변수는 다음과 같습니다.azure*
매개 변수는 SDK 활동을 기록하지만 기본 전송 라이브러리는 기록하지 않습니다.amqp10*
매개 변수는 하위 수준 AMQP 라이브러리 작업을 기록합니다.*
매개 변수는 모든 것을 기록합니다.
debug
매개 변수는 기본적으로stderr
에 기록하며 특히*
로 설정된 경우에는 자세하게 기록할 수 있습니다.- 문제에 게시하기 위해 이러한 로그를 저장하는 경우에는 기밀 정보를 제거하세요!
일부 메시지를 보내지 못함
메시지 오류는 또 다른 까다로운 문제입니다. 전체는 아니지만 일부 메시지가 전송 중인 것처럼 보입니다. 무엇을 제공하나요? 첫 번째 질문, "일부 메시지가 전송되지 않는 것을 어떻게 알 수 있습니까?"
- 콜백이 오류와 함께 호출되기 때문에 발생한다면 오류 개체는 메시지보다 더 많은 단서를 제공할 수 있습니다. 오류 자체의 유형에 주의해야 합니다.
- 사용자 지정 SDK 형식인 경우 명시적이어야 합니다. 명시적 형식 지정이 충분하지 않은 경우 오류의 속성을 확인하고 여기에 프로토콜별 오류가 있는지 확인하세요.
- 일반적인
Error
인 경우 SDK가 해당 오류를 해석하지 못했다는 것을 의미합니다. 일반적인 오류가 발생하면 문제를 제출하고 오류 속성 값 및 오류 스택을 포함하여 가능한 한 많은 세부 정보를 제공합니다.
- 클라우드 애플리케이션에 메시지가 표시되지 않기 때문이라면 다음을 확인합니다.
- 디바이스 쪽에서 인수는
send
작업의 콜백에 전달됩니다. monitor-events
하위 명령과 함께 Azure CLI용 Azure IoT 확장을 사용하여 IoT Hub의 event-hubs 호환 엔드포인트에 메시지가 표시되는지 확인합니다. 이 경우 디바이스가 제대로 작동하는 것을 의미합니다. 그렇지 않은 경우, 서비스 문제가 될 가능성이 낮으며 디바이스 측 문제를 추적할 수 있습니다.
- 디바이스 쪽에서 인수는