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

适用于:IoT Edge 1.5 复选标记 IoT Edge 1.5

重要

IoT Edge 1.5 LTS 是 受支持的版本。 IoT Edge 1.4 LTS 的生命周期结束日期为 2024 年 11 月 12 日。 如果使用的是早期版本,请参阅 更新 IoT Edge

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

本教程中,您将学习如何:

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

展示流式架构的关系图,包括 Azure 流分析作业的暂存与部署过程。

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

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

许多 IoT 解决方案使用分析服务来了解从 IoT 设备到达云的数据。 使用 Azure IoT Edge,可将 Azure 流分析 逻辑移动到设备本身。 在边缘处理遥测流可以减少上传的数据量,并缩短对可操作见解做出反应所需的时间。 Azure IoT Edge 和 Azure 流分析集成以简化工作负荷开发。

Azure 流分析使用结构化查询语法在云和 IoT Edge 设备上进行分析。 有关详细信息,请参阅 Azure 流分析文档

先决条件

如果没有 Azure 帐户,请在开始前创建一个免费帐户

创建 Azure 流分析作业

在本部分中,将创建一个 Azure 流分析作业,该作业:

  • 从 IoT Edge 设备接收数据。
  • 查询遥测数据中超出设定范围的值。
  • 根据查询结果对 IoT Edge 设备执行操作。

创建存储帐户

创建可在 IoT Edge 设备上运行的 Azure 流分析作业时,需要存储它,以便设备可以访问它。 可以使用现有的 Azure 存储帐户或创建新帐户。

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

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

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

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

创建新作业

  1. Azure 门户中,选择:

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

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

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

配置作业

在 Azure 门户中创建流分析作业后,使用 输入输出查询 对其进行配置,以便对通过的数据运行。

本部分介绍如何创建从 IoT Edge 设备接收温度数据的作业。 它分析滚动 30 秒窗口中的数据。 如果该窗口中的平均温度超过 70 度,作业将向 IoT Edge 设备发送警报。

注意

在部署作业时,您需要在下一部分 配置 IoT Edge 设置 中指定数据的来源和去向。

设置输入和输出

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

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

  3. 从下拉列表中选择 Edge 中心

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

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

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

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

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

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

  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. 如果进行了任何更改,请选择“保存”。

部署作业

现已准备好在 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.5。
    4. 保留其他默认设置,然后选择“添加”。
  5. 通过以下步骤添加 Azure 流分析 Edge 作业:

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

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

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

    确认设备上有两个新模块的屏幕截图。屏幕截图还显示了“查看 + 创建”按钮所在的位置。

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

  8. 选择“创建”。

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

了解两个新模块

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

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

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

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

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

将路由分配给模块

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

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

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

    显示 Azure 门户中 IoT Edge 设备中流分析模块的名称的屏幕截图。

    名称
    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 Cloud Shell 直接访问所有 Azure 身份验证的服务。

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

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

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

    iotedge logs SimulatedTemperatureSensor
    

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

    模块日志输出中重置命令的屏幕截图。

清理资源

若要继续阅读下一篇建议的文章,请保留创建的资源和配置并重复使用它们。 还可以继续使用相同的 IoT Edge 设备作为测试设备。

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

删除 Azure 资源

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

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

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

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

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

后续步骤

在本教程中,将设置 Azure 流分析作业以分析 IoT Edge 设备中的数据。 你已将 Azure 流分析模块加载到 IoT Edge 设备上,以处理和响应本地温度增加,并将聚合数据流发送到云。 若要了解 Azure IoT Edge 如何帮助你构建更多解决方案,请尝试下一教程。