收集及傳輸計量
適用于: 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)
架構
注意 | 描述 |
---|---|
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 中樞的 [屬性 ] 頁面中找到資源識別碼 。
或者,您可以使用 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"
}
}]
允許和不允許清單
和 BlockedMetrics
組 AllowedMetrics
態選項會採用空格或逗號分隔的計量選取器清單。 如果計量符合任一清單中的一或多個計量,則會包含或排除該計量。
計量選取器會使用類似 PromQL 查詢語言子 集的格式。
metricToSelect{quantile=0.5,otherLabel=~Re[ge]*|x}[http://VeryNoisyModule:9001/metrics]
計量選取器包含三個部分:
計量名稱 ( metricToSelect
)。
- 萬用字元
*
(任何字元) 和?
(任何單一字元) 可用於計量名稱。 例如,*CPU
會比對maxCPU
和 ,minCPU
但不符合CPUMaximum
。???CPU
會比對 ,minCPU
但不會maximumCPU
比maxCPU
對 。 - 計量選取器中需要此元件。
以標籤為基礎的選取器 ( {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
,可以將下列選取器新增至 AllowedMetrics
: module1
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) 訊息。 將收集器 組態中的環境變數設定 UploadTarget
為 IoTMessage
,即可開啟此功能。
提示
請記得新增 edgeHub 路由,以將計量訊息從收集器模組傳遞至IoT 中樞。 看起來像 FROM /messages/modules/replace-with-collector-module-name/* INTO $upstream
。
此選項需要額外的設定雲端工作流程,才能將抵達IoT 中樞的計量訊息傳遞給 Log Analytics 工作區。 若未設定此設定,整合的其他部分,例如 策劃的視覺效果 和 警示 將無法運作。
注意
請留意此選項的額外成本。 計量訊息會計入您的IoT 中樞訊息配額。 您也將需支付 Log Analytics 擷取和雲端工作流程資源的費用。
範例雲端工作流程
將計量訊息從 IoT 中樞 傳遞至 Log Analytics 的 雲端工作流程可在 IoT Edge 記錄和監視範例 中取得。 此範例可以部署到現有的雲端資源,或做為生產部署參考。
下一步
探索 Azure 監視器啟用的 策劃視覺效果 類型。