教學課程:搭配 IoT 中樞來設定及使用計量和記錄
使用 Azure 監視器來收集 IoT 中樞的計量和記錄,藉此監視解決方案的作業,並在發生問題時進行疑難排解。 在本教學課程中,您將了解如何根據計量建立圖表、如何建立會在計量上觸發的警示、如何將 IoT 中樞作業和錯誤傳送至 Azure 監視器記錄,以及如何檢查記錄是否有錯誤。
本教學課程使用從 .NET 傳送遙測快速入門取得的 Azure 範例,以將訊息傳送至 IoT 中樞。 您一律可以使用裝置或其他範例來傳送訊息,但可能必須據以修改幾個步驟。
開始進行本教學課程之前,對 Azure 監視器概念有一定的熟悉程度會很有幫助。 若要深入了解,請參閱監視 IoT 中樞。 若要深入了解 IoT 中樞所發出的計量和資源記錄,請參閱監視資料參考。
在本教學課程中,您會執行下列工作:
- 使用 Azure CLI 建立 IoT 中樞、註冊模擬裝置,並建立 Log Analytics 工作區。
- 將 IoT 中樞連線和裝置遙測資源記錄傳送到 Log Analytics 工作區中的 Azure 監視器記錄。
- 使用計量瀏覽器建立以選取的計量為基礎的圖表,並將其釘選到您的儀表板。
- 建立計量警示,以便您可以在發生重要狀況時收到電子郵件通知。
- 下載並執行某個應用程式,以模擬 IoT 裝置傳送訊息給 IoT 中樞。
- 當您的情況發生時,請檢視警示。
- 在儀表板上檢視計量圖表。
- 檢視 Azure 監視器記錄中的 IoT 中樞錯誤和作業。
必要條件
Azure 訂用帳戶。 如果您沒有 Azure 訂用帳戶,請在開始前建立免費帳戶。
開發電腦必須有 .NET Core SDK 2.1 或以上版本。 您可以從 .NET 下載適用於多種平台的 .NET Core SDK。
您可以使用下列命令,以確認開發電腦上目前的 C# 版本:
dotnet --version
能夠接收郵件的電子郵件帳戶。
請確定您的防火牆已開啟連接埠 8883。 本教學課程中的裝置範例會使用 MQTT 通訊協定,其會透過連接埠 8883 進行通訊。 某些公司和教育網路環境可能會封鎖此連接埠。 如需此問題的詳細資訊和解決方法,請參閱連線至 IoT 中樞 (MQTT)。
在 Azure Cloud Shell 中使用 Bash 環境。 如需詳細資訊,請參閱 Azure Cloud Shell 中的 Bash 快速入門。
若要在本地執行 CLI 參考命令,請安裝 Azure CLI。 若您在 Windows 或 macOS 上執行,請考慮在 Docker 容器中執行 Azure CLI。 如需詳細資訊,請參閱〈如何在 Docker 容器中執行 Azure CLI〉。
如果您使用的是本機安裝,請使用 az login 命令,透過 Azure CLI 來登入。 請遵循您終端機上顯示的步驟,完成驗證程序。 如需其他登入選項,請參閱使用 Azure CLI 登入。
出現提示時,請在第一次使用時安裝 Azure CLI 延伸模組。 如需擴充功能詳細資訊,請參閱使用 Azure CLI 擴充功能。
執行 az version 以尋找已安裝的版本和相依程式庫。 若要升級至最新版本,請執行 az upgrade。
設定資源
在此教學課程中,您需要 IoT 中樞、Log Analytics 工作區和模擬的 IoT 裝置。 這些資源可使用 Azure 入口網站、Azure CLI 或 PowerShell 來建立。 請將所有資源建立在相同的資源群組和位置。 如此一來,當您完成教學課程時,可以透過刪除資源群組的單一步驟來移除所有項目。
在本教學課程中,我們提供了執行下列步驟的 CLI 指令碼:
建立資源群組。
建立 IoT 中樞。
建立 Log Analytics 工作區。
為傳送訊息至 IoT 中樞的模擬裝置註冊裝置身分識別。 儲存裝置連接字串,以便用來設定模擬裝置。
重要
本文包含使用共用存取簽章 (也稱為對稱金鑰驗證) 連線裝置的步驟。 此驗證方法方便進行測試和評估,但使用 X.509 憑證來驗證裝置是更安全的方法。 若要深入了解,請參閱安全性最佳做法 > 連線安全性。
使用 Azure CLI 設定資源
將下列命令複製並貼到已安裝 Azure CLI 的 Cloud Shell 或本機命令列執行個體中。 有些命令的執行可能需要一些時間。 新的資源會建立到資源群組「ContosoResources」中。
某些資源的名稱在整個 Azure 中必須是唯一的。 指令碼會使用 $RANDOM
函式產生隨機值,並將其儲存在變數中。 針對這些資源,指令碼會將此隨機值附加至資源的基底名稱,使資源名稱成為唯一的。
設定不需是全域唯一資源名稱的值。
location=westus
resourceGroup=ContosoResources
iotDeviceName=Contoso-Test-Device
設定必須是唯一資源名稱的值。 這些名稱的結尾會串連到亂數。
randomValue=$RANDOM
iotHubName=ContosoTestHub$randomValue
echo "IoT hub name = " $iotHubName
workspaceName=contoso-la-workspace$randomValue
echo "Log Analytics workspace name = " $workspaceName
建立資源群組,以供本教學課程中的所有資源使用。
az group create --name $resourceGroup --location $location
在免費層中建立 IoT 中樞。 每個訂用帳戶只能有一個免費的 IoT 中樞。 如果您已經有免費中樞,請將 --sku
值變更為 B1
(基本) 或 S1
(標準)。
az iot hub create --name $iotHubName --resource-group $resourceGroup --partition-count 2 --sku F1 --location $location
建立 Log Analytics 工作區
az monitor log-analytics workspace create --resource-group $resourceGroup --workspace-name $workspaceName --location $location
建立要用於測試的 IoT 裝置身分識別。
az iot hub device-identity create --device-id $iotDeviceName --hub-name $iotHubName
擷取裝置身分識別的主要連接字串,然後在本機複製該字串。 您需要此連接字串,才能在測試階段執行裝置模擬。
az iot hub device-identity connection-string show --device-id $iotDeviceName --hub-name $iotHubName
收集連線和裝置遙測的記錄
IoT 中樞會發出數種作業類別的資源記錄。 若要檢視這些記錄,您必須建立診斷設定,以將其傳送至目的地。 其中一個此類目的地是在 Log Analytics 工作區中收集的 Azure 監視器記錄。 IoT 中樞資源記錄會分組成不同的類別。 您可以在診斷設定中選取要傳送至 Azure 監視器記錄的類別。 在本文中,我們將會收集與連線和裝置遙測有關的作業和錯誤記錄。 如需 IoT 中樞所支援類別的完整清單,請參閱 IoT 中樞資源記錄。
若要建立診斷設定以將 IoT 中樞資源記錄傳送至 Azure 監視器記錄,請遵循下列步驟:
在 Azure 入口網站中,瀏覽至您的 IoT 中樞。 如果您使用 CLI 命令來建立資源,則 IoT 中樞位於資源群組 ContosoResources 中。
從導覽功能表的 [監視] 區段選取 [診斷設定]。 然後選取 [新增診斷設定]。
在 [診斷設定] 頁面上,提供下列詳細資料:
參數 值 診斷設定名稱 為您的設定提供描述性的名稱,例如「傳送連線和遙測至記錄」。 記錄 從 [類別] 清單中選取 [連線] 和 [裝置遙測]。 目的地詳細資料 選取 [傳送至 Log Analytics 工作區],然後使用 Log Analytics 工作區選擇器來選取您先前記下的工作區。 選取 [儲存] 以儲存設定。 關閉 [診斷設定] 窗格。 您可以在診斷設定清單中看到新的設定。
設定計量
現在,我們將會使用計量瀏覽器來建立圖表,以顯示您想要追蹤的計量。您會將此圖表釘選到 Azure 入口網站中的預設儀表板。
在 IoT 中樞功能表中,從 [監視] 區段中選取 [計量]。
在畫面頂端,選取 [過去 24 小時 (自動)]。 在出現的下拉式清單中,選取 [過去 4 小時] 作為 [時間範圍],將 [時間細微性] 設定為 [1 分鐘],並且選取 [當地] 作為 [顯示時間]。 選取 [套用] 來儲存這些設定。 該設定現在應該會顯示 [當地時間: 過去 4 小時 (1 分鐘)]。
在圖表上,有一個部分計量設定會顯示在 IoT 中樞的範圍內。 將 [範圍] 和 [計量命名空間] 值保留為其預設值。 選取 [計量] 設定並輸入「遙測」,然後從下拉式清單中選取 [遙測訊息傳送]。 [彙總] 會自動設定為 [總和]。 請注意,您的圖表標題也會變更。
現在,選取 [新增計量] 以在圖表中新增其他計量。 在 [計量] 底下,選取 [已使用的訊息總數]。 在 [彙總] 中選取 [平均]。同樣地請注意,圖表的標題已變更為包含此計量。
現在,您的畫面中會顯示已最小化的 [已傳送的遙測訊息] 計量,以及用於 [已使用的訊息總數] 的新計量。
在圖表右上方,選取 [儲存至儀表板],然後從下拉式清單中選擇 [釘選到儀表板]。
在 [釘選到儀表板] 窗格上,選取 [現有] 索引標籤。選取 [私人],然後從 [儀表板] 下拉式清單中選取 [儀表板]。 最後,選取 [釘選] 以將此圖表釘選到 Azure 入口網站中的預設儀表板。 如果您未將圖表釘選到儀表板,當您結束計量瀏覽器時,不會保留您的設定。
設定計量警示
現在,我們將會設定警示,在「已傳送的遙測訊息」和「已使用的訊息總數」這兩個計量上觸發。
「已傳送的遙測訊息」是一個良好的計量,可追蹤訊息輸送量並避免進行節流。 針對免費層中的 IoT 中樞,節流限制為每秒 100 則訊息。使用單一裝置時,我們將無法達到這類輸送量,因此,將設定警示,當訊息數量在 5 分鐘內超過 1000 則時觸發。 在生產環境中,您可以根據您 IoT 中樞的服務層級、版本和單位數,將訊號設定為更高的值。
「已使用的訊息總數」會追蹤每日使用的訊息數目。 此計量會在每天的 00:00 UTC 重設。 如果您超過每日配額一段特定閾值的時間,您的 IoT 中樞就不會再接受訊息。 針對免費層中的 IoT 中樞,每日訊息配額為 8000 則。 我們會設定警示,以在訊息總數超過 4000、50% 的配額時觸發。 在實務上,您可能會將此百分比設定為較高的值。 每日配額值取決於您的 IoT 中樞的服務層級、版本和單位數。
如需有關 IoT 中樞配額和節流限制的詳細資訊,請參閱配額和節流。
若要設定計量警示:
在 IoT 中樞功能表中,從 [監視] 區段中選取 [警示]。
選取 [建立警示規則]。
在 [建立警示規則] 窗格中,有四個區段:
- 範圍已設定為您的 IoT 中樞,因此我們不會變動此區段。
- 條件設定將會觸發警示的訊號和條件。
- 動作設定當警示觸發時會發生什麼情形。
- 詳細資料可讓您設定警示的名稱和描述。
首先,設定會觸發警示的條件。
[條件] 索引標籤隨即開啟,並開啟 [選取訊號] 窗格。 於訊號名稱搜尋方塊中輸入「遙測」,然後選取 [已傳送的遙測訊息]。
在 [設定訊號邏輯] 窗格上,設定或確認 [警示邏輯] 底下的下列欄位 (您可以忽略圖表):
參數 值 閾值 靜態 運算子 大於 彙總類型 總數 閾值 1000 單位 Count 彙總細微性 (期間) 5 分鐘 評估頻率 每隔 1 分鐘 這些設定會將訊號設定為在 5 分鐘期間內的訊息總數。 這個總計將會每分鐘評估一次,如果前 5 分鐘的總計超過 1000 個訊息,就會觸發警示。
選取 [完成] 以儲存訊號邏輯。
選取 [下一步:動作] 以設定警示的動作。
選取 [建立動作群組]。
在 [建立動作群組] 窗格的 [基本] 索引標籤上,為您的動作群組提供名稱和顯示名稱。
選取 [通知] 索引標籤。針對 [通知類型],從下拉式清單中選取 [電子郵件/SMS 訊息/推播/語音]。 [電子郵件/SMS 訊息/推播/語音] 窗格隨即開啟。
在 [電子郵件/SMS 訊息/推播/語音] 窗格上,選取 [電子郵件] 並輸入您的電子郵件地址,然後選取 [確定]。
回到 [通知] 窗格,輸入通知的名稱。
(選擇性) 在動作群組 [動作] 索引標籤上,[動作類型] 下拉式清單會列出您可以使用警示觸發的動作類型。 在本文中,我們只會使用通知,因此您可以忽略此索引標籤下的設定。
選取 [檢閱與建立] 索引標籤,確認您的設定,然後選取 [建立]。
回到警示規則 [動作] 窗格,請注意新的動作群組已新增至警示的動作。
選取 [下一步:詳細資料] 以設定警示規則詳細資料,並儲存警示規則。
- 在 [詳細資料] 索引標籤上,提供警示的名稱和描述;例如「如果 5 分鐘出現超過 1000 個訊息,則發出警示」。
選取 [檢閱 + 建立] 以檢閱警示規則的詳細資料。 如果一切看起來正確,請選取 [建立] 以儲存新的規則。
現在,為 [已使用的訊息總數] 設定另一個警示。 如果您想要在所使用的訊息數目接近 IoT 中樞的每日配額時傳送警示,屆時 IoT 中樞就會開始拒絕訊息,此計量會很有用。 遵循您先前執行的步驟,但是有下列差異。
針對 [設定訊號邏輯] 窗格上的訊號,選取 [已使用的訊息總數]。
在 [設定訊號邏輯] 窗格上,設定或確認下列欄位 (您可以忽略圖表):
參數 值 閾值 靜態 運算子 大於 彙總類型 總數 閾值 4000 單位 Count 彙總細微性 (期間) 1 分鐘 評估頻率 每隔 1 分鐘 這些設定會設定當訊息數目到達 4000 個時要觸發的訊號。 計量會每分鐘評估一次。
當您指定警示規則的動作時,請選取您為上一個規則建立的相同動作群組。
針對警示詳細資料,請選擇與您先前所提供名稱和描述不同的名稱和描述。
在 IoT 中樞左窗格的 [監視] 底下,選取 [警示]。 現在,在 [警示] 窗格頂端的功能表上,選取 [警示規則]。 [警示規則] 窗格隨即開啟。 您應該會看到兩個警示:
關閉 [警示規則] 窗格。
使用這些設定時,將會觸發警示,而在 5 分鐘時間範圍內傳送超過 1000 個訊息時,以及使用的訊息總數超過 4000 個 (免費層中 IoT 中樞每日配額的 50%) 時,您會收到電子郵件通知。
執行模擬裝置應用程式
在 設定資源 區段中,您已註冊裝置身分識別,以用來模擬使用 IoT 裝置。 在本節中,您會下載模擬裝置的 .NET 主控台應用程式,以將裝置到雲端的訊息傳送至 IoT 中樞、設定為將這些訊息傳送至您的 IoT 中樞,然後加以執行。
重要
最多可能需要 10 分鐘的時間,IoT 中樞才能完全設定及啟用警示。 在您設定最後一次警示和執行模擬裝置應用程式之間,請至少等候 10 分鐘。
從 GitHub 下載或複製 Azure IoT C# SDK 存放庫的解決方案。 此存放庫包含數個範例應用程式。 在本教學課程中,我們將使用 iothub/device/samples/getting started/SimulatedDevice/。
在本機終端機視窗中,瀏覽至解決方案的根資料夾。 然後巡覽至 iothub\device\samples\getting started\SimulatedDevice 資料夾。
在您選擇的文字編輯器中開啟 SimulatedDevice.cs 檔案。
將
s_connectionString
變數的值取代為您在執行指令碼以設定資源時所記下的裝置連接字串。在
SendDeviceToCloudMessagesAsync
方法中,將Task.Delay
從 1000 變更為 1,以將傳送訊息的間隔時間從 1 秒減為 0.001 秒。 縮短此延遲會增加所傳送的訊息數目。 (您可能不會收到每秒 100 個訊息速率的訊息)。await Task.Delay(1);
將變更儲存到 SimulatedDevice.cs。
在本機終端機視窗中,執行下列命令以安裝模擬裝置應用程式所需的套件:
dotnet restore
在本機終端機視窗中,執行下列命令以建置並執行模擬裝置應用程式:
dotnet run
下列螢幕擷取畫面顯示模擬裝置應用程式將遙測傳送到 IoT 中樞時的輸出:
讓應用程式至少執行 10-15 分鐘。 在理想的情況下,讓應用程式執行直到停止傳送訊息 (大約 20-30 分鐘)。 當您已超過 IoT 中樞的每日訊息配額,而且其已停止接受其他訊息時,就會發生這種情況。
注意
如果您讓裝置應用程式在停止傳送訊息後繼續執行一段延長的時間,則可能會遇到例外狀況。 您可以放心地略過此例外狀況,並關閉應用程式視窗。
在儀表板上檢視計量圖表
在 Azure 入口網站的左上角,開啟入口網站功能表,然後選取 [儀表板]。
尋找您稍早釘選的圖表,然後在圖表資料外部的圖格上按一下任何位置以將其展開。 會在圖表上顯示已傳送的遙測訊息和已使用的訊息總數。 最新的數量會顯示在圖表的底部。 您可以在圖表中移動資料指標,查看特定時間的計量值。 您也可以在圖表頂端變更時間值和細微性,將資料縮小或擴大到感興趣的時間週期。
在此案例中,模擬裝置的訊息輸送量不夠大,而無法造成 IoT 中樞對其訊息進行節流。 在實際牽涉到節流的案例中,您可能看到已傳送的遙測訊息超過 IoT 中樞節流限制一段限制的時間。 這是為了容納高載流量。 如需詳細資訊,請參閱流量成形。
檢視警示
當已傳送的訊息數量超過您在警示規則中設定的限制時,您就會開始收到電子郵件警示。
若要查看是否有任何使用中警示,請在 IoT 中樞左窗格的 [監視] 底下,選取 [警示]。 [警示] 窗格會顯示針對指定時間範圍,依嚴重性排序的已引發警示數目。
選取嚴重性「Sev 3」的資料列。 [所有警示] 窗格隨即開啟,並列出已引發的「Sev 3」警示。
選取其中一個警示以查看警示詳細資料。
檢查您的收件匣中是否有來自 Microsoft Azure 的電子郵件。 [主旨] 行會描述已觸發的警示。 例如,「Azure:已啟用嚴重性:3 如果在 5 分鐘內超過 1000 則訊息,發出警示」。 本文會如以下影像所示:
檢視 Azure 監視器記錄
在 收集連線和裝置遙測的記錄 區段中,您已建立診斷設定,以將 IoT 中樞針對連線和裝置遙測作業所發出的資源記錄傳送給 Azure 監視器記錄。 在本節中,您將會針對 Azure 監視器記錄執行 Kusto 查詢,以觀察發生的任何錯誤。
在 Azure 入口網站中 IoT 中樞的左窗格,在 [監視] 底下選取 [記錄]。 關閉初始 [查詢] 視窗 (如果開啟)。
在 [新增查詢] 窗格中,選取 [查詢] 索引標籤,然後展開 [IoT 中樞] 以查看預設查詢的清單。
選取 [錯誤摘要] 查詢。 查詢會出現在 [查詢編輯器] 窗格中。 在編輯器窗格中選取 [執行],並觀察查詢結果。 展開其中一個資料列以查看詳細資料。
注意
如果您沒有看到任何錯誤,請嘗試執行「最近連線的裝置」查詢。 這應該會傳回模擬裝置的資料列。
清除資源
若要將您已針對本教學課程所建立的所有資源移除,請刪除資源群組。 此動作會同時刪除群組內含的所有資源。 在本例中,此動作會移除 IoT 中樞、Log Analytics 工作區和資源群組本身。 如果您已將計量圖表釘選到儀表板,則必須對每個計量圖表右上角的三個點按一下,然後選取 [移除],來手動移除這些計量。 請務必在刪除圖表之後儲存您的變更。
若要移除資源群組,請使用 az group delete 命令。
az group delete --name ContosoResources
下一步
在本教學課程中,您已了解如何藉由執行下列工作,來使用 IoT 中樞計量和記錄:
- 使用 Azure CLI 建立 IoT 中樞、註冊模擬裝置,並建立 Log Analytics 工作區。
- 將 IoT 中樞連線和裝置遙測資源記錄傳送到 Log Analytics 工作區中的 Azure 監視器記錄。
- 使用計量瀏覽器建立以選取的計量為基礎的圖表,並將其釘選到您的儀表板。
- 建立計量警示,以便您可以在發生重要狀況時收到電子郵件通知。
- 下載並執行某個應用程式,以模擬 IoT 裝置傳送訊息給 IoT 中樞。
- 當您的情況發生時,請檢視警示。
- 在儀表板上檢視計量圖表。
- 檢視 Azure 監視器記錄中的 IoT 中樞錯誤和作業。
請前進到下一個教學課程,以了解如何測試 IoT 中樞的災害復原功能。
執行 IoT 中樞的手動容錯移轉 (部分機器翻譯)