分享方式:


收集和傳輸計量

適用於: 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 機群。 若要在裝置上啟用此功能,請將計量收集器模組新增至部署,並加以設定以收集模組計量並將其傳輸至 Azure 監視器。

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

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

架構

螢幕擷取畫面:使用 IoT 中樞的計量監視架構。

注意 描述
1 所有模組皆必須使用 Prometheus 資料模型來發出計量。 即使內建計量預設會啟用廣泛的工作負載可見性,但自訂模組也可用於發出案例特定的計量來增強監視解決方案。 深入了解如何使用新增自訂計量一文中的開放原始碼程式庫來檢測自訂模組。
2️ 計量收集器模組是 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 Edge 裝置的監視,這些裝置僅允許外部存取 IoT 中樞端點, 也允許在巢狀設定中監視子 IoT Edge 裝置,其中子裝置僅可存取其父裝置。
6 當透過 IoT 中樞路由計量時,必須設定 (一次性) 雲端工作流程。 工作流程會處理自計量收集器模組抵達訊息,並將其傳送至 Log Analytics 工作區。 工作流程可啟用策展視覺效果警示功能,即使透過此選擇性路徑抵達的計量也可啟用。 如需如何設定此雲端工作流程的詳細資料,請參閱透過 IoT 中樞路由計量

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

計量收集器模組

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

計量收集器模組會提供作為多架構 Docker 容器映像,支援 Linux X64、ARM32、ARM64 和 Windows X64 (版本 1809)。 可在 mcr.microsoft.com/azureiotedge-metrics-collector 公開取得。

計量收集器設定

所有計量收集器的設定是使用環境變數來完成。 在最低限度上,必須指定下表中附註且標記為必要的變數。

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

必要

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

可以是 AzureMonitorIoTMessage

不需要

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

僅當 UploadTargetAzureMonitor 時,才為必要

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

僅當 UploadTargetAzureMonitor 時,才為必要

預設值:none
ScrapeFrequencyInSecs 收集和傳輸計量的週期性時間間隔 (以秒為單位)。

範例:600

不需要

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

範例:http://edgeAgent:9600/metrics、http://edgeHub:9600/metrics、http://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 訊息。 這些訊息會以 UTF-8 編碼的 JSON,從端點 /messages/modules/<metrics collector module name>/outputs/metricOutput 發出。 例如,如果您的 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"
    }
}]

允許和不允許清單

AllowedMetricsBlockedMetrics 設定選項接受計量選取器的空白或逗號分隔清單。 計量會符合清單,且若符合清單中的一或多個計量,則會包含或排除計量。

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

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

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

計量名稱 (metricToSelect)。

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

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

  • 多個計量值可包含在大括弧中。 應以逗號將值分隔。
  • 如果選取器中至少所有標籤存在且也相符,則會比對計量。
  • 如同 PromQL,允許下列相符運算子。
    • = 符合標籤,與提供的字串 (區分大小寫) 完全相等。
    • != 符合標籤,與提供的字串不完全相等。
    • =~ 符合標籤,與提供的 RegEx 相符。 例如:label=~CPU|Mem|[0-9]*
    • !~ 符合標籤,不符合提供的 RegEx。
    • RegEx 完全錨點 (^$ 會自動新增至每個 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]。 多個選取器應用來建立 or-like 行為,而非 and-like 行為。

例如,若要允許含模組 module1 中任何標籤的自訂計量 mem,但僅允許來自 module2 且標籤為 agg=p99 的相同計量,則下列選擇器可新增至 AllowedMetrics

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

或者,若要允許任何標籤或端點的自訂計量 memcpu,將下列內容新增至 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 考量

計量收集器模組是以 .NET Core 進行撰寫。 因此,請使用與系統模組相同的指引來透過 Proxy 伺服器允許通訊

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

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

路由計量

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

若要在此案例中啟用監視,計量收集器模組可加以設定,透過 edgeHub 模組來以裝置到雲端 (D2C) 的訊息來傳送計量。 針對收集器設定中的 IoTMessage 設定 UploadTarget 環境變數,即可開啟功能。

提示

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

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

注意

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

範例雲端工作流程

雲端工作流程可將計量訊息從 IoT 傳輸傳送至 Log Analytics,將會提供作為 IoT Edge 記錄和監視範例的一部分。 範例可在現有雲端資源上部署,或者作為生產部署參考。

下一步

探索 Azure 監視器所允許策展視覺效果的類型。