Azure IoT Edge - 如何在离线时进行本地诊断?

Azure IoT Edge - How to diagnose locally while offline?

我们正在尝试创建一个简单的本地 UI(Windows 10 边缘框上的独立桌面应用程序 运行),用于在我们的 IoT Edge 上显示整体健康状况和诊断指标设备。 UI 必须可见 if/when 设备没有连接到互联网(离线)。我们想要显示模块列表、它们的状态、上次连接时间等。所有这些信息都可以在模块孪生中获得,但我看不到任何在本地离线访问模块孪生的方法。是否没有这些双胞胎的 local/shadow 副本,或任何 api 来查询每个模块的报告属性? 我们对 edgeHub 和 edgeAgent 模块特别感兴趣,因为它们包含有关所有其他模块的信息,但我没有看到任何 API 来查询这些模块,除了 shell 命令,iotedge listiotedge logs edgeAgent、等等

唯一的解决方案似乎是以编程方式执行那些 shell 命令并从 StandardOutput 中抓取结果输出。看来应该有更好的办法。

如果我想在 IoT Edge 进程之外访问模块孪生并且在离线时,我可能会 mount a volume to the module 并将报告的属性保存在 JSON 文件中。这样您的本地 UI 就可以访问主机上的文件。当然,这确实意味着模块的双胞胎现在在您的主机上处于可读的未加密状态。

更复杂的情况是在每个模块上公开一个 HTTP 端点以访问最后已知的值。您需要指定一个端口以在每个模块上打开才能使其工作。你可以在部署中打开一个端口 json:

"createOptions": {
    "ExposedPorts": {
        "80/tcp": {}
    }
}

此外,考虑利用 1.0.10 版本中系统模块的新 built-in 指标。这是一个实验,可帮助您使用发布候选位设置 end-to-end: https://labs.iotedge.dev/codelabs/monitor-iotedge