デバイス接続の状態を監視する

Azure IoT Hub では、デバイスの状態を監視するためのいくつかの方法がサポートされています。 この記事では、さまざまな監視方法について説明し、IoT ソリューションに最適なオプションを選択するのに役立つガイダンスを提供します。

次の表に、デバイスの接続状態を監視する 3 つの方法を示します。

方法 状態の頻度 コスト 構築のための作業量
デバイス ツインの connectionState プロパティ 間欠的
Event Grid 60 秒
カスタム デバイス ハートビート パターン Custom

信頼性、コストの低さ、使いやすさにより、ほとんどのお客様には、優先する監視ソリューションとして Event Grid をお勧めします。

ただし、Event Grid を使用した監視には一定の制限があり、一部の IoT ソリューションには不適格である場合があります。 この記事を使用して、各オプションの利点と制限事項について理解してください。

デバイス ツインの connectionState

すべての IoT Hub デバイス ID には、connecteddisconnected のいずれかを報告する connectionState というプロパティが含まれます。 このプロパティは、デバイスの接続状態に関する IoT Hub の理解を表します。

接続状態プロパティには、いくつかの制限があります。

  • 接続状態は、MQTT または AMQP を使用するデバイスについてのみ更新されます。
  • このプロパティの更新は、プロトコル レベルの ping に依存しており、5 分ほど遅延する可能性があります。

このような理由により、開発およびデバッグ時に限り connectionState フィールドを使用することをお勧めします。 実行時には、IoT ソリューションでこのフィールドに対してクエリを実行しないでください。 たとえば、cloud-to-device メッセージや SMS を送信する前に、デバイスが接続されているかどうかを確認するために connectionState フィールドに対してクエリを実行しないでください。

Event Grid

ほとんどのお客様には、優先する監視ソリューションとして Event Grid をお勧めします。

Event Grid で deviceConnected イベントと deviceDisconnected イベントをサブスクライブして、アラートを取得し、デバイスの接続状態を監視します。

次の記事を使用して、デバイスの接続イベントと切断イベントを IoT ソリューションに統合する方法について学習してください。

デバイス接続状態イベントは、MQTT または AMQP のいずれかのプロトコルを使用して、または WebSocket 経由でこれらのプロトコルのいずれかを使用して接続しているデバイスで使用できます。 HTTPS でのみ行われた要求では、デバイス接続状態の通知はトリガーされません。

  • Java、Node、または Python 用の Azure IoT SDK を使用して接続するデバイスの場合:
    • MQTT: 接続状態イベントは自動的に送信されます。
    • AMQP: 接続状態の報告が遅れるのを軽減するために、cloud-to-device リンクを作成する必要があります。
  • Azure IoT SDK for .NET または C を使用して接続するデバイスの場合、最初の device-to-cloud メッセージが送信されるまで、または cloud-to-device メッセージが受信されるまで接続状態イベントは報告されません。

Azure IoT SDK の外部の MQTT では、これらの操作は、適切なメッセージング トピックでの SUBSCRIBE または PUBLISH 操作と同じになります。 AMQP 経由では、これらの操作は適切なリンク パスでメッセージをアタッチまたは転送することと同じです。

Event Grid の制限事項

Event Grid を使用してデバイスの状態を監視する場合、次の制限があります。

  • Event Grid は、デバイスの個々の接続イベントと切断イベントを報告しません。 代わりに、デバイスの状態を 60 秒ごとにポーリングし、状態が変化した場合に最新の接続状態を公開します。 このため、状態変化のレポートは最大で 1 分遅延する可能性があり、60 秒の期間内で複数のイベントが発生した場合には、個々の状態変化が報告されない可能性があります。
  • AMQP を使用するデバイスでは、デバイスの状態を報告する前に、クラウドからデバイスへのリンクが必要です。
  • Event Grid はパブリック エンドポイントを公開します。これは隠すことができません。

これらの制限によって、デバイス状態の監視に Event Grid を使用できるかどうかが左右される場合、代わりに、カスタム デバイス ハートビート パターンを作成することを検討する必要があります。

デバイス ハートビート パターン

デバイスの接続状態を把握する必要がある一方で、Event Grid の制限によってソリューションが非常に制限されたものになる場合、"ハートビート パターン" を実装できます。 ハートビート パターンでは、デバイスは一定の時間ごとに 1 回以上、D2C メッセージを送信します。(たとえば、1 時間ごとに 1 回以上)。 デバイスは、送信するデータがない場合でも、空の device-to-cloud メッセージを送信します (通常、このメッセージがハートビート メッセージであることを示すプロパティも送信します)。 サービス側では、ソリューションは、各デバイスから受信した最後のハートビートのマップを保持します。 ソリューションは、想定された時間内にデバイスからハートビート メッセージを受け取らないと、デバイスに問題があると見なします。

デバイスのハートビートの制限事項

ハートビート メッセージは device-to-cloud メッセージとして実装されるため、IoT Hub のメッセージ クォータとスロットルの制限が適用されます。

短い有効期限のパターン

IoT ソリューションで Cloud-to-device メッセージをデバイスに送信するかどうかを判断するためだけに接続状態が使用され、メッセージが多数のデバイスにブロードキャストされない場合は、ハートビート パターンのより単純な代替手段として有効期限の短いパターンの使用を検討してください。 有効期限の短いパターンは、メッセージの有効期限が短いメッセージを送信し、デバイスからのメッセージ確認を要求することによって、Cloud-to-device メッセージを送信するかどうかを判断する方法です。

詳しくは、「メッセージの有効期限」をご覧ください。

その他の監視オプション

より複雑な実装になると、Azure MonitorAzure Resource Health からの情報を取り込むことで、接続または通信を試みているが失敗しているデバイスを識別することが可能です。 Azure Monitor ダッシュボードは、複数のデバイスの全体的な正常性を確認するのに役立ち、一方、Event Grid とハートビート パターンでは、個々のデバイス障害に簡単に対応できます。

IoT Hub でのこれらのサービスの使用方法に関する詳細については、IoT Hub の監視に関する記事、および IoT Hub のリソースの正常性の確認に関する記事を参照してください。 Azure Monitor または Event Grid を使用してデバイス接続を監視する方法の詳細については、デバイス接続の監視、診断、およびトラブルシューティングに関する記事を参照してください。