次の方法で共有


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

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

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

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

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

代表的な問題

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

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

この問題をトラブルシューティングするには、次の情報を分析します。

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

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

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

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

エンドポイントの正常性

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

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

この問題をトラブルシューティングするには、次の情報を分析します。

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

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

フォールバック ルートは無効でしたか?

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

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

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

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

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

ルート リソース ログ

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

操作名

操作名 レベル 説明
未定義ルート評価 情報 メッセージは、与える条件では評価できません。 たとえば、ルート クエリ条件のプロパティがメッセージに存在しない場合です。 ルーティング クエリ構文の詳細を確認します。
ルート評価エラー エラー メッセージ形式に問題があるため、メッセージの評価中にエラーが発生しました。 たとえば、コンテンツ エンコードが指定されていない場合や、メッセージ内のコンテンツ タイプが無効な場合、このエラーはログに記録されます。 これらは システム プロパティで設定する必要があります。
ドロップメッセージ(DroppedMessage) エラー メッセージが削除され、ルーティングされませんでした。 これは、メッセージがルーティング クエリと一致しなかった、またはエンドポイントが停止し、複数回の再試行後にメッセージを配信できなかったなどの理由が考えられます。 REST API を使用してエンドポイントの 正常性を取得することで、エンドポイントの詳細を取得することをお勧めします。
エンドポイント異常 エラー エンドポイントが IoT Hub からのメッセージを受け入れておらず、IoT Hub がメッセージを再送信しようとしています。 REST API を使用して最後に既知のエラーを観察して 、エンドポイントの正常性を取得することをお勧めします。
エンドポイントデッド エラー エンドポイントが IoT Hub からのメッセージを 1 時間以上受け入れていません。 REST API を使用して最後に既知のエラーを観察して 、エンドポイントの正常性を取得することをお勧めします。
エンドポイントヘルシー 情報 エンドポイントは正常であり、IoT Hub からメッセージを受信しています。 このメッセージは継続的にログに記録されませんが、エンドポイントが再度正常になったときにのみログに記録されます。 このメッセージは、IoT Hub がエンドポイントにメッセージを送信できなかったが、エンドポイントが正常であることを意味します。
孤立したメッセージ 情報 メッセージはどのルートにも一致しません。
無効なメッセージ エラー エンドポイントとの互換性がないため、メッセージが無効です。 エンドポイントの構成を確認することをお勧めします。

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 サポートのサイト に移動して、 [サポートの要求] をクリックします。