共用方式為


監視、診斷和疑難解答 Azure IoT 中樞 裝置連線能力

IoT 裝置的連線問題可能難以排解,因為有許多可能的失敗點。 應用程式邏輯、實體網路、通訊協議、硬體、IoT 中樞和其他雲端服務都可能造成問題。 偵測並找出問題來源的能力非常重要。 然而,大規模的 IoT 解決方案可能有數千台裝置,因此手動檢查個別的裝置並不切實際。 IoT 中樞 與兩個 Azure 服務整合,以協助您:

  • Azure 監視器 Azure 監視器可讓您收集、分析及處理來自 IoT 中樞 的遙測。 為了協助您大規模偵測、診斷和排解這些問題,可使用 IoT 中樞透過 Azure 監視器所提供的監視功能。 這包括設定警示以在發生中斷連線時觸發通知和動作,以及設定您可用來探索導致中斷連線情況的記錄。

  • Azure 事件方格 針對重要的基礎結構和每部裝置中斷連線,請使用 Azure 事件方格 訂閱 IoT 中樞 所發出的裝置連線和中斷連線事件。 Azure 事件方格可讓您使用下列任何的事件處理常式:

    • Azure Functions
    • Logic Apps
    • Azure 自動化
    • Webhooks
    • 佇列儲存體
    • 混合式連線
    • 事件中樞

事件方格與Azure 監視器

事件方格提供低延遲、每個裝置監視的解決方案,可讓您用來追蹤重要裝置和基礎結構的裝置連線。 Azure 監視器提供一個稱為已連線裝置的計量,您可用來監視連線到您的 IoT 中樞的裝置數目,並在該數目低於靜態閾值時觸發警示。

決定是否要針對特定案例使用事件方格或 Azure 監視器時,請考慮下列事項:

  • 警示延遲:IoT 中樞連線事件可透過事件方格傳遞得更快。 這使得事件方格成為需要快速通知的場景的更好選擇。

  • 每個裝置通知:事件方格可讓您能夠追蹤個別裝置的連線和中斷連線情況。 這使得事件方格成為您需要監視重要裝置連線的場景的更好選擇。

  • 輕量型設定:Azure 監視器計量警示提供一個輕量型設定的體驗,無需與其他服務整合即可透過電子郵件、簡訊、語音和其他通知傳遞通知。 使用事件方格時,您必須與其他 Azure 服務整合以傳遞通知。 這兩個服務都可以與其他服務整合以觸發更複雜的動作。

事件方格:監視連線和中斷連線事件

若要監視生產環境中裝置的連線和中斷連線事件,建議您訂閱事件方格中的 Device 連線 ed 和 DeviceDisconnected 事件,以觸發警示並監視裝置連線狀態。 事件方格可提供比 Azure 監視器低的事件延遲,而且您可以基於每個裝置進行監視。 這些因素使事件方格成為監視重要裝置和基礎結構的首選方法。

當您使用事件方格來監視或觸發裝置中斷連線時的警示時,請確保您的建置方式能夠篩選掉因使用 Azure IoT SDK 的裝置上的 SAS 權杖更新而導致的定期中斷連線。 若要深入瞭解,請參閱 使用 Azure IoT SDK 的 MQTT 裝置中斷聯機行為。

探索下列文章,以深入瞭解如何使用事件方格監視裝置連線事件:

Azure 監視器:將連線事件路由傳送至記錄

IoT 中樞會持續針對數種作業類別發出資源記錄。 不過,若要收集此記錄數據,您必須建立診斷設定,將它路由傳送至可分析或封存的目的地。 其中一個目的地是透過Log Analytics工作區的 Azure 監視器記錄(請參閱定價),您可以在其中使用 Kusto 查詢來分析數據。

IoT 中樞 資源記錄連線類別會發出與裝置連線必須執行的作業和錯誤。 下列螢幕快照顯示診斷設定,以將這些記錄路由傳送至Log Analytics工作區:

建議的設定,將連線記錄傳送至 Log Analytics 工作區。

建議您在建立IoT中樞之後儘早建立診斷設定,因為雖然 IoT 中樞 一律會發出資源記錄,但在您將資源記錄路由傳送至目的地之前,Azure 監視器不會收集這些記錄。

若要深入瞭解如何將記錄路由傳送至目的地,請參閱 收集與路由。 如需建立診斷設定的詳細指示,請參閱 使用計量和記錄教學課程

Azure 監視器:設定裝置中斷連線的計量警示

您可以根據 IoT 中樞所發出的平台計量來設定警示。 透過計量警示,您可以通知個人發生了感興趣的情況,並同時觸發可以自動回應該情況的動作。

連線 裝置 (預覽) 計量會告訴您有多少裝置連線到您的 IoT 中樞。 如果此計量低於臨界值,您可以建立警示來觸發:

已連線裝置計量的警示邏輯設定。

您可以使用計量警示規則來大規模監視裝置中斷連線的異常情況。 也就是說,使用警示來確定大量裝置何時意外中斷連線。 偵測到此狀況時,您可以查看記錄來協助針對問題進行疑難排解。 但是,若要近乎即時地監視每個裝置的中斷連線情況和重要裝置的中斷連線情況,您必須使用事件方格。

若要深入瞭解具有 IoT 中樞 的警示,請參閱監視 IoT 中樞 中的警示。 如需在 IoT 中樞 中建立警示的逐步解說,請參閱使用計量和記錄教學課程。 如需警示的詳細概觀,請參閱 Azure 監視器檔中的 Microsoft Azure 警示概觀。

Azure 監視器:使用記錄來解決連線錯誤

當您使用 Azure 監視器計量警示或事件方格來偵測裝置中斷連線時,您可以使用記錄來協助排查原因。 本節說明如何在 Azure 監視器記錄中尋找一般問題。 下列步驟假設您已建立診斷設定,以將 IoT 中樞 連線 記錄傳送至 Log Analytics 工作區。

建立診斷設定來將 IoT 中樞資源記錄路由傳送至 Azure 監視器記錄之後,請遵循下列步驟來檢視 Azure 入口網站中的記錄。

  1. 在 Azure 入口網站 中流覽至您的 IoT 中樞。

  2. IoT 中樞左窗格的 [監視 ] 底下,選取 [ 記錄]。

  3. 若要隔離 IoT 中樞 的連線錯誤記錄,請在查詢編輯器中輸入下列查詢,然後選取 [執行]:

    AzureDiagnostics
    | where ( ResourceType == "IOTHUBS" and Category == "Connections" and Level == "Error")
    
  4. 如果有結果,請尋找 OperationNameResultType (錯誤碼) 和 ResultDescription (錯誤訊息) 以取得詳細資料。

    錯誤記錄檔的範例

使用下列問題解決指南來協助解決最常見的錯誤:

Azure 監視器:使用記錄來監視特定裝置的連線能力

在某些情況下,您可能會想要使用 Azure 監視器來查看特定裝置的連線錯誤和資訊。 若要隔離裝置的連線事件,您可以照著與上一節相同的步驟來執行,但輸入下列查詢。 以您的裝置名稱取代 test-device

AzureDiagnostics
| where ResourceProvider == "MICROSOFT.DEVICES" and ResourceType == "IOTHUBS"
| where Category == "Connections"
| extend DeviceId = tostring(parse_json(properties_s).deviceId)
| where DeviceId == "test-device"

此查詢會傳回您的目標裝置的錯誤和參考性的事件。 下列範例輸出顯示了參考性的 deviceConnect 事件:

記錄中裝置 連線 事件的螢幕快照。

使用 Azure IoT SDK 的 MQTT 裝置中斷連線行為

Azure IoT 裝置 SDK 會中斷與 IoT 中樞的連線,然後在其透過 MQTT (以及 MQTT over WebSocket) 通訊協定來更新 SAS 權杖時重新連線。 在記錄中,這會顯示為參考性的裝置中斷連線和連線事件,有時還伴隨錯誤事件。

根據預設,所有 SDK 的權杖有效期為 60 分鐘;不過,開發人員可以在一些 SDK 中變更它。 下表摘要說明每個 SDK 的令牌生命週期、令牌更新和令牌更新行為:

SDK 權杖有效期 權杖更新 更新行為
.NET 60 分鐘,可設定 85% 的有效期,可設定 SDK 會在權杖有效期加上 10 分鐘的寬限期間中斷連線再重新連線。 記錄中所產生的參考性事件和錯誤。
Java 60 分鐘,可設定 85% 的有效期,無法設定 SDK 會在權杖有效期加上 10 分鐘的寬限期間中斷連線再重新連線。 記錄中所產生的參考性事件和錯誤。
Node.js 60 分鐘,可設定 可設定 SDK 會在權杖更新時中斷連線再重新連線。 只會在記錄中產生參考性的事件。
Python 60 分鐘,可設定 到期前 120 秒 SDK 會在權杖有效期間中斷連線再重新連線。

下列螢幕擷取畫面顯示了不同 SDK 的 Azure 監視器記錄中的權杖更新行為。 如前所述,權杖有效期和更新閾值已從其預設值中變更。

  • .NET 裝置 SDK,其 1200 秒(20 分鐘)令牌生命週期和更新設定為 90% 的生命週期。 每隔 30 分鐘就會中斷連線:

    使用 .NET SDK 在 Azure 監視器記錄中透過 MQTT 更新令牌的錯誤行為。

  • Java SDK 具有 300 秒(5 分鐘)令牌生命週期,預設為 85% 的生命週期更新。 每隔 15 分鐘就會中斷連線:

    使用 Java SDK 在 Azure 監視器記錄中透過 MQTT 更新令牌的錯誤行為。

  • 節點 SDK,其令牌壽命為 300 秒(5 分鐘),且令牌更新設定為 3 分鐘。 會在權杖更新時中斷連線。 此外,沒有任何錯誤,只會發出參考連線/中斷連線事件:

    使用 Node SDK 在 Azure 監視器記錄中透過 MQTT 更新令牌的錯誤行為。

會使用下列查詢來收集結果。 該查詢會從屬性包中擷取 SDK 名稱和版本。 若要深入瞭解,請參閱 IoT 中樞 記錄中的 SDK 版本。

AzureDiagnostics
| where ResourceProvider == "MICROSOFT.DEVICES" and ResourceType == "IOTHUBS"
| where Category == "Connections"
| extend parsed_json = parse_json(properties_s)
| extend SDKVersion = tostring(parsed_json.sdkVersion) , DeviceId = tostring(parsed_json.deviceId) , Protocol =  tostring(parsed_json.protocol)
| distinct TimeGenerated, OperationName, Level, ResultType, ResultDescription, DeviceId, Protocol, SDKVersion

身為IoT解決方案開發人員或操作員,您必須注意此行為,才能解譯記錄中的連線/中斷連線事件和相關錯誤。 如果您想要變更裝置的權杖有效期或更新行為,請檢查裝置是否實作了裝置對應項設定或裝置方法來實現此目的。

如果您正在監視與事件中樞的裝置連線,請確定您建立了一種能夠篩選掉因 SAS 權杖更新而導致的定期中斷連線的方法。 例如,只要在中斷連線事件之後在特定時間範圍內發生連線事件時,不要根據中斷連線來觸發動作。

注意

IoT 中樞僅支援每台裝置一個作用中的 MQTT 連線。 代表相同裝置識別碼的任何新 MQTT 連線都會導致 IoT 中樞中斷現有的連線。

400027 連線 ionForcefullyClosedOnNew 連線 ion 將會登入 IoT 中樞 記錄

我嘗試了這些步驟, 但他們沒有工作

如果先前的步驟沒有説明,請嘗試:

下一步