디바이스 통신 문제 해결 가이드 검토

완료됨

다음 문제 해결 검사 목록은 지원 티켓을 제출하기 전에 시도할 몇 가지 작업을 제공합니다.

Azure IoT 허브에 연결할 수 없음

디바이스가 Azure IoT Hub에 연결할 수 없는 경우 다음과 같은 몇 가지 사항을 확인해야 합니다.

  1. 자격 증명이 올바른가요?
    • X.509 인증서를 사용하는 경우 지문이 일치해야 합니다. 레지스트리의 지문이 사용하려는 인증서의 지문과 일치하는지 확인합니다.
    • 공유 액세스 키가 있는 연결 문자열을 사용하는 경우 디바이스나 정책이 DeviceConnect 기능과 일치하는지 확인합니다.
    • 공유 액세스 서명을 사용하는 경우 만료가 올바른지, 올바른 공유 액세스 키를 사용하여 서명하는지 확인합니다.
  2. Azure Portal을 사용하여 디바이스 레지스트리를 검토하고 디바이스가 사용하도록 설정되어 있는지 확인합니다.
  3. 방화벽을 통과할 수 있나요?
    • 가장 쉬운 방법은 iothub-diagnostics 도구를 실행하고 디바이스의 자격 증명을 사용하여 Azure IoT Hub에 연결하도록 관리하는지 확인하는 것입니다. 지원되는 모든 프로토콜 및 WebSocket을 시도하고 테스트 결과를 표시합니다.
    • iothub-diagnostics를 실행할 수 없는 경우 동일한 단계를 수동으로 실행해 볼 수 있습니다.
      • 알려진 웹 사이트를 Ping하여 이름 확인 및 아웃바운드 트래픽이 작동하는지 확인합니다.
      • 클라이언트를 인스턴스화하는 데 사용되는 전송(AMQP, AMQPWS, MQTT, MQTTWS 및 HTTP)을 변경합니다.
  4. 기본 샘플을 실행해 봅니다.
    • 샘플이 연결할 수 있는 경우 프로그램과 샘플이 클라이언트를 인스턴스화하는 방법 간의 차이점을 찾아보세요. 문제는 오타만큼 간단할 수 있습니다.
    • 샘플이 연결할 수 없고 iothub-diagnostics 작업도 수행할 수 없으면 자격 증명이나 네트워크에 문제가 있는 것일 수 있습니다.

연결 끊김을 감지하지 않음

연결이 끊길 때 어려운 문제는 무작위로 발생하는 것처럼 보인다는 것입니다. SDK에 오류가 발생하지 않는 경우 진행 상황을 알 수 있는 방법이 없습니다. 또는 다른 문제가 있나요?

  1. 다시 시도 논리로 인해 지연이 발생할 수 있나요?
    • 기본적으로 재시도 논리는 4분 동안 계속됩니다. 시간이 이 정도 경과되었나요?
    • 기다리지 않으려면 client.setRetryPolicy(new NoRetry())을(를) 호출하여 다시 시도 논리를 사용하지 않도록 설정하세요.
  2. 자세한 로그가 필요한가요? SDK는 로깅을 위해 디버그 라이브러리를 사용합니다.
    • DEBUG 환경 변수를 설정하고 애플리케이션을 다시 실행합니다. 시작하기 좋은 DEBUG 환경 변수는 다음과 같습니다.
      • azure* 매개 변수는 SDK 활동을 기록하지만 기본 전송 라이브러리는 기록하지 않습니다.
      • amqp10* 매개 변수는 하위 수준 AMQP 라이브러리 작업을 기록합니다.
      • * 매개 변수는 모든 것을 기록합니다.
    • debug 매개 변수는 기본적으로 stderr에 기록하며 특히 *로 설정된 경우에는 자세하게 기록할 수 있습니다.
    • 문제에 게시하기 위해 이러한 로그를 저장하는 경우에는 기밀 정보를 제거하세요!

일부 메시지를 보내지 못함

메시지 오류는 또 다른 까다로운 문제입니다. 전체는 아니지만 일부 메시지가 전송 중인 것처럼 보입니다. 무엇을 제공하나요? 첫 번째 질문, "일부 메시지가 전송되지 않는 것을 어떻게 알 수 있습니까?"

  1. 콜백이 오류와 함께 호출되기 때문에 발생한다면 오류 개체는 메시지보다 더 많은 단서를 제공할 수 있습니다. 오류 자체의 유형에 주의해야 합니다.
    • 사용자 지정 SDK 형식인 경우 명시적이어야 합니다. 명시적 형식 지정이 충분하지 않은 경우 오류의 속성을 확인하고 여기에 프로토콜별 오류가 있는지 확인하세요.
    • 일반적인 Error인 경우 SDK가 해당 오류를 해석하지 못했다는 것을 의미합니다. 일반적인 오류가 발생하면 문제를 제출하고 오류 속성 값 및 오류 스택을 포함하여 가능한 한 많은 세부 정보를 제공합니다.
  2. 클라우드 애플리케이션에 메시지가 표시되지 않기 때문이라면 다음을 확인합니다.
    • 디바이스 쪽에서 인수는 send 작업의 콜백에 전달됩니다.
    • monitor-events 하위 명령과 함께 Azure CLI용 Azure IoT 확장을 사용하여 IoT Hub의 event-hubs 호환 엔드포인트에 메시지가 표시되는지 확인합니다. 이 경우 디바이스가 제대로 작동하는 것을 의미합니다. 그렇지 않은 경우, 서비스 문제가 될 가능성이 낮으며 디바이스 측 문제를 추적할 수 있습니다.