디바이스 연결 상태 모니터링
Azure IoT Hub에서는 디바이스의 상태를 모니터링하기 위한 여러 가지 방법을 지원합니다. 이 문서에서는 다양한 모니터링 방법을 제시하고 IoT 솔루션에 가장 적합한 옵션을 선택하는 데 도움이 되는 지침을 제공합니다.
다음 표에서는 디바이스 연결 상태를 모니터링하는 세 가지 방법을 소개합니다.
메서드 | 상태 빈도 | 비용 | 빌드 작업 |
---|---|---|---|
디바이스 쌍 connectionState 속성 | 일시적인 문제 | 낮음 | 낮음 |
Event Grid | 60초 | 낮음 | 낮음 |
사용자 지정 디바이스 하트비트 패턴 | 사용자 지정 | 높음 | 높음 |
안정성, 저렴한 비용 및 사용 편의성 때문에 대부분의 고객에게 기본 모니터링 솔루션으로 Event Grid를 권장합니다.
그러나 Event Grid를 사용하는 모니터링에는 일부 IoT 솔루션에 대한 자격 상실을 가져올 수 있는 특정 제한 사항이 있습니다. 이 문서를 사용하여 각 옵션의 이점과 제한 사항을 이해합니다.
디바이스 쌍 connectionState
모든 IoT Hub 디바이스 ID에는 연결 또는 연결 끊김을 보고하는 connectionState라는 속성이 포함되어 있습니다. 이 속성은 IoT Hub가 디바이스의 연결 상태를 어떻게 이해하고 있는지 나타냅니다.
연결 상태 속성에는 다음과 같은 몇 가지 제한 사항이 있습니다.
- 연결 상태는 MQTT 또는 AMQP를 사용하여 디바이스에 대해서만 업데이트됩니다.
- 이 속성에 대한 업데이트는 프로토콜 수준 ping을 사용하며 최대 5분 지연될 수 있습니다.
이러한 이유로 개발 및 디버깅 중에만 connectionState 필드를 사용하는 것이 좋습니다. IoT 솔루션은 런타임에 필드를 쿼리하면 안 됩니다. 예를 들어 클라우드-디바이스 메시지 또는 SMS를 보내기 전에 디바이스가 연결되었는지 확인하기 위해 connectionState 필드를 쿼리하지 마세요.
Event Grid
대부분의 고객은 기본 모니터링 솔루션으로 Event Grid를 사용하는 것이 좋습니다.
Event Grid에서 deviceConnected 및 deviceDisconnected 이벤트를 구독하여 경고를 받고 디바이스 연결 상태를 모니터링합니다.
다음 문서를 사용하여 IoT 솔루션에서 디바이스 연결 및 연결 끊김 이벤트를 통합하는 방법을 알아봅니다.
디바이스 연결 상태 이벤트는 MQTT 또는 AMQP 프로토콜을 사용하여 연결하거나 WebSocket을 통해 이러한 프로토콜 중 하나를 사용하여 연결하는 디바이스에 사용할 수 있습니다. HTTPS로만 이루어진 요청은 디바이스 연결 상태 알림을 트리거하지 않습니다.
- Java, Node 또는 Python용 Azure IoT SDK를 사용하여 연결하는 디바이스의 경우:
- MQTT: 연결 상태 이벤트가 자동으로 전송됩니다.
- AMQP: 연결 상태 보고 지연을 줄이기 위해 클라우드-디바이스 링크를 만들어야 합니다.
- .NET 또는 C용 Azure IoT SDK를 사용하여 연결하는 디바이스의 경우 초기 디바이스-클라우드 메시지를 보내거나 클라우드-디바이스 메시지를 받을 때까지 연결 상태 이벤트가 보고되지 않습니다.
Azure IoT SDK 외부에서 MQTT에서 이러한 작업은 적절한 메시징 토픽에 대한 SUBSCRIBE 또는 PUBLISH 작업과 동일합니다. AMQP를 통해 진행되는 이러한 작업은 적절한 링크 경로에 메시지를 첨부하거나 전송하는 것과 같습니다.
Event Grid 제한 사항
Event Grid를 사용하여 디바이스 상태를 모니터링하려면 다음과 같은 제한 사항이 있습니다.
- Event Grid는 각 개별 디바이스 연결 및 연결 끊기 이벤트를 보고하지 않습니다. 대신 60초마다 디바이스 상태를 폴링하고 상태 변경이 있는 경우 가장 최근의 연결 상태를 게시합니다. 이러한 이유로 상태 변경 보고서는 최대 1분까지 지연될 수 있으며 60초 기간 내에 여러 이벤트가 발생하는 경우 개별 상태 변경 내용을 보고하지 않을 수 있습니다.
- AMQP를 사용하는 디바이스는 디바이스 상태를 보고하려면 클라우드-디바이스 링크가 필요합니다.
- Event Grid는 숨길 수 없는 퍼블릭 엔드포인트를 노출합니다.
이러한 제한 사항 때문에 디바이스 상태 모니터링에 Event Grid를 사용하는 것이 어려울 경우 대신 사용자 지정 디바이스 하트비트 패턴을 빌드하는 것이 좋습니다.
디바이스 하트비트 패턴
디바이스의 연결 상태를 알아야 하지만 Event Grid의 제한 사항이 솔루션에 대해 너무 제한적인 경우 하트비트 패턴을 구현할 수 있습니다. 하트비트 패턴에서 디바이스는 정해진 시간에 최소 한 번(예: 1시간마다 최소 한 번) 디바이스-클라우드 메시지를 보냅니다. 디바이스가 보낼 데이터가 없는 경우에도 빈 디바이스-클라우드 메시지(하트비트 메시지로 식별하는 속성 포함)를 보냅니다. 서비스 쪽에서 솔루션은 각 디바이스에 대해 받은 마지막 하트비트와 함께 맵을 유지 관리합니다. 솔루션은 예상된 시간 내에 디바이스에서 보낸 하트비트 메시지를 받지 않을 경우 디바이스에 문제가 있다고 가정합니다.
디바이스 하트비트 제한 사항
하트비트 메시지는 디바이스-클라우드 메시지로 구현되므로 IoT Hub 메시지 할당량 및 제한에 대해 계산됩니다.
짧은 만료 시간 패턴
IoT 솔루션이 연결 상태만을 사용하여 클라우드-디바이스 메시지를 디바이스에 보낼지 여부를 결정하고 메시지가 큰 디바이스 집합으로 브로드캐스트되지 않는 경우 짧은 만료 시간 패턴을 하트비트 패턴에 대한 간단한 대안으로 사용하는 것이 좋습니다. 짧은 만료 시간 패턴은 메시지 만료 시간이 짧은 메시지를 보내고 디바이스에서 메시지 승인을 요청하여 클라우드-디바이스 메시지를 보낼지 여부를 결정하는 방법입니다.
자세한 내용은 메시지 만료(Time to Live)를 참조하세요.
기타 모니터링 옵션
더 복잡한 구현에는 연결하거나 통신하려고 하지만 실패하는 디바이스를 식별하기 위한 Azure Monitor 및 Azure Resource Health의 정보가 포함될 수 있습니다. Azure Monitor 대시보드는 디바이스의 집계 상태를 확인하는 데 유용하지만 Event Grid 및 하트비트 패턴을 사용하면 개별 디바이스 중단에 더 쉽게 대응할 수 있습니다.
IoT Hub에서 이러한 서비스를 사용하는 방법에 대한 자세한 내용은 IoT Hub 모니터링 및 IoT Hub 리소스 상태 확인을 참조하세요. Azure Monitor 또는 Event Grid를 사용하여 디바이스 연결을 모니터링하는 방법에 대한 자세한 내용은 디바이스 연결 모니터링, 진단 및 문제 해결을 참조하세요.