你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

教程:通过 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)

设置资源

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

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

  1. 创建资源组

  2. 创建 IoT 中心。

  3. 创建 Log Analytics 工作区。

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

重要

本文包括使用共享访问签名(也称为对称密钥身份验证)连接设备的步骤。 此身份验证方法便于测试和评估,但使用 X.509 证书对设备进行身份验证是一种更安全的方法。 有关详细信息,请参阅安全最佳做法和连接安全性

使用 Azure CLI 设置资源

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

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

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

location=westus
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 connection-string show --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. 在导航菜单的“监视”部分选择“诊断设置”。 然后选择“添加诊断设置”。

    突出显示“监视”部分的“诊断设置”的屏幕截图。

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

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

    显示最终诊断日志设置的屏幕截图。

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

设置指标

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

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

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

    显示指标时间设置的屏幕截图。

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

    显示向图表添加“发送的遥测消息数”指标的屏幕截图。

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

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

    显示向图表添加“使用的消息总数”指标的屏幕截图。

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

    突出显示“保存到仪表板”按钮的屏幕截图。

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

    显示“固定到仪表板”设置的屏幕截图。

设置指标警报

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

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

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

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

设置指标警报:

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

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

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

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

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

      显示选择指标的屏幕截图。

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

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

      显示警报条件设置的屏幕截图。

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

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

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

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

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

      显示“创建操作组”窗格的“基本”选项卡的屏幕截图。

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

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

      显示电子邮件地址设置的屏幕截图。

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

      显示已完成的“通知”窗格的屏幕截图。

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

      显示“操作”窗格中可用操作类型的屏幕截图。

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

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

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

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

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

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

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

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

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

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

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

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

    显示包含新警报规则的“规则”窗格的屏幕截图。

  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 中心后的输出:

    显示模拟设备输出的屏幕截图。

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

注意

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

查看仪表板上的指标图表

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

    如何选择仪表板的屏幕截图。

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

    显示指标图表的屏幕截图。

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

查看警报

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

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

显示警报摘要的屏幕截图。

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

显示“所有警报”窗格的屏幕截图。

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

显示警报详细信息的屏幕截图。

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

电子邮件的屏幕截图,显示警报已触发。

查看 Azure Monitor 日志

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

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

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

    IoT 中心默认查询的屏幕截图。

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

    “错误摘要”查询返回的日志的屏幕截图。

    注意

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

清理资源

若要删除在本教程中创建的所有资源,请删除资源组。 此操作会一并删除组中包含的所有资源。 在此示例下,它会删除 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 中心的灾难恢复功能。