教程:通过 IoT 中心设置和使用指标和日志

使用 Azure Monitor 为 IoT 中心收集指标和日志,来监视解决方案的操作,并在问题发生时进行故障排除。 在本教程中,你将了解如何基于指标创建图表,如何创建触发指标的警报,如何将 IoT 中心操作和错误发送到 Azure Monitor 日志,以及如何检查日志以发现错误。

本教程使用 .NET Send 遥测快速入门中的 Azure 示例,将消息发送到 IoT 中心。 你可以始终使用设备或其他示例来发送消息,但可能需要相应地修改一些步骤。

在开始本教程之前,熟悉 Azure Monitor 概念可能会有所帮助。 有关详细信息,请参阅监视 IoT 中心。 若要了解 IoT 中心发出的指标和资源日志的详细信息,请参阅监视数据参考

将在本教程中执行以下任务:

  • 使用 Azure CLI 创建 IoT 中心,注册模拟设备,并创建 Log Analytics 工作区。
  • 将 IoT 中心连接和设备遥测资源日志发送到 Log Analytics 工作区中的 Azure Monitor 日志。
  • 使用指标资源管理器根据选定的指标创建图表,并将其固定到仪表板。
  • 创建指标警报,使你可在重要条件满足时得到电子邮件通知。
  • 下载并运行一个应用,该应用模拟 IoT 设备将消息发送到 IoT 中心的情形。
  • 在你的条件满足时,查看警报。
  • 查看仪表板上的指标图表。
  • 查看 Azure Monitor 日志中的 IoT 中心错误和操作。

先决条件

  • Azure 订阅。 如果没有 Azure 订阅,可在开始前创建一个试用帐户

  • 在开发计算机上具有 .NET Core SDK 2.1 或更高版本。 可以从 .NET 为多个平台下载 .NET Core SDK。

    可以使用以下命令验证开发计算机上 C# 的当前版本:

    dotnet --version
    
  • 一个能够接收邮件的电子邮件帐户。

  • 确保已在防火墙中打开端口 8883。 本教程中的设备示例使用 MQTT 协议,该协议通过端口 8883 进行通信。 在某些公司和教育网络环境中,此端口可能被阻止。 有关解决此问题的更多信息和方法,请参阅连接到 IoT 中心(MQTT)

可以使用本地 Azure CLI。

  • 如果需要,请安装 Azure CLI 来运行 CLI 参考命令。

  • 本地 Azure CLI,请了解如何安装 Azure CLI。 如果在 Windows 或 macOS 上运行,请考虑在 Docker 容器中运行 Azure CLI。 有关详细信息,请参阅如何在 Docker 容器中运行 Azure CLI

    • 通过使用 az login 命令登录到 Azure CLI。 若要完成身份验证过程,请遵循终端中显示的步骤。 有关其他登录选项,请参阅使用 Azure CLI 登录

    • 出现提示时,请在首次使用时安装 Azure CLI 扩展。 有关扩展详细信息,请参阅使用 Azure CLI 的扩展

    • 运行 az version 以查找安装的版本和依赖库。 若要升级到最新版本,请运行 az upgrade

设置资源

若要完成本教程,需要 IoT 中心、Log Analytics 工作区和模拟 IoT 设备。 这些资源可以通过 Azure 门户、Azure CLI 或 PowerShell 创建。 为所有资源使用相同的资源组和位置。 完成教程后,可以通过删除资源组一步删除所有内容。

在本教程中,我们提供了执行以下步骤的 CLI 脚本:

  1. 创建资源组

  2. 创建 IoT 中心。

  3. 创建 Log Analytics 工作区。

  4. 为发送消息到 IoT 中心的模拟设备注册设备标识。 保存要用于配置模拟设备的设备连接字符串。

使用 Azure CLI 设置资源

将以下命令复制并粘贴到安装了 Azure CLI 的本地命令行实例中。 执行某些命令可能需要一些时间。 新资源在资源组 ContosoResources 中创建。

某些资源的名称在整个 Azure 中必须是唯一的。 脚本使用 $RANDOM 函数生成一个随机值,并将其存储在变量中。 对于这些资源,脚本将此随机值追加到资源的基名称,使资源名称唯一。

设置不需要全局唯一的资源名称的值。

location=chinaeast
resourceGroup=ContosoResources
iotDeviceName=Contoso-Test-Device

设置必须唯一的资源名称的值。 这些名称有一个连接到末尾的随机数。

randomValue=$RANDOM
iotHubName=ContosoTestHub$randomValue
echo "IoT hub name = " $iotHubName
workspaceName=contoso-la-workspace$randomValue
echo "Log Analytics workspace name = " $workspaceName

创建用于本教程所有资源的资源组。

az group create --name $resourceGroup --location $location

在免费层中创建 IoT 中心。 每个订阅仅能有一个免费 IoT 中心。 如果已有免费中心,请将 --sku 值更改为 B1(基本)或 S1(标准)。

az iot hub create --name $iotHubName --resource-group $resourceGroup --partition-count 2 --sku F1 --location $location

创建 Log Analytics 工作区

az monitor log-analytics workspace create --resource-group $resourceGroup --workspace-name $workspaceName --location $location

创建要用于测试的 IoT 设备标识。

az iot hub device-identity create --device-id $iotDeviceName --hub-name $iotHubName

检索设备标识的主连接字符串,然后将其复制到本地。 需要此连接字符串才能在测试阶段运行设备模拟。

az iot hub device-identity show-connection-string --device-id $iotDeviceName --hub-name $iotHubName

收集连接和设备遥测的日志

IoT 中心发出多类操作的资源日志。 若要查看这些日志,必须创建诊断设置,将它们发送到目标。 其中一个目标是 Azure Monitor 日志,这些日志在 Log Analytics 工作区中收集。 IoT 中心资源日志分为不同的类别。 你可以在诊断设置中选择要发送到 Azure Monitor 日志的类别。 在本文中,我们将收集与连接和设备遥测有关的操作和错误的日志。 有关 IoT 中心支持的类别的完整列表,请参阅 IoT 中心资源日志

若要创建诊断设置以将 IoT 中心资源日志发送到 Azure Monitor 日志,请执行以下步骤:

  1. Azure 门户中导航到 IoT 中心。 如果使用 CLI 命令创建资源,则 IoT 中心位于资源组 ContosoResources 中。

  2. 在导航菜单的“监视”部分选择“诊断设置”。 然后选择“添加诊断设置”。

    Screenshot that highlights Diagnostic settings in the Monitoring section.

  3. 在“诊断设置”页上,提供以下详细信息:

    参数
    诊断设置名称 为设置指定一个描述性名称,例如“将连接和遥测发送到日志”。
    日志 从“类别”列表中选择“连接”和“设备遥测”。
    目标详细信息 选择“发送到日志分析工作区”,然后使用 Log Analytics 工作区选取器来选择之前记下的工作区。

    Screenshot showing the final diagnostic log settings.

  4. 选择“保存”,保存这些设置。 关闭“诊断设置”窗格。 可以在诊断设置列表中看到你的新设置。

设置指标

现在,我们将使用指标资源管理器创建一个图表,显示所要跟踪的指标。将此图表固定到 Azure 门户中的默认仪表板。

  1. 在 IoT 中心菜单中,从“监视”部分选择“指标”。

  2. 在屏幕顶部,选择“过去 24 小时(自动)”。 在显示的下拉列表中,选择“过去 4 小时”作为“时间范围”,并将“时间粒度”设置为“1 分钟”,然后对“时间显示形式”选择“本地” 。 选择“应用”,保存这些设置。 设置现在应显示“本地时间:过去 4 小时(1 分钟)”。

    Screenshot showing the metrics time settings.

  3. 在图表上,显示了一个范围为 IoT 中心的部分指标设置。 保留“范围”和“指标命名空间”值的默认值 。 选择“指标”设置并键入“遥测”,然后从下拉列表中选择“发送的遥测消息数” 。 “聚合”将自动设置为“Sum” 。 请注意,图表的标题也会更改。

    Screenshot that shows adding Telemetry messages sent metric to chart.

  4. 现在选择“添加指标”,向图表添加另一个指标。 在“指标”下,选择“已使用的消息总数”。 对于“聚合”,请选择“平均”。同样,请注意,图表的标题已更改为包含此指标。

    现在,屏幕会显示针对“发送的遥测消息数”的最小化指标,以及针对“已使用的消息总数”的新指标。

    Screenshot that shows adding Total number of messages used metric to chart.

  5. 在图表右上角,选择“保存到仪表板”,并从下拉列表中选择“固定到仪表板”。

    Screenshot that highlights the Save to dashboard button.

  6. 在“固定到仪表板”窗格中,选择“现有”选项卡 。选择“专用”,然后从仪表板下拉列表中选择“仪表板” 。 最后,选择“固定”将图表固定到 Azure 门户中的默认仪表板。 如果你不将图表固定到仪表板,则在退出指标资源管理器时,设置不会保留。

    Screenshot that shows settings for Pin to dashboard.

设置指标警报

现在,我们将设置根据“发送的遥测消息数”和“使用的消息总数”这两个指标触发的警报。

“发送的遥测消息数”是跟踪消息吞吐量和避免受到限制的良好监视指标。 对于免费层中的 IoT 中心,带宽限制为 100 条消息/秒。对于单个设备,我们无法达到这种吞吐量,因此我们将设置在 5 分钟内消息数超过 1000 条时触发的警报。 在生产中,可以根据 IoT 中心的层、版本和单元数量将该信号设置为更重要的值。

“使用的消息总数”跟踪每天使用的消息数。 此指标每天在 00:00 UTC 重置。 如果你超出了每日配额,超过了某个阈值,IoT 中心将不再接受消息。 对于免费层中的 IoT 中心,每日消息配额为 8000 条。 我们将设置警报,使它在消息总数超过 4000 条(即配额的 50%)时触发。 实际上,你可能会将此百分比设置为更高的值。 每日配额值取决于 IoT 中心的层、版本和单元数。

有关 IoT 中心配额和限制的更多信息,请参阅配额和限制

设置指标警报:

  1. 在 IoT 中心菜单中,从“监视”部分选择“警报”。

  2. 选择“创建警报规则”。

    在“创建警报规则”窗格中,有四个部分:

    • “范围”已经设置为 IoT 中心,因此我们将不讨论此部分。
    • “条件”设置触发警报的信号和条件。
    • “操作”配置警报触发时发生的情况。
    • “详细信息”用于设置警报的名称和说明。
  3. 首先,配置触发警报的条件。

    1. 此时会打开“条件”选项卡并打开其中的“选择信号”窗格。 搜索框中键入“遥测”,然后选择“发送的遥测消息数”。

      Screenshot showing selecting the metric.

    2. 在“配置信号逻辑”窗格中,在“警报逻辑”下设置或确认以下字段(可以忽略图表) :

      参数
      阈值 静态
      “运算符” 大于
      聚合类型 总计
      阈值 1000
      单位 计数
      聚合粒度(期限) 5 分钟
      评估频率 每 1 分钟

      Screenshot showing alert conditions settings.

      这些设置将信号设置为合计 5 分钟内的消息数。 此总数将每分钟评估一次,如果前 5 分钟的总计超过 1000 条消息,则将触发警报。

      选择“完成”保存信号逻辑。

  4. 选择“下一步:操作”以配置警报的操作。

    1. 选择“创建操作组”。

    2. 在“创建操作组”窗格的“基本信息”选项卡上,为操作组指定一个名称和一个显示名称。

      Screenshot showing Basics tab of Create action group pane.

    3. 选择“通知”选项卡。对于“通知类型”,从下拉列表中选择“电子邮件/短信/推送/语音” 。 随即打开“电子邮件/短信/推送/语音”窗格。

    4. 在“电子邮件/短信/推送/语音”窗格中,选择电子邮件并输入你的电子邮件地址,然后选择“确定” 。

      Screenshot showing email address setting.

    5. 返回“通知”窗格,输入通知的名称。

      Screenshot showing completed notifications pane.

    6. (可选)在操作组“操作”选项卡上,“操作类型”下拉列表中列出了可以通过警报触发的操作类型。 对于本文,我们将仅使用通知,因此你可以忽略此选项卡下的设置。

      Screenshot showing action types available on the Actions pane.

    7. 选择“查看并创建”选项卡,验证设置,然后选择“创建” 。

    8. 返回警报规则“操作”选项卡,请注意,新操作组已添加到警报的操作中。

  5. 选择“下一步:详细信息”配置警报规则详细信息并保存警报规则。

    1. 在“详细信息”选项卡上,提供警报的名称和说明;例如,“5 分钟内超过 1000 条消息时发出警报”。
  6. 选择“查看 + 创建”以查看警报规则的详细信息。 如果一切正常,请选择“创建”以保存新规则。

  7. 现在针对“已使用的消息总数”设置另一警报。 如果你希望在使用的消息数接近 IoT 中心的每日配额时(此时,IoT 中心将开始拒绝消息)发送警报,则此指标非常有用。 按照之前所做的步骤操作,但有以下不同之处。

    • 对于“配置信号逻辑”窗格上的信号,选择“使用的消息总数”。

    • 在“配置信号逻辑”窗格中,设置或确认以下字段(可以忽略图表):

      参数
      阈值 静态
      “运算符” 大于
      聚合类型 总计
      阈值 4000
      单位 计数
      聚合粒度(期限) 1 分钟
      评估频率 每 1 分钟

      这些设置将信号设置为当消息数量达到 4000 条时触发。 该指标每分钟计算一次。

    • 为警报规则指定操作时,选择为先前规则所创建的相同操作组。

    • 对于警报详细信息,请选择与以前不同的名称和描述。

  8. 选择 IoT 中心左侧窗格中“监视”下的“警报” 。 现在,在“警报”窗格顶部的菜单上选择“警报规则”。 此时会打开“警报规则”窗格。 应会看到两个警报:

    Screenshot showing the Rules pane with the new alert rules.

  9. 此时会关闭“警报规则”窗格。

通过这些设置,当 5 分钟内发送的消息数超过 1000 条时,以及当使用的消息总数超过 4000 条(免费层中 IoT 中心每日配额的 50%)时,警报将被触发并且你会收到电子邮件通知。

运行模拟设备应用

设置资源部分,你注册了一个设备标识,用于模拟使用 IoT 设备。 在本部分,下载一个 .NET 控制台应用(用于模拟向 IoT 中心发送设备到云消息的设备),将其配置为将这些消息发送到 IoT 中心,然后运行它。

重要

IoT 中心最多需要 10 分钟才能完全配置和启用警报。 在配置上一个警报和运行模拟设备应用之间,至少等待 10 分钟。

从 GitHub 下载或克隆 Azure IoT C# SDK 存储库的解决方案。 此存储库包含多个示例应用程序。 在本教程中,我们将使用 iothub/device/samples/getting started/SimulatedDevice/。

  1. 在本地终端窗口中,导航到解决方案的根文件夹。 然后导航到 iothub\device\samples\getting started\SimulatedDevice 文件夹。

  2. 在所选文本编辑器中打开 SimulatedDevice.cs 文件。

    1. s_connectionString 变量的值替换为你运行脚本以设置资源时记下的设备连接字符串。

    2. SendDeviceToCloudMessagesAsync 方法中,将 Task.Delay 从 1000 更改为 1,这样就会将发送消息的间隔时间从 1 秒更改为 0.001 秒。 缩短此延迟会增加发送的消息数。 (你可能不会获得每秒 100 条消息的消息速率。)

      await Task.Delay(1);
      
    3. 将更改保存到 SimulatedDevice.cs。

  3. 在本地终端窗口中,运行以下命令以安装模拟设备应用程序所需的包:

    dotnet restore
    
  4. 在本地终端窗口中,运行以下命令,生成并运行模拟设备应用程序:

    dotnet run
    

    以下屏幕截图显示了模拟设备应用程序将遥测数据发送到 IoT 中心后的输出:

    Screenshot showing simulated device output.

让应用程序运行至少 10-15 分钟。 理想情况下,让它运行到停止发送消息为止(大约 20-30 分钟)。 如果你超过了 IoT 中心的每日消息配额,并且它已停止接受更多消息时,就会发生这种情况。

注意

如果设备应用在停止发送消息后长时间保持运行状态,则可能会出现异常。 你可以安全地忽略此异常并关闭应用窗口。

查看仪表板上的指标图表

  1. 在 Azure 门户的左上角,打开门户菜单,然后选择“仪表板”。

    Screenshot how to select your dashboard.

  2. 找到先前固定的图表,然后单击图表数据外部磁贴上的任何位置以展开它。 图表上显示发送的遥测消息数和使用的消息总数。 最新的数字显示在图表的底部。 可以在图表中移动光标以查看特定时间的指标值。 你还可以在图表顶部更改时间值和粒度,将数据缩小或扩展到感兴趣的时间段。

    Screenshot showing the metrics chart.

    在此场景下,模拟设备的消息吞吐量不足以导致 IoT 中心限制其消息数。 在实际涉及限制的场景中,你可能会看到发送的遥测消息数在有限的时间内超过了 IoT 中心的限制。 这是为了适应突发流量。 有关详细信息,请参阅流量调整

查看警报

如果发送的消息数超出了你在警报规则中设置的限制,你会开始收到电子邮件警报。

若要查看是否有任何活动警报,请选择 IoT 中心左侧窗格中“监视”下的“警报” 。 “警报”窗格显示在指定时间范围内按严重性排序的已触发警报数。

Screenshot showing the alerts summary.

选择严重性为 Sev 3 的行。 “所有警报”窗格打开并列出已触发的 Sev 3 警报。

Screenshot showing the All Alerts pane.

选择其中一个警报以查看警报详细信息。

Screenshot showing alert details.

检查收件箱中来自 Azure 的电子邮件。 主题行将描述触发的警报。 例如“Azure:已激活,严重性:3,5 分钟内超过 1000 条消息时发出警报” 。 正文将与下图类似:

Screenshot of the e-mail showing the alerts have fired.

查看 Azure Monitor 日志

收集连接和设备遥测的日志部分中,你创建了一个诊断设置,将 IoT 中心发出的连接和设备遥测操作资源日志发送到 Azure Monitor 日志。 在本部分中,针对 Azure Monitor 日志运行 Kusto 查询,观察发生的任何错误。

  1. 在 Azure 门户中 IoT 中心左窗格的“监视”下,选择“日志” 。 关闭初始的“查询”窗口(如果它打开)。

  2. 在“新建查询”窗格中,选择“查询”选项卡,然后展开“IoT 中心”以查看默认查询的列表 。

    Screenshot of IoT Hub default queries.

  3. 选择“错误摘要”查询。 该查询将显示在“查询编辑器”窗格中。 在编辑器窗格中选择“运行”并观察查询结果。 展开其中一行可查看详细信息。

    Screenshot of the logs returned by the Errors summary query.

    注意

    如果没有看到任何错误,请尝试运行“最近连接的设备”查询。 这应该会针对模拟设备返回一行。

清理资源

若要删除在本教程中创建的所有资源,请删除资源组。 此操作会一并删除组中包含的所有资源。 在此示例下,它会删除 IoT 中心、Log Analytics 工作区和资源组本身。 如果已将指标图表固定到仪表板,则需手动删除这些图表,方法是:单击每个图表右上角的三个点,然后选择“删除”。 删除图表后,请务必保存更改。

若要删除资源组,请使用 az group delete 命令。

az group delete --name ContosoResources

后续步骤

本教程介绍了如何执行以下任务,以便使用 IoT 中心指标和日志:

  • 使用 Azure CLI 创建 IoT 中心,注册模拟设备,并创建 Log Analytics 工作区。
  • 将 IoT 中心连接和设备遥测资源日志发送到 Log Analytics 工作区中的 Azure Monitor 日志。
  • 使用指标资源管理器根据选定的指标创建图表,并将其固定到仪表板。
  • 创建指标警报,使你可在重要条件满足时得到电子邮件通知。
  • 下载并运行一个应用,该应用模拟 IoT 设备将消息发送到 IoT 中心的情形。
  • 在你的条件满足时,查看警报。
  • 查看仪表板上的指标图表。
  • 查看 Azure Monitor 日志中的 IoT 中心错误和操作。

转到下一教程,了解如何测试 IoT 中心的灾难恢复功能。