收集及傳輸計量

適用于: IoT Edge 1.4 checkmark IoT Edge 1.4

重要

支援的版本是 IoT Edge 1.4。 如果您是舊版,請參閱更新 IoT Edge

您可以使用 Azure 監視器和內建計量整合,從遠端監視 IoT Edge 車隊。 若要在您的裝置上啟用這項功能,請將 metrics-collector 模組新增至您的部署,並將其設定為將計量收集模組計量收集並傳輸至 Azure 監視器。

若要在 IoT Edge 裝置上設定監視,請遵循教學 課程:監視 IoT Edge 裝置 。 您將瞭解如何將 metrics-collector 模組新增至您的裝置。 本文提供監視架構的概觀,並說明您在裝置上設定計量的選項。

IoT Edge 與 Azure 監視器 整合(4:06)

架構

Screenshot of the metrics monitoring architecture with IoT Hub.

注意 描述
1 所有模組都必須使用 Prometheus 資料模型 發出計量。 雖然 內建計量 預設可啟用廣泛的工作負載可見度,但自訂模組也可用來發出案例特定的計量,以增強監視解決方案。 瞭解如何在新增自訂計量 一文中使用 開放原始碼程式庫來檢測自訂模組。
2️ metrics-collector 模組 是 Microsoft 提供的 IoT Edge 模組,可收集工作負載模組計量,並將其從裝置外傳輸。 計量集合使用 提取 模型。 集合頻率、端點和篩選可以設定為控制從模組輸出的資料。 如需詳細資訊,請參閱 本文稍後的計量收集器組態一節
3️ 您有兩個選項可將計量從計量收集器模組傳送至雲端。 選項 1 會將計量傳送至 Log Analytics。 1 收集的計量會使用稱為 InsightsMetrics 的固定原生資料表,內嵌至指定的 Log Analytics 工作區。 此資料表的架構與 Prometheus 計量資料模型相容。

此選項需要存取輸出埠 443 上的工作區。 Log Analytics 工作區識別碼和金鑰必須指定為模組組態的一部分。 若要在受限制的網路中啟用,請參閱 本文稍後在受限制的網路存取案例 中啟用。
4️ 每個計量專案都包含 ResourceId 指定為模組組態 一部分的 。 此關聯會自動連結計量與指定的資源(例如,IoT 中樞)。 因此,策劃的 IoT Edge 活頁簿範本 可以藉由對資源發出查詢來擷取計量。

此方法也可讓多個 IoT 中樞安全地共用單一 Log Analytics 工作區作為計量資料庫。
5️ 選項 2 會將計量傳送至IoT 中樞。 1 收集器模組可設定為透過 edgeHub 模組以 UTF-8 編碼的 JSON 裝置到雲端訊息 傳送收集的計量。 此選項會解除鎖定監視只允許外部存取IoT 中樞端點的鎖定 IoT Edge 裝置。 它也可讓您在巢狀設定中監視子 IoT Edge 裝置,其中子裝置只能存取其父裝置。
6️ 透過 IoT 中樞 路由計量時,必須設定一次性的雲端工作流程。 工作流程會處理從計量收集器模組抵達的訊息,並將其傳送至 Log Analytics 工作區。 此工作流程會啟用策劃的 視覺效果 警示 功能,即使是透過此選擇性路徑抵達的計量也一定。 如需如何設定此雲端工作流程的詳細資訊,請參閱透過 IoT 中樞 路由計量一節。

1 目前,使用 選項 1 直接從 IoT Edge 裝置將計量傳輸至 Log Analytics,是需要最少設定的簡單路徑。 除非您的特定案例需要選項 2 方法, 否則優先使用第一個選項,讓 IoT Edge 裝置只與IoT 中樞通訊。

計量收集器模組

Microsoft 提供的計量收集器模組可以新增至 IoT Edge 部署,以收集模組計量,並將其傳送至 Azure 監視器。 模組程式碼是開放原始碼, 可在 IoT Edge GitHub 存放庫中 取得。

計量收集器模組是以支援 Linux X64、ARM32、ARM64 和 Windows X64 (版本 1809) 的多架構 Docker 容器映射提供。 在 公開提供 mcr.microsoft.com/azureiotedge-metrics-collector

它也可在 IoT Edge 模組 Marketplace 中使用

計量收集器組態

計量收集器的所有設定都是使用環境變數來完成。 至少,此資料表中所記下的變數必須指定為 必要。

Environment variable name 描述
ResourceId 裝置與其通訊之 IoT 中樞的資源識別碼。 如需詳細資訊,請參閱 資源識別碼 一節。

必要

預設值:
UploadTarget 控制計量是透過 HTTPS 直接傳送至 Azure 監視器,還是以 D2C 訊息的形式IoT 中樞。 如需詳細資訊,請參閱 上傳目標

可以是 AzureMonitor IoTMessage

不需要

預設值: AzureMonitor
LogAnalyticsWorkspaceId Log Analytics 工作區識別碼

只有在 UploadTarget 是 AzureMonitor 時才 需要

預設值:
LogAnalyticsSharedKey Log Analytics 工作區金鑰

只有在 UploadTarget 是 AzureMonitor 時才 需要

預設值:
ScrapeFrequencyInSecs 要收集及傳輸計量的週期性時間間隔,以秒為單位。

範例: 600

不需要

預設值: 300
MetricsEndpointsCSV 要從中收集 Prometheus 計量的以逗號分隔的端點清單。 收集計量的所有模組端點都必須出現在此清單中。

範例: http://edgeAgent:9600/metrics 、、 http://edgeHub:9600/metricshttp://MetricsSpewer:9417/metrics

不需要

預設值: http://edgeHub:9600/metrics 、http://edgeAgent:9600/metrics
AllowedMetrics 要收集的計量清單,會忽略所有其他計量。 設定為要停用的空字串。 如需詳細資訊,請參閱 允許和不允許清單

範例: metricToScrape{quantile=0.99}[endpoint= http://MetricsSpewer:9417/metrics ]

不需要

預設值: 空白
BlockedMetrics 要忽略的計量清單。 覆寫 AllowedMetrics ,因此如果計量包含在這兩個清單中,則不會報告計量。 如需詳細資訊,請參閱 允許和不允許清單

範例: metricToIgnore{quantile=0.5}[endpoint= http://VeryNoisyModule:9001/metrics ], docker_container_disk_write_bytes

不需要

預設值: 空白
CompressForUpload 控制上傳計量時是否應該使用壓縮。 適用于所有上傳目標。

範例: true

不需要

預設值: true
AzureDomain 指定將計量直接內嵌至 Log Analytics 時要使用的最上層 Azure 網域。

範例: azure.us

不需要

預設值: azure.com

資源識別碼

計量收集器模組需要 IoT Edge 裝置所屬 IoT 中樞的 Azure Resource Manager 識別碼。 提供此識別碼作為 ResourceID 環境變數的值

資源識別碼採用下列格式:

/subscriptions/<subscription id>/resourceGroups/<resource group name>/providers/Microsoft.Devices/IoTHubs/<iot hub name>

您可以在Azure 入口網站 IoT 中樞的 [屬性 ] 頁面中找到資源識別碼

Screenshot the shows how to retrieve your resource ID from the IoT Hub properties.

或者,您可以使用 az resource show 命令來 擷取識別碼:

az resource show -g <resource group> -n <hub name> --resource-type "Microsoft.Devices/IoTHubs"

上傳目標

UploadTarget 態選項可控制計量是否直接傳送至 Azure 監視器或IoT 中樞。

如果您將 UploadTarget 設定 IoTMessage ,則模組計量會發佈為 IoT 訊息。 這些訊息會從端點 /messages/modules/<metrics collector module name>/outputs/metricOutput 發出為 UTF8 編碼的 json。 例如,如果您的 IoT Edge 計量收集器模組名為 IoTEdgeMetricsCollector ,則端點為 /messages/modules/IoTEdgeMetricsCollector/outputs/metricOutput 。 格式如下:

[{
    "TimeGeneratedUtc": "<time generated>",
    "Name": "<prometheus metric name>",
    "Value": <decimal value>,
    "Label": {
        "<label name>": "<label value>"
    }
}, {
    "TimeGeneratedUtc": "2020-07-28T20:00:43.2770247Z",
    "Name": "docker_container_disk_write_bytes",
    "Value": 0.0,
    "Label": {
        "name": "AzureMonitorForIotEdgeModule"
    }
}]

允許和不允許清單

BlockedMetricsAllowedMetrics 態選項會採用空格或逗號分隔的計量選取器清單。 如果計量符合任一清單中的一或多個計量,則會包含或排除該計量。

計量選取器會使用類似 PromQL 查詢語言子 集的格式。

metricToSelect{quantile=0.5,otherLabel=~Re[ge]*|x}[http://VeryNoisyModule:9001/metrics]

計量選取器包含三個部分:

計量名稱 ( metricToSelect )。

  • 萬用字元 * (任何字元) 和 ? (任何單一字元) 可用於計量名稱。 例如, *CPU 會比對 maxCPU 和 , minCPU 但不符合 CPUMaximum???CPU會比對 , minCPU 但不會 maximumCPUmaxCPU 對 。
  • 計量選取器中需要此元件。

以標籤為基礎的選取器 ( {quantile=0.5,otherLabel=~Re[ge]*|x} )。

  • 多個計量值可以包含在大括弧中。 這些值應該以逗號分隔。
  • 如果選取器中至少有所有標籤存在且也相符,則會比對計量。
  • 如同 PromQL,允許下列比對運算子。
    • = 比對標籤完全等於提供的字串(區分大小寫)。
    • != 比對標籤不完全等於提供的字串。
    • =~ 比對標籤與提供的 RegEx。 前: label=~CPU|Mem|[0-9]*
    • !~ 比對不符合所提供 RegEx 的標籤。
    • Regex 已完全錨定 (A ^ ,並 $ 會自動新增至每個 RegEx 的開始和結尾)
    • 此元件在計量選取器中是選擇性的。

端點選取器 ( [http://VeryNoisyModule:9001/metrics] )。

  • URL 應該完全符合 中所列的 MetricsEndpointsCSV URL。
  • 此元件在計量選取器中是選擇性的。

計量必須符合要選取之指定選取器的所有部分。 它必須符合名稱 ,且 具有所有具有相同值的 標籤,而且 來自指定的端點。 例如, mem{quantile=0.5,otherLabel=foobar}[http://VeryNoisyModule:9001/metrics] 不符合選取器 mem{quantile=0.5,otherLabel=~foo|bar}[http://VeryNoisyModule:9001/metrics] 。 多個選取器應該用來建立或類似的行為,而不是類似的行為。

例如,若要允許具有模組中任何標籤的自訂計量 mem ,但只允許與標籤 agg=p99 相同的計量 module2 ,可以將下列選取器新增至 AllowedMetricsmodule1

mem{}[http://module1:9001/metrics] mem{agg="p99"}[http://module2:9001/metrics]

或者,若要允許自訂計量 mem ,以及 cpu 任何標籤或端點,請將下列內容新增至 AllowedMetrics

mem cpu

在受限制的網路存取案例中啟用

如果您要將計量直接傳送至 Log Analytics 工作區,請允許輸出存取下列 URL:

  • https://<LOG_ANALYTICS_WORKSPACE_ID>.ods.opinsights.azure.com/*
  • https://<LOG_ANALYTICS_WORKSPACE_ID>.oms.opinsights.azure.com/*

Proxy 考慮

metrics-collector 模組是以 .NET Core 撰寫。 因此,使用與系統模組相同的指引,允許 透過 Proxy 伺服器 進行通訊。

來自本機模組的計量集合會使用 HTTP 通訊協定。 藉由設定 NO_PROXY 環境變數,排除本機通訊,使其不通過 Proxy 伺服器。

將值設定 NO_PROXY 為應排除的主機名稱逗號分隔清單。 使用主機名稱的模組名稱。 例如: edgeHub、edgeAgent、myCustomModule

路由計量

有時候,必須透過 IoT 中樞 內嵌計量,而不是將計量直接傳送至 Log Analytics。 例如,在巢狀 設定中監視 IoT Edge 裝置時,子裝置只能存取其父裝置的 IoT Edge 中樞。 另一個範例是僅 將具有輸出網路存取權的 IoT Edge 裝置 部署到IoT 中樞。

若要在此案例中啟用監視功能,您可以將 metrics-collector 模組設定為透過 edgeHub 模組將計量傳送為裝置到雲端 (D2C) 訊息。 將收集器 組態中的環境變數設定 UploadTargetIoTMessage ,即可開啟此功能。

提示

請記得新增 edgeHub 路由,以將計量訊息從收集器模組傳遞至IoT 中樞。 看起來像 FROM /messages/modules/replace-with-collector-module-name/* INTO $upstream

此選項需要額外的設定雲端工作流程,才能將抵達IoT 中樞的計量訊息傳遞給 Log Analytics 工作區。 若未設定此設定,整合的其他部分,例如 策劃的視覺效果 警示 將無法運作。

注意

請留意此選項的額外成本。 計量訊息會計入您的IoT 中樞訊息配額。 您也將需支付 Log Analytics 擷取和雲端工作流程資源的費用。

範例雲端工作流程

將計量訊息從 IoT 中樞 傳遞至 Log Analytics 的 雲端工作流程可在 IoT Edge 記錄和監視範例 中取得。 此範例可以部署到現有的雲端資源,或做為生產部署參考。

下一步

探索 Azure 監視器啟用的 策劃視覺效果 類型。