メッセージ ルーティングのトラブルシューティング

この記事では、IoT Hub メッセージ ルーティングの一般的な問題と解決策に対する監視とトラブルシューティングのガイダンスを提供します。

メッセージ ルーティングの監視

メッセージ ルーティングとエンドポイントに関連する IoT Hub メトリックを監視して、送信されたメッセージの概要を確認することをお勧めします。 また、IoT Hub リソース ログのルートに対する操作を、カスタム処理を実行するために、Azure Monitor ログ、Event Hubs、Azure Storage に送信するための診断設定を作成することもできます。 メトリック、リソース ログ、診断設定の使用の詳細については、IoT Hub の監視に関する記事を参照してください。 チュートリアルについては、IoT Hub でのメトリックとリソース ログの設定と使用に関するページを参照してください。

また、どのルートでもクエリに一致しないメッセージを維持する場合は、フォールバック ルートを有効にすることをお勧めします。 これらは、構成されている保持日数の間、組み込みエンドポイントに保持できます。

代表的な問題

メッセージ ルーティングで最も一般的な問題を次に示します。 トラブルシューティングを開始するには、問題をクリックして詳細な手順を確認します。

デバイスからのメッセージが想定どおりにルーティングされていません

この問題のトラブルシューティングを行うには、次の分析を行います。

このエンドポイントのルーティング メトリック

ルーティングに関連するすべての IoT Hub メトリックには、Routing がプレフィックスとして付けられます。 複数のメトリックから得た情報を組み合わせることで、問題の根本原因を特定することができます。 たとえば、メトリック Routing Deliveries (ルーティング配信) を使用すると、エンドポイントに配信されたメッセージの数、またはどのルートのクエリにも一致せず、フォールバック ルートが無効になっていたときに破棄されたメッセージの数を特定できます。 Routing Latency (ルーティングの待機時間) メトリックを調べて、メッセージ配信の待機時間が一定または増加しているかどうかを確認します。 待機時間が長くなると、特定のエンドポイントに問題があることを示している可能性があります。エンドポイントの正常性を確認することをお勧めします。 これらのルーティング メトリックには、エンドポイントの種類、特定のエンドポイント名、メッセージが配信されなかった理由など、メトリックに関する詳細情報を提供するディメンションもあります。

運用上の問題のリソース ログ

ルート リソース ログを確認して、ルーティングとエンドポイントの操作に関する詳細情報を取得するか、エラーおよび関連するエラー コードを特定して問題をより深く理解します。 たとえば、ログ内の操作名 RouteEvaluationError は、メッセージ形式に問題があるため、ルートを評価できなかったことを示します。 この問題を軽減するには、特定の操作名に関するヒントを参考にしてください。 イベントがエラーとしてログに記録される場合、そのログにより、評価が失敗した理由に関する詳細情報も提供されます。 たとえば、操作名が EndpointUnhealthy の場合、エラー コード 403004 は、エンドポイントの領域が不足していることを示します。

エンドポイントの正常性

エンドポイントの正常性状態を取得するには、REST API の Get Endpoint Health を使用します。 Get Endpoint Health API によって、最後にメッセージがエンドポイントに正常に送信された時刻、最新の既知のエラー、最新の既知のエラーの時刻、およびこのエンドポイントに対して送信が試行された最後の時刻に関する情報も提供されます。 特定の最新の既知のエラーに対して提供される軽減策を使用します。

組み込みのエンドポイントでのメッセージの受信が突然停止しました

この問題のトラブルシューティングを行うには、次の分析を行います。

新しいルートは作成されましたか?

ルートの作成後、組み込みのエンドポイントへのルートが作成されていないと、そのエンドポイントへのデータ フローは停止します。 新しいルートが追加された場合に、確実にメッセージが組み込みのエンドポイントに引き続き流れるようにするには、"イベント" エンドポイントへのルートを構成します。

フォールバック ルートは無効になっていましたか?

フォールバック ルートを通じて、既存のいずれのルートのクエリ条件のいずれも満たさないすべてのメッセージが、Event Hubs との互換性がある組み込みの Event Hubs (messages/events) に送信されます。 メッセージ ルーティングが有効になっている場合は、フォールバック ルート機能を有効にすることができます。 組み込みのエンドポイントへのルートがなく、フォールバック ルートが有効になっている場合は、ルートのどのクエリ条件とも一致しないメッセージのみが組み込みのエンドポイントに送信されます。 また、既存のすべてのルートを削除する場合は、組み込みのエンドポイントですべてのデータを受信するために、フォールバック ルートを有効にする必要があります。

Azure portal で IoT Hub のメッセージ ルーティング ブレードを使用して、フォールバック ルートを有効または無効にすることができます。 また、Azure Resource Manager で FallbackRouteProperties を使用して、フォールバック ルート用のカスタム エンドポイントを使用するようにも設定できます。

IoT Hub ルーティング エンドポイント対する最新の既知のエラー

REST API の Get Endpoint Health を使用すると、エンドポイントの正常性状態と、最後の既知のエラーが取得され、エンドポイントが正常でない理由を特定できます。 次の表に、最も一般的なエラーを示します。

最後の既知のエラー 説明/発生する状況 考えられる軽減策
一時的 一時的なエラーが発生したため、IoT Hub によって操作が再試行されます。 ルート リソース ログを確認します。
InternalError エンドポイントにメッセージを配信中にエラーが発生しました。 これは内部例外ですが、ルート リソース ログも確認します。
権限がありません IoT Hub には指定されたエンドポイントにメッセージを送信する権限がありません。 エンドポイントの接続文字列が最新のものであることを確認します。 変更されている場合は、IoT Hub の更新を検討してください。 エンドポイントでマネージド ID が使用されている場合は、IoT Hub プリンシパルがターゲットに対して必要な権限を持っていることを確認します。
Throttled エンドポイントへのメッセージの書き込み中に IoT Hub が調整されています。 影響を受けるエンドポイントのスロットル制限を確認します。 必要に応じてスケールアップするようにエンドポイントの構成を変更します。
タイムアウト 操作がタイムアウトしました。 操作を再試行してください。
見つかりません ターゲット リソースが存在しません。 ターゲット リソースが存在することを確認してください。
コンテナーが見つかりません ストレージ コンテナーが存在しません。 ストレージ コンテナーが存在することを確認してください。
Container disabled ストレージ コンテナーが無効です。 ストレージ コンテナーが有効であることを確認してください。
MaxMessageSizeExceeded メッセージ ルーティングのメッセージ サイズの上限は 256 Kb です。ルーティングされているメッセージ サイズがこの制限を超えています。 アプリケーション プロパティを少なくするか、メッセージの強化を少なくすることで、メッセージ サイズを減らすことができるかどうかを確認します。
PartitioningAndDuplicateDetectionNotSupported Service Bus で重複検出が有効になっていない可能性があります。 Service Bus の重複検出を無効にするか、重複検出のないエンティティを使用することを検討してください。
SessionfulEntityNotSupported Service Bus でセッションが有効になっていない可能性があります。 Service Bus のセッションを無効にするか、セッションのないエンティティを使用することを検討してください。
NoMatchingSubscriptionsForMessage Service Bus トピックにメッセージを書き込むためのサブスクリプションがありません。 IoT Hub メッセージのルーティング先となるサブスクリプションを作成します。
EndpointExternallyDisabled エンドポイントは、IoT Hub がそこにメッセージを送信できるようなアクティブな状態ではありません。 エンドポイントを有効にして、アクティブな状態に戻します。
DeviceMaximumQueueDepthExceeded Service Bus サイズの制限に達しました。 ターゲットのイベント ハブからメッセージを削除して、イベント ハブに新しいメッセージを取り込めるようにすることを検討してください。

ルート リソース ログ

ルート リソース ログに記録される操作名とエラー コードを次に示します。

操作名

操作の名前 Level 説明
UndefinedRouteEvaluation Information 指定された条件ではメッセージを評価できません。 たとえば、ルート クエリ条件のプロパティがメッセージに存在しない場合です。 こちらにルーティング クエリの構文の詳細があります。
RouteEvaluationError エラー メッセージ形式に問題があるため、メッセージの評価中にエラーが発生しました。 たとえば、メッセージにコンテンツ エンコードが指定されていないか、コンテンツの種類が有効でない場合、このエラーがログに記録されます。 これらはシステム プロパティで設定する必要があります。
DroppedMessage エラー メッセージが削除され、送信されませんでした。 この理由としては、メッセージがどのルーティング クエリにも一致しなかったか、エンドポイントが停止しており、数回再試行してもメッセージを配信できなかったなどが考えられます。 REST API のエンドポイント正常性取得に関するページを利用し、エンドポイントに関する詳細を取得することをお勧めします。
EndpointUnhealthy エラー エンドポイントで IoT Hub からのメッセージが受信されておらず、IoT Hub ではメッセージの再送信を試行しています。 REST API のエンドポイント正常性取得に関するページを利用し、最後に判明したエラーを確認することをお勧めします。
EndpointDead エラー エンドポイントでは、IoT Hub からのメッセージが 1 時間以上受信されていません。 REST API のエンドポイント正常性取得に関するページを利用し、最後に判明したエラーを確認することをお勧めします。
EndpointHealthy Information エンドポイントは正常であり、IoT Hub からメッセージを受信しています。 このメッセージは継続的に記録されず、エンドポイントが再び正常になったときにのみ、ログに記録されます。 このメッセージは、IoT Hub でメッセージをエンドポイントに送信できなかったが、現在、エンドポイントは正常であることを意味します。
OrphanedMessage Information メッセージはいずれのルートとも一致しません。
InvalidMessage エラー エンドポイントとの互換性がないため、メッセージは無効です。 エンドポイントの構成を確認することをお勧めします。

UndefinedRouteEvaluationRouteEvaluationErrorOrphanedMessage 操作は、IoT Hub あたりせいぜい 1 分に 1 回の頻度で調整され、ログに記録されます。

一般的なエラー コード

エラー コード 説明
401002 Iot Hub の未承認アクセス
413001 メッセージが大きすぎます
403004 デバイスのキューの深さの最大を超えました
503008 受信リンクの調整
500000 汎用サーバー エラー
401 権限がありません
503 サービス利用不可
500001 サーバー エラー
400103 無効なコンテンツのエンコードまたはコンテンツの種類
404001 デバイスが見つかりません

次のステップ

さらにサポートが必要な場合は、Microsoft Q&A と Stack Overflow フォーラムで Azure エキスパートにお問い合わせください。 または、Azure サポート インシデントを送信できます。 その場合は、 Azure サポートのサイト に移動して、 [サポートの要求] をクリックします。