适用于:
IoT Edge 1.6
Important
IoT Edge 1.6 LTS 是支持的版本。 IoT Edge 1.5 LTS 支持将于 2026 年 11 月 10 日结束;IoT Edge 1.4 LTS 于 2024 年 11 月 12 日结束了支持期。 如果使用的是早期版本,请参阅 Update IoT Edge。
可以使用 Azure Monitor 和内置指标集成来远程监视您的 IoT Edge 设备群组。 若要在设备上启用此功能,请将指标收集器模块添加到部署中,并将其配置为收集模块指标并传输到 Azure Monitor。
Metrics Collector 2.0 通过使用 DCR 和 Microsoft Entra 认证,直接将数据上传到 Log Analytics 自定义表。 若要从工作区密钥身份验证迁移,请参阅 迁移指标收集器。
若要在 IoT Edge 设备上配置监视,请遵循 有关监视 IoT Edge 设备的教程。 你将了解如何将指标收集器模块添加到设备。 本文概述了监视体系结构,并介绍了在设备上配置指标的选项。
Architecture
| 注意 | Description |
|---|---|
| 1 | 所有模块都必须使用 Prometheus 数据模型发出指标。 虽然 内置指标 默认可实现对工作负载的广泛可见性,但自定义模块还可以生成场景特定指标来增强监控解决方案。 了解如何在 “添加自定义指标 ”一文中使用开源库检测自定义模块。 |
| 2️ | 指标收集器模块是 Microsoft 提供的 IoT Edge 模块,用于收集工作负荷模块指标并将其传输到设备外。 指标收集采用拉取模型。 可以配置收集频率、终结点和筛选器来控制从模块传出的数据。 有关详细信息,请参阅本文中的 “指标收集器配置 ”部分。 |
| 3️ | 选项1将指标直接发送到Log Analytics自定义表。1 配置DCR和Microsoft Entra身份。 |
| 4️ |
ResourceId 识别物联网枢纽。 收集者将该值存储在普通 ResourceId值中。 工作簿会查询工作区,并筛选该列以查找目标资源。 |
| 5️ |
选项 2 将指标发送到 IoT 中心。1 可以将收集器模块配置为通过模块将收集的指标作为 UTF-8 编码的 JSON edgeHub发送。 此方法会解除对锁定 IoT Edge 设备(此类设备只能对 IoT 中心终结点进行外部访问)的监视。 其还允许监视嵌套配置中的 IoT Edge 子设备,其中子设备只能访问其父设备。 |
| 6️ | 若要通过 IoT 中心路由指标,则需要设置一个(一次性)云工作流。 该工作流将处理来自指标收集器模块的消息,并将这些消息发送到 Log Analytics 工作区。 即使是通过此可选路径收到的指标,该工作流也能使用特选可视化和警报功能。 有关如何设置此云工作流的详细信息,请参阅本文中的 “路由指标 ”部分。 |
1 目前,使用方法 1直接将指标从 IoT Edge 设备传输到 Log Analytics 所需的设置步骤最少,因此操作也更简单。 除非特定方案要求使用 option 2 方法,否则首选第一个选项,以便IoT Edge设备仅与IoT 中心通信。
指标收集器模块
可以将Microsoft提供的指标收集器模块添加到 IoT Edge 部署,以收集模块指标并将其发送到 Azure Monitor。 模块代码是开源的,可在 IoT Edge GitHub 存储库中使用。
使用图像 mcr.microsoft.com/azureiotedge-metrics-collector:2.0.0。 有关可用的图像标签和架构,请参见 Microsoft 工件注册表。
传输选项
UploadTarget |
目标 | Requirements |
|---|---|---|
AzureMonitor(默认值) |
Log Analytics 自定义表 | DCR、HTTPS 摄取端点、自定义表和 Microsoft Entra 身份。 |
IotMessage |
通过 edgeHub 连接 IoT 中心 或 IoT Central | 用于 metricOutput 的 edgeHub 路由。 转发到 Log Analytics 需要单独的云工作流程。 |
升级不会迁移现有历史记录、保存的工作簿或警报规则。 要升级,请参见 “迁移指标收集器”。
指标收集器配置
通过使用环境变量配置 Metrics Collector 2.0。 至少,请指定表中标记为 “必需 ”的变量。
| 环境变量名称 | Description |
|---|---|
ResourceId |
与设备通信的 IoT 中心的资源 ID。 有关详细信息,请参阅 资源 ID。 必需 默认值:none |
UploadTarget |
控制是直接通过 HTTPS 将指标发送到 Azure Monitor,还是将指标作为 D2C 消息发送到 IoT 中心。 有关详细信息,请参阅 上传目标。 可以是 AzureMonitor 或 IoTMessage 不需要 默认值:AzureMonitor |
DataCollectionEndpoint |
来自 DCR 或 DCE 的 HTTPS 日志引入基终结点。 AzureMonitor 必需。 默认值:none |
DataCollectionRuleId |
DCR不可变ID,开头为 dcr-,不是其名称或ARM ID。
AzureMonitor 必需。 默认值:none |
DataCollectionStreamName |
精确的DCR输入流名称,而非目标表名称。 AzureMonitor 必需。 默认值:none |
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”}[http://MetricsSpewer:9417/metrics] 不需要 默认值:empty |
BlockedMetrics |
要忽略的指标列表。 重写 AllowedMetrics,以避免报告包含在两个列表中的同一指标。 有关详细信息,请参阅 “允许”和“阻止”列表。 示例: metricToIgnore{quantile=“0.5”}[http://VeryNoisyModule:9001/metrics], docker_container_disk_write_bytes 不需要 默认值:empty |
CompressForUpload |
控制 IotMessage 的压缩。 日志摄取 SDK 自行管理直接上传的压缩。 示例:true 不需要 默认值:true |
AzureDomain |
选择认证权威和摄取对象: azure.com、 azure.us、或 azure.cn (azure.com.cn 也接受)。 摄取端点必须与该云匹配。 示例:azure.us 不需要 默认值:azure.com |
ScrapeFrequencyInSecs 必须至少为 1。
TransformForIoTCentral 默认为 false ,且仅 IotMessage适用于。
IotHubConnectFrequency 默认为 1 天(1.00:00:00)。
对于 AzureMonitor,端点必须与所选云匹配。
LogAnalyticsWorkspaceId 并且 LogAnalyticsSharedKey 不被Metrics Collector 2.0使用。
认证与表配置
使用 配置认证 来选择证书、管理身份或联邦身份。 该标识需要在 DCR 上具有 Monitoring Metrics Publisher 权限。
收集器按顺序尝试环境凭证、工作负载身份和托管身份。 它不使用主机上的开发者登录功能。
对这七个输入流和表列,使用 配置收集器架构。 策划工作簿默认为 IoTEdgeMetrics_CL,包含数字 Value、JSON字符串 Tags和普通 ResourceId。 对于另一个具有相同模式的表格,设置工作簿的 MetricsTableName 参数。
关于通用表、DCR、端点和权限设置,请使用 日志导入门户教程。
资源标识符 (ID)
指标收集器模块需要 IoT Edge 设备所属的 IoT 中心的 Azure 资源管理器 ID。 将该 ID 作为 ResourceId 环境变量的值输入。 收藏员将其存放在普通 ResourceId 柱中,保留其弹壳。 查询工作区,并将 tolower() 应用于已存储和已选定的 ID,然后进行匹配。 本指南使用了资源匹配和查询范围中描述的直通模式。
资源 ID 使用以下格式: /subscriptions/<subscription id>/resourceGroups/<resource group name>/providers/Microsoft.Devices/IoTHubs/<iot hub name> 可以在 Azure 门户中 IoT 中心的 Properties 页中找到资源 ID。
或者,可以使用 az resource show 命令获取 ID:
az resource show -g <resource group> -n <hub name> --resource-type "Microsoft.Devices/IoTHubs"
上传目标
“UploadTarget”配置选项用于控制是将指标直接发送到 Azure Monitor 还是 IoT 中心。
如果你把 UploadTarget 设置为 IotMessage,模块会将你的指标作为物联网消息发布。 终结点 /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": 1.0,
"Labels": {
"<label name>": "<label value>"
}
}, {
"TimeGeneratedUtc": "2020-07-28T20:00:43.2770247Z",
"Name": "docker_container_disk_write_bytes",
"Value": 0.0,
"Labels": {
"name": "AzureMonitorForIotEdgeModule"
}
}]
允许列表和阻止列表
和AllowedMetricsBlockedMetrics配置选项接受以空格或逗号分隔的指标选择器列表。 如果指标与列表中的一个或多个指标匹配,则该指标将与相应列表匹配,并纳入列表或从列表中排除。
指标选择器使用的格式类似于 PromQL 查询语言的子集。
metricToSelect{quantile="0.5",otherLabel=~"(Re[ge]*|x)"}[http://VeryNoisyModule:9001/metrics]
指标选择器由三部分构成:
指标名称 (metricToSelect)。
- 可以在指标名称中使用通配符
*(任意字符)和?(任意单个字符)。 例如,*CPU匹配maxCPU和minCPU,但不匹配CPUMaximum。???CPU匹配maxCPU和minCPU,但不匹配maximumCPU。 - 指标选择器必需包含此组件。
基于标签的选择器 ({quantile="0.5",otherLabel=~"(Re[ge]*|x)"})。
- 在大括号中包含多个指标值。 用逗号分隔标签表达式,并用双引号包住每个值。
- 如果选择器中的所有标签至少都存在并匹配,则认为匹配指标。
- 与 PromQL 一样,允许使用以下匹配运算符。
-
=匹配与所提供字符串完全相等的标签(区分大小写)。 -
!=匹配标签不完全等于所提供的字符串。 -
=~匹配与所提供正则表达式对应的标签。 例如,label=~"(CPU|Mem|[0-9]*)" -
!~匹配不符合所提供正则表达式的标签。 - 收集器会将
^和$添加到正则表达式中。 括号内将备选方案分组,以匹配整个价值。 - 此组件在指标选择器中是可选的。
-
终结点选择器 ([http://VeryNoisyModule:9001/metrics])。
- 此 URL 应与
MetricsEndpointsCSV中列出的 URL 完全匹配。 - 此组件在指标选择器中是可选的。
指标必须与给定待选选择器的所有部分匹配。 它必须与名称匹配,并且具有相同的标签以及匹配的值,并且来自给定的终结点。 例如, mem{quantile="0.5",otherLabel="foobar"}[http://VeryNoisyModule:9001/metrics] 与选择器 mem{quantile="0.5",otherLabel=~"foo"}[http://VeryNoisyModule:9001/metrics]不匹配。 使用多个选择器创建类似 OR 的行为,而不是类似 AND 的行为。
例如,若要允许模块mem中的自定义指标module1与任何标签,但仅允许模块module2中的相同指标与标签agg=p99,请将以下选择器添加到AllowedMetrics。
mem{}[http://module1:9001/metrics] mem{agg="p99"}[http://module2:9001/metrics]
或者,要允许适用于任意标签或终结点的自定义指标 mem 和 cpu,可以将以下内容添加到 AllowedMetrics:
mem cpu
在受限网络访问场景中启用
对于直接上传,允许对配置好的日志摄取端点进行出站 HTTPS 访问。 允许使用身份验证方法所需的身份端点。
有关 DCR、DCE 和专用网络要求,请参阅Azure Monitor 端点指南。 遗留工作区 ods.opinsights 和 oms.opinsights 端点并不能取代这些需求。
代理注意事项
指标收集器模块的编写平台为 .NET Core。 使用与系统模块相同的指南来 允许通过代理服务器进行通信。
本地模块的指标收集使用 http 协议。 通过设置 NO_PROXY 环境变量,排除通过代理服务器进行的本地通信。 将 NO_PROXY 值设置为应排除的主机名列表(以英文逗号分隔)。 使用模块名称作为主机名。 例如:edgeHub,edgeAgent,myCustomModule。
路由指标
有时需要通过 IoT 中心引入指标,而不是将其直接发送到 Log Analytics。 例如,监视嵌套配置中的 IoT Edge 设备时(其中子设备只能访问其父设备的 IoT Edge 中心)。 另一个示例是仅将具有出站网络访问权限的 IoT Edge 设备部署到 IoT 中心。
若要在此方案中启用监视,请将指标收集器模块配置为通过 edgeHub 模块将指标作为设备到云(D2C)消息发送。 通过在收集器UploadTarget中将环境变量设置为IotMessage启用该功能。
Tip
请记住添加 edgeHub 路由,以将指标消息从收集器模块传递到 IoT 中心。 路线如下所示 FROM /messages/modules/replace-with-collector-module-name/* INTO $upstream。
此选项需要额外的设置(云工作流设置)才能将到达 IoT 中心的指标消息传递到 Log Analytics 工作区。 如果没有此设置,集成的其他部分(如 特选可视化效果 和 警报 )不起作用。
注意
请注意此选项的额外费用。 指标消息会影响到您的 IoT 中心 消息配额。 还需为 Log Analytics 引入和云工作流资源付费。
后续步骤
了解Azure Monitor提供的精心挑选的可视化效果类型。