添加自定义指标

适用于: yes icon IoT Edge 1.1 yes icon IoT Edge 1.2

除了系统模块提供的内置指标之外,还从 IoT Edge 模块收集自定义指标。 通过内置指标,可以基本了解部署运行状况。 但若要全面了解运行状况,可能需要来自自定义模块的额外信息。 可以使用相应的 Prometheus 客户端库将自定义模块集成到监视解决方案中,从而发出指标。 此额外信息可以实现专门针对你的要求的新视图或警报。

示例模块存储库

请参阅 azure-samples 存储库,了解用于发出指标的自定义模块示例。 即使你选择的语言的示例尚未提供,一般方法也可能会对你有所帮助。

命名约定

如需一般性指导,请参阅 Prometheus 文档中的最佳做法。 以下其他建议可能对 IoT Edge 场景有所帮助。

  • 在指标名称的开头包含模块名称,以确定哪个模块发出了指标。

  • 在每个指标中以标签(也称为标记/维度)形式添加 IoT 中心名称或 IoT Central 应用程序名称、IoT Edge 设备 ID 和模块 ID 。 此信息可用作 IoT Edge 代理启动的每个模块的环境变量。 示例存储库中的示例演示了该方法。 如果没有此上下文,则不可能将给定的指标值与特定设备相关联。

  • 在标签中包含实例 ID。 实例 ID 可以是任何唯一 ID,例如在模块启动过程中生成的 GUID。 在后端处理模块的指标时,实例 ID 信息可以帮助协调模块重启。

配置指标收集器以收集自定义指标

自定义模块发出指标后,下一步是配置 metrics-collector 模块以收集和传输自定义指标。

必须更新环境变量 MetricsEndpointsCSV 以包含自定义模块的指标终结点的 URL。 更新环境变量时,请确保包含系统模块终结点。

注意

默认情况下,自定义模块的指标终结点如果要允许指标收集器访问它,不需要映射到主机端口。 除非明确替换,否则在 Linux 上,这两个模块都在名为 azure-iot-edg 的用户定义的 Docker 桥接网络上启动。

用户定义的 Docker 网络包含一个默认的 DNS 解析程序,支持使用模块(容器)名称进行模块间通信。 例如,如果名为 module1 的自定义模块在路径 /metrics 下的 http 端口 9600 上发出指标,则收集器应配置为从终结点 http://module1:9600/metrics 收集。

在 IoT Edge 设备上运行以下命令以测试路径 /metrics 下的 http 端口 9600 上的自定义模块发出的指标是否可访问:

sudo docker exec replace-with-metrics-collector-module-name curl http://replace-with-custom-module-name:9600/metrics

添加自定义可视化效果

在 Log Analytics 中收到自定义指标后,可以创建自定义可视化效果和警报。 可以扩充监视工作簿以添加查询支持的可视化效果。

每个指标都与 IoT 中心或 IoT Central 应用程序的资源 ID 相关联。 因此,可以检查自定义指标是否从关联的 IoT 中心或 IoT Central 应用程序的“日志”页(而不是支持的 Log Analytics 工作区)正确引入。 使用这个基本的 KQL 查询来验证:

InsightsMetrics
| where Name == 'replace-with-custom-metric-name'

确认引入后,可以创建新工作簿或扩充现有工作簿。 使用工作簿文档和精选 IoT Edge 工作簿中的查询作为指导。

如果对结果感到满意,可以与你的团队共享工作簿以编程方式将工作簿部署为组织资源部署的一部分。

后续步骤

浏览精选工作簿的其他指标可视化选项。