收集及傳輸計量

適用於:IoT Edge 1.5 複選標記 IoT Edge 1.5 IoT Edge 1.4 複選標記 IoT Edge 1.4

重要

支援 IoT Edge 1.5 LTS 和 IoT Edge 1.4 LTS 版本。 IoT Edge 1.4 LTS 於 2024 年 11 月 12 日結束生命週期。 如果您是舊版,請參閱更新 IoT Edge

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

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

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

架構

使用 IoT 中樞的計量監視架構螢幕快照。

注意 描述
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 中樞。 如需詳細資訊,請參閱 上傳目標

可以是 AzureMonitorIoTMessage

不需要

默認值: 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 中樞的 [屬性] 頁面中找到資源識別碼

顯示如何從 IoT 中樞 屬性擷取資源標識碼的螢幕快照。

或者,您可以使用 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 應該完全符合 中所列的 MetricsEndpointsCSVURL。
  • 此元件在計量選取器中是選擇性的。

計量必須符合要選取之指定選取器的所有部分。 它必須符合名稱 ,且 具有所有具有相同值的 標籤,而且 來自指定的端點。 例如, 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 監視器啟用的 策劃視覺效果 類型。