教程:将 Azure 流分析作为 IoT Edge 模块进行部署

适用于:IoT Edge 1.4 checkmark IoT Edge 1.4

在本教程中,请在 Azure 门户中创建 Azure 流分析作业,然后将其部署为 IoT Edge 模块(无需额外的代码)。

你将学习如何执行以下操作:

  • 在 Edge 上创建 Azure 流分析作业用于处理数据。
  • 将新的 Azure 流分析作业与其他 IoT Edge 模块相连接。
  • 将 Azure 流分析作业从 Azure 门户部署到 IoT Edge 设备。

Diagram of stream architecture, showing the staging and deploying of an Azure Stream Analytics job.

本教程中的流分析模块在一个滚动的 30 秒时段内计算平均温度。 当平均温度达到 70 时,模块会发送一个警报,以便设备采取操作。 在这种情况下,该操作是重置模拟温度传感器。 在生产环境中,当温度达到危险级别时,可以使用此功能关闭机器或采取预防措施。

为什么在 IoT Edge 中使用 Azure 流分析?

许多 IoT 解决方案使用分析服务来了解从 IoT 设备到达云的数据。 使用 Azure IoT Edge 时,可以获取 Azure 流分析逻辑,将其转到设备中。 在边缘处理遥测流可以减少上传数据量,缩短对可操作见解进行响应的时间。 集成 Azure IoT Edge 和 Azure 流分析,以简化工作负载开发。

Azure 流分析提供一种丰富结构化的查询语法,可用于在云和 IoT Edge 设备上进行数据分析。 有关详细信息,请参阅 Azure 流分析文档

先决条件

如果没有 Azure 试用版订阅,请在开始前创建一个试用版订阅

  • Azure IoT Edge 设备。

    可以按照适用于 LinuxWindows 设备的快速入门中的步骤,将 Azure 虚拟机用作 IoT Edge 设备。

  • Azure 中的免费或标准层 IoT 中心

创建 Azure 流分析作业

在本部分,你将创建一个 Azure 流分析作业用于执行以下步骤:

  • 从 IoT Edge 设备接收数据。
  • 查询遥测数据中超出设置的范围的值。
  • 根据查询结果对 IoT Edge 设备采取措施。

创建存储帐户

创建可以在 IoT Edge 设备上运行的 Azure 流分析作业时,需采用特定的存储方式,以便能够从设备进行调用。 可以使用现有的 Azure 存储帐户,也可以现在就创建一个新的。

  1. 在 Azure 门户中,转到“创建资源”>“存储”>“存储帐户”。

  2. 提供以下值来创建存储帐户:

    字段
    订阅 选择与 IoT 中心相同的订阅。
    资源组 建议对 IoT Edge 快速入门和教程中的所有测试资源使用同一资源组。 例如,IoTEdgeResources
    名称 为存储帐户提供唯一的名称。
    位置 选择靠近你的位置。
  3. 将其他字段保留默认值,然后选择“查看 + 创建”。

  4. 查看设置,然后选择“创建”。

创建新作业

  1. Azure 门户中,选择:

    1. 创建资源
    2. 左侧菜单中的“物联网”
    3. 在搜索栏中键入“流分析”以在市场中找到它
    4. 选择“创建”,然后从下拉菜单中选择“流分析作业”

    Screenshot showing where to find the Stream Analytics job service in the Marketplace and where to create a new job.

  2. 提供以下值来创建新的流分析作业:

    字段
    名称 为作业提供一个名称。 例如,IoTEdgeJob
    订阅 选择与 IoT 中心相同的订阅。
    资源组 建议对在 IoT Edge 快速入门和教程中创建的所有测试资源使用同一资源组。 例如,名为 IoTEdgeResources 的资源。
    区域 选择靠近你的位置。
    宿主环境 选择“边缘”。 此选项意味着部署将转到 IoT Edge 设备,而不是托管在云中。
  3. 选择“查看 + 创建”。

  4. 确认选项,然后选择“创建”。

配置作业

在 Azure 门户中创建流分析作业以后,即可配置其输入、输出以及要对传递的数据运行的查询。

本部分创建一个用于从 IoT Edge 设备接收温度数据的作业。 它在一个滚动的 30 秒时段中分析该数据。 如果该时段中的平均温度超出 70 度,则会向 IoT Edge 设备发送警报。

注意

在下一节配置 IoT Edge 设置中部署作业时,需指定数据的具体来源和目标。

设置输入和输出

  1. 导航到 Azure 门户中的流分析作业。

  2. 在“作业拓扑”下选择“输入”,然后选择“添加输入”。

    Screenshot showing where to add stream input in the Azure portal.

  3. 从下拉列表中选择“边缘中心”。

    如果在列表中看不到“Edge 中心”选项,则你可能已将流分析作业创建为云托管的作业。 请尝试创建新作业,并确保选择“Edge”作为宿主环境。

  4. 在“新建输入”窗格中,输入 temperature 作为输入别名。

  5. 将其他字段保留默认值,然后选择“保存”。

  6. 在“作业拓扑”下打开“输出”,然后选择“添加”。

    Screenshot showing where to add stream output in the Azure portal.

  7. 从下拉列表中选择“边缘中心”。

  8. 在“新建输出”窗格中,输入 alert 作为输出别名。

  9. 将其他字段保留默认值,然后选择“保存”。

创建查询

  1. 在“作业拓扑”下选择“查询”。

  2. 将默认文本替换为以下查询。

    SELECT  
        'reset' AS command
    INTO
       alert
    FROM
       temperature TIMESTAMP BY timeCreated
    GROUP BY TumblingWindow(second,30)
    HAVING Avg(machine.temperature) > 70
    

    如在此查询中,如果计算机的平均温度在 30 秒的时段内达到 70 度,SQL 代码会向警报输出发送重置命令。 重置命令已作为可执行的操作预先编程到传感器中。

  3. 选择“保存查询”。

配置 IoT Edge 设置

若要准备需部署到 IoT Edge 设备的流分析作业,需将 Azure 流分析作业与存储帐户关联起来。 部署作业时,作业定义将以容器的形式导出到存储帐户中。

  1. 在流分析服务中的“设置”菜单下,选择“存储帐户设置”。

  2. 选择“从订阅中选择 Blob 存储/ADLS Gen 2”选项。

  3. Azure 存储帐户会自动显示在页面上。 如果未看到,请确保创建存储。 或者,如需选择与“存储帐户”字段中所列存储不同的存储,请从下拉菜单中选择它。

  4. 如果必须进行任何更改,请选择“保存”。

    Screenshot of where to add a storage account in your Stream Analytics job in the Azure portal.

部署作业

现已准备好在 IoT Edge 设备上部署 Azure 流分析作业。

在本部分,请使用 Azure 门户中的设置模块向导来创建部署清单。 部署清单是一个 JSON 文件,该文件描述将要部署到设备的所有模块。 该清单还显示存储模块映像的容器注册表、模块的管理方式,以及模块的相互通信方式。 IoT Edge 设备从 IoT 中心检索其部署清单,任何使用其中的信息来部署和配置所有已分配的模块。

就本教程来说,请部署两个模块。 第一个模块是 SimulatedTemperatureSensor:一个模拟温度和湿度传感器的模块。 第二个是流分析作业。 传感器模块提供了作业查询将要分析的数据流。

  1. 在 Azure 门户中导航到 IoT 中心。

  2. 在“设备管理”菜单下选择“设备”,然后选择 IoT Edge 设备将其打开。

  3. 选择“设置模块”。

  4. 如果以前在此设备上部署了 SimulatedTemperatureSensor 模块,则它可以自动填充数据。 否则,请通过以下步骤来添加模块:

    1. 选择“+ 添加”,然后选择“IoT Edge 模块”。
    2. 对于名称,请键入 SimulatedTemperatureSensor
    3. 对于映像 URI,输入 mcr.microsoft.com/azureiotedge-simulated-temperature-sensor:1.4。
    4. 保留其他默认设置,然后选择“添加”。
  5. 通过以下步骤添加 Azure 流分析 Edge 作业:

    1. 依次选择“+ 添加”、“Azure 流分析模块”。
    2. 选择创建的订阅和 Azure 流分析 Edge 作业。
    3. 选择“保存”。

    保存更改后,流分析作业的详细信息将发布到创建的存储容器。

  6. 在流分析添加完成部署后,确认两个新模块显示在“设置模块”页上。

    Screenshot confirming that two new modules are on your device. The screenshot also shows where the Review + create button is located.

  7. 选择“查看 + 创建”。 此时会显示部署清单。

  8. 选择“创建”。

  9. 几分钟后,在设备的“设置模块”页上,应会看到列出的正在运行的模块。 如果看不到模块,请刷新页面,或者再等待几分钟,然后再次刷新。

    Screenshot that shows your modules list of your device in the Azure portal.

了解两个新模块

  1. 从设备的“设置模块”选项卡中,选择流分析模块名称,以转到“更新 IoT Edge 模块”页。 可在此处更新设置。

    “设置”选项卡具有指向标准 Azure 流分析映像的“映像 URI”。 这一映像用于每个部署到 IoT Edge 设备的流分析模块。

    “模块孪生设置”选项卡显示用于定义 Azure 流分析 (ASA) 属性(称为 ASAJobInfo)的 JSON。 该属性的值指向存储容器中的作业定义。 此属性说明如何根据特定的作业详细信息配置流分析映像。

    默认情况下,流分析模块名称与它基于的作业的名称相同。 如果需要,可在此页上更改模块名称,但不必要这样做。

  2. 如果进行了更改,请选择“应用”;如果未进行任何更改,请选择“取消”。

将路由分配给模块

  1. 在“在设备:<your-device-name> 上设置模块”页上,选择“下一步: 路由”。

  2. 在“路由”选项卡中,定义消息在模块和 IoT 中心之间传递的方式。 消息使用名称/值对构造。

    使用下表所示的对添加路由名称和值。 将 {moduleName} 的实例替换为 Azure 流分析模块的名称。 此模块的名称应与你在“设置模块”页上的设备模块列表中看到的名称相同,如 Azure 门户中所示。

    Screenshot showing the name of your Stream Analytics modules in your I o T Edge device in the Azure portal.

    名称
    telemetryToCloud FROM /messages/modules/SimulatedTemperatureSensor/* INTO $upstream
    alertsToCloud FROM /messages/modules/{moduleName}/* INTO $upstream
    alertsToReset FROM /messages/modules/{moduleName}/* INTO BrokeredEndpoint("/modules/SimulatedTemperatureSensor/inputs/control")
    telemetryToAsa FROM /messages/modules/SimulatedTemperatureSensor/* INTO BrokeredEndpoint("/modules/{moduleName}/inputs/temperature")

    在此处声明的路由定义流经 IoT Edge 设备的数据流。 来自 SimulatedTemperatureSensor 的遥测数据先发送到 IoT 中心,然后发送到在流分析作业中配置的“温度”输入。 警报输出消息先发送到 IoT 中心,然后发送到 SimulatedTemperatureSensor 模块以触发重置命令。

  3. 在完成时选择“下一步:查看 + 创建”。

  4. 在“查看 + 创建”选项卡中,可以查看在向导中提供的信息如何转换为 JSON 部署清单。

  5. 查看完清单后,选择“创建”以完成模块设置。

查看数据

现在可以转到 IoT Edge 设备,查看 Azure 流分析模块与 SimulatedTemperatureSensor 模块之间的交互。

注意

如果对设备使用虚拟机,则可以使用 Azure 本地 Shell 直接访问所有经过 Azure 身份验证的服务。

  1. 检查所有模块是否在 Docker 中运行:

    iotedge list  
    
  2. 查看所有系统日志和指标数据。 将 {moduleName} 替换为 Azure 流分析模块的名称:

    iotedge logs -f {moduleName}  
    
  3. 通过查看传感器日志,了解重置命令如何影响模拟温度传感器:

    iotedge logs SimulatedTemperatureSensor
    

    可以看到,机器温度逐渐升高,在 30 秒内达到了 70 度。 然后,流分析模块触发重置,机器温度下降到 21 度。

    Screenshot that shows the reset command in your output from your module logs.

清理资源

如果打算继续学习下一篇建议的文章,可以保留已创建的资源和配置,以便重复使用。 还可以继续使用相同的 IoT Edge 设备作为测试设备。

否则,可以删除本文中使用的本地配置和 Azure 资源,以免产生费用。

删除 Azure 资源

删除 Azure 资源和资源组的操作不可逆。 请确保不要意外删除错误的资源组或资源。 如果在现有的包含要保留资源的资源组中创建了 IoT 中心,请只删除 IoT 中心资源本身,而不要删除资源组。

若要删除资源,请执行以下操作:

  1. 登录到 Azure 门户,然后选择“资源组”。

  2. 选择包含 IoT Edge 测试资源的资源组的名称。

  3. 查看资源组中所包含资源的列表。 若要删除这一切,可以选择“删除资源组”。 如果只需删除部分内容,可以单击要单独删除的每个资源。

后续步骤

本教程介绍了如何配置 Azure 流分析作业来分析 IoT Edge 设备中的数据, 然后介绍了如何将此 Azure 流分析模块加载到 IoT Edge 设备,以便处理并响应本地出现的温度增高情况,并将聚合的数据流发送到云。 若要了解 Azure IoT Edge 如何为企业创建更多解决方案,请继续学习其他教程。