共用方式為


消息路由疑難解答

本文提供有關IoT中心 消息路由的常見問題和解決方法的監視和故障排除指南。

監視消息路由

建議您監視與訊息路由傳送和端點相關的 IoT 中樞 計量,以提供所傳送訊息的概觀。 還可以創建診斷設置,將IoT中心資源日誌中的路由作發送到 Azure Monitor 紀錄、事件中心或 Azure 儲存進行自定義處理。 要瞭解有關使用指標、資源日誌和診斷設置的更多資訊,請參閱 監控IoT中心。 有關教程,請參閱 通過IoT中心設置和使用指標和資源日誌

如果您想要維護和任何路由的查詢都不相符的訊息,也建議您啟用後援路由。 這些訊息在已設定的保留期天數內可保留在內建端點中。

首要問題

以下是訊息路由傳送中最常觀察到到的問題。 要開始故障排除,請選擇問題以獲取詳細步驟。

來自我的裝置的訊息未如預期般路由傳送

要解決此問題,請分析以下資訊。

此端點的路由傳送計量

所有與路由相關的 IoT 中樞計量都會加上 Routing 前置詞。 您可以結合多個計量的資訊來確定問題的根本原因。 例如,使用計量 [路由傳遞] 可識別已傳遞至某個端點,或與任何路由的查詢不符且後援路由已停用而捨棄的訊息數。 查看 [路由延遲] 計量,可觀察訊息傳遞的延遲是否穩定或增加中。 增長的延遲可能表示特定端點發生問題,建議您檢查端點的健康情況。 這些路由指標還具有維度,這些 維度 提供有關指標的詳細資訊,例如終端節點類型、特定終端節點名稱以及未傳送消息的原因。

任何作業問題的資源記錄

觀察 Routes 資源日誌 以獲取有關路由和終端節點 的更多資訊,或識別錯誤和相關 錯誤代碼 以進一步了解問題。 例如,記錄中的作業名稱 RouteEvaluationError 表示無法評估路由,因為訊息格式有問題。 使用針對特定作業名稱所提供的提示來減輕問題。 當事件記錄為錯誤時,記錄也會提供有關評估失敗原因的詳細資訊。 例如,如果作名稱為 EndpointUnhealthy,則 錯誤代碼 為 403004 表示終端節點空間不足。

端點的健康情況

使用 REST API 獲取終端節點運行狀況 獲取終端節點的運行狀況。 此 API 還提供有關上次成功將消息發送到終端節點的時間、 上次已知錯誤、上次已知錯誤時間以及上次嘗試對此終端節點進行發送嘗試的資訊。 使用為特定的 最後一個已知錯誤提供的可能緩解措施。

我突然無法在內建端點取得訊息

要解決此問題,請分析以下資訊。

是否已建立新的路由?

除非建立通向該端點的路由,否則在建立路由後,資料便會停止流向內建端點。 要確保在添加新路由時消息繼續流向內置終端節點,請配置到 事件 終端節點的路由。

Fallback 路由是否被禁用?

回退路由將任何現有路由上不滿足任何查詢條件的所有消息發送到與事件中心相容的內置事件中心(消息/事件)。 如果訊息路由已開啟,您可以啟用後援路由功能。 如果沒有通到內建端點的路由且後援路由已啟用,則只有和任何路由上的查詢條件不相符的訊息會被傳送到內建端點。 此外,如果刪除了所有現有的路由,則必須啟用後援路由以接收內建端點中的所有資料。

您可以使用 IoT 中樞的 [訊息路由] 刀鋒視窗,在 Azure 入口網站中啟用或停用後援路由。 您也可以對於 FallbackRouteProperties 使用 Azure 資源管理員來使用後援路由的自訂端點。

IoT 中樞路由端點的最後已知錯誤

REST API 中的 Get Endpoint Health (獲取終端節點運行狀況) 提供終端節點的運行狀況和最後一個已知錯誤,以確定終端節點運行狀況不佳的原因。 下表列出了最常見的錯誤。

上次已知錯誤 描述/發生時間 可能的緩和措施
暫時性 發生暫時性錯誤,IoT 中心將重試該作。 觀察 routes 資源日誌
內部錯誤 將消息傳送到終端節點時出錯。 此錯誤是內部異常,但也要觀察 路由資源日誌
未經授權 IoT 中心無權將消息發送到指定的終結點。 驗證終端節點的連接字串是否是最新的。 如果更改,請考慮在IoT中心進行更新。 如果終結點使用託管標識,請檢查IoT中心主體是否對目標具有所需的許可權。
扼殺 將消息寫入終端節點時,IoT 中心受到限制。 查看受影響終端節點的限制。 根據需要修改終端節點的配置以縱向擴展。
暫停 作業逾時。 重試操作。
找不到 Target 資源不存在。 確保目標資源存在。
未找到容器 存儲容器 不存在。 確保存儲容器存在。
容器已禁用 Storage container 已禁用。 確保已啟用存儲容器。
MaxMessageSizeExceeded 消息路由的消息大小限制為 256 Kb。 路由的郵件大小超出了此限制。 檢查是否可以通過使用較少的應用程式屬性或較少的消息擴充來減小消息大小。
PartitioningAndDuplicateDetectionNotSupported 服務總線可能未啟用重複檢測。 從服務總線禁用重複檢測,或考慮使用沒有重複檢測的實體。
SessionfulEntityNotSupported 服務總線可能未啟用會話。 從服務總線禁用會話,或考慮使用沒有會話的實體。
NoMatchingSubscriptionsForMessage 沒有訂閱來寫入服務總線主題上的消息。 為要路由到的IoT中心消息創建訂閱。
端點外部已禁用 Endpoint 未處於活動狀態,因此 IoT Hub 可以向其發送消息。 啟用終端節點以將其恢復為活動狀態。
設備最大佇列深度超出 已達到服務總線大小限制。 請考慮從目標事件中心刪除消息,以允許將新消息引入事件中心。

路由資源記錄

以下是 路由資源日誌中記錄的作名稱和錯誤代碼。

作名稱

作業名稱 等級 說明
UndefinedRouteEvaluation 資訊 不能使用 giving 條件評估消息。 例如,如果消息中缺少路由查詢條件中的屬性。 了解有關 路由查詢語法的更多資訊。
RouteEvaluationError (路由評估錯誤) 錯誤 由於消息格式存在問題,評估消息時出錯。 例如,如果消息中未指定內容編碼或內容類型無效,則會記錄此錯誤。 這些必須在 系統屬性中設置。
DroppedMessage 錯誤 消息已刪除且未路由。 這可能是由於以下原因:消息與任何路由查詢都不匹配,或者終端節點已失效,並且在多次重試后無法傳送消息。 我們建議使用 REST API 獲取終端節點運行狀況以獲取有關終端節點的更多詳細資訊。
端點不正常 錯誤 終結點未接受來自IoT中心的消息,並且IoT中心正在嘗試重新發送消息。 我們建議通過 REST API 獲取終端節點運行狀況來觀察最後一個已知錯誤。
端點死亡 錯誤 Endpoint 已超過一個小時未接受來自 IoT Hub 的消息。 我們建議通過 REST API 獲取終端節點運行狀況來觀察最後一個已知錯誤。
終端節點運行狀況 資訊 終結點運行狀況良好,並且正在從IoT中心接收消息。 此消息不會連續記錄,而僅在終端節點再次恢復正常時記錄。 此消息表示IoT中心無法向終端節點發送消息,但終端節點現在運行狀況良好。
OrphanedMessage (孤立消息) 資訊 該消息與任何路由都不匹配。
無效消息 錯誤 由於與終端節點不相容,消息無效。 我們建議檢查終端節點的配置。

UndefinedRouteEvaluationRouteEvaluationErrorOrphanedMessage 受到限制,並且每個 IoT 中心每分鐘記錄不超過一次。

常見的錯誤碼

錯誤碼 說明
401002 IoT 中心未經授權的訪問
413001 消息太大
403004 超出設備最大佇列深度
503008 接收鏈路受限制
500000 通用伺服器錯誤
401 未經授權
503 服務無法使用
500001 伺服器錯誤
400103 無效的內容編碼或內容類型
404001 未找到設備

後續步驟

如果您需要更多協助,可以在 Microsoft Q&A 和 Stack Overflow 論壇上連絡 Azure 專家。 或者,您可以提出 Azure 支援事件。 請移至 Azure 支援網站,然後選取 [取得支援]