使用 CloudWatch 监控您的 IoT 设备阵列 的物联网 官方博客
使用 CloudWatch 监控您的物联网设备
关键要点
在本文中,我们将展示如何利用 Amazon CloudWatch 监控您的物联网IoT设备,及时发出警报以应对超出正常操作阈值的情况。通过以下步骤,您可以有效地设置 CloudWatch 仪表板、创建自定义警报及查询日志数据,从而获取更多有关设备活动的洞察或用于故障排查。
引言
本文旨在教您如何使用 CloudWatch 监控您的物联网设备,并在相关操作条件达到或超过您设定的正常阈值时发出警报。我们将介绍如何设置 Amazon CloudWatch 仪表板、基于 AWS IoT 指标创建报警,并查询日志数据以深入理解设备活动或帮助解决故障。
根据 AWS 的最佳实践框架,在您实施了工作负载后,务必监控其性能,以便在问题影响客户之前进行修复。监控指标应该用于在阈值突破时触发警报。
Amazon CloudWatch 是一种监控和观察服务,可以提供数据和可操作的洞察,帮助您监控工作负载、应对系统性能变化、优化资源利用,并获得统一的操作健康视图。CloudWatch 从在 AWS 上运行和本地服务器中收集监控和操作数据,以日志、指标和事件的形式展示。
我们将按照以下步骤设置 IoT 监控:
前提条件启用 AWS IoT Core 日志记录创建 CloudWatch 仪表板创建自定义 IoT 警报和指标查看自定义指标并创建警报故障排查已触发的警报前提条件
在本文中,我们将使用 AWS 命令行接口AWS CLI作为演示工具。有关基本设置的更多信息,请参考 AWS CLI 快速设置。
启用 AWS IoT Core 日志记录
您可以通过 AWS 管理控制台、AWS CLI 或 AWS IoT Core API 配置 AWS IoT 日志记录。为了针对特定事物组或特定设备配置日志记录,您需要使用 AWS CLI 或 IoT Core API。有关更多信息,请参考 IoT 设备日志记录。

使用 setv2loggingoptions 命令设置您帐户的日志选项。
bashaws iot setv2loggingoptions rolearn ltloggingrolearngt defaultloglevel ltloglevelgt
日志级别: ERROR:会导致操作失败的任何错误,仅记录 ERROR 信息。 WARN:可能导致系统不一致的任何事项,但可能不会导致操作失败,记录 ERROR 和 WARN 信息。 INFO:有关操作流的高层次信息,记录 INFO、ERROR 和 WARN 信息。 DEBUG:可能在排查问题时有用的信息,记录 DEBUG、INFO、ERROR 和 WARN 信息。 DISABLED:禁用所有日志记录。
除了事物组之外,您还可以记录诸如设备的客户端 ID、源 IP 和主体 ID 等目标。
事物组设备级别客户端 ID、源 IP、主体 ID使用 setv2logginglevel 命令配置资源特定的日志记录。
bashaws iot setv2logginglevel logtarget targetType=THINGGROUP targetName=ltthinggroupnamegt loglevel ltloglevelgt
在以下示例中,将名为 betadevice123 的单一设备的日志级别设置为 DEBUG:
bashaws iot setv2logginglevel logtarget {targetTypeCLIENTIDtargetNamebetadevice123} loglevel DEBUG
在推出新功能或固件时,将某些事物组的日志级别调整为 INFO 或 DEBUG 是有用的。在成功部署后,您可以将日志级别恢复到标准级别。
AWS IoT 监控仪表板
监控仪表板可以让您查看所有已在您的 AWS 帐户中注册的 AWS IoT 设备的 CloudWatch 指标。在此仪表板中,您可以看到设备按协议、类型和方向聚合发布和接收的消息数量、设备随时间发布的消息数量以及其他指标。该仪表板可在 AWS 控制台的 AWS IoT Core 页面监控部分找到。
创建 CloudWatch 仪表板
Amazon CloudWatchCloudWatch仪表板是可定制的主页面,您可以在 CloudWatch 控制台 上使用它们来监控您在不同区域中的资源。
当您与 AWS IoT 交互时,该服务每分钟将以下指标发送到 CloudWatch:
规则指标消息代理指标设备管理指标舰队索引指标考虑设置一个包含对您部署重要的指标的仪表板。例如,如果您的设备舰队有稳定的消息发送频率,并且与预计的 IoT 规则执行次数相符,您可以将这些纳入您的仪表板。另一个仪表板可以显示已部署到您的舰队的 IoT 作业状态,包括排队作业、成功作业和失败作业的数量。随着舰队随着时间的变化,仪表板可能需要更新以反映新的状态或指标。
在 CloudWatch 指标 图像中,您可以看到 AWS IoT 指标的示例。在特定区域中,CloudWatch 正在获取设备成功注册的数量、证书创建相关指标以及由于客户端或服务器端错误导致设备配置失败的次数。
现在,您可以看到用户如何浏览可用指标并将其添加到仪表板。在这种情况下,选择特定的证书 ID,然后点击右上角的下拉菜单中的 添加到仪表板。
这将显示在选定时间窗口近一小时内成功注册的事物数量。您可以将其更改为不同的时间间隔。
以下是使用 Amazon CloudWatch 创建的自定义仪表板,其中包含您 IoT 设备舰队的基本指标。操作团队可以使用此仪表板了解舰队的状态。
创建自定义 AWS IoT 指标
AWS IoT 向 CloudWatch 发送许多标准指标和维度。您还可以通过创建一个或多个指标过滤器,来搜索和过滤进入 CloudWatch Logs 的日志数据。指标过滤器定义了在日志数据发送到 CloudWatch Logs 时需要查找的术语和模式。CloudWatch Logs 使用这些指标过滤器将日志数据转换为您可以绘制图表或设置警报的数字 CloudWatch 指标。
在 Amazon CloudWatch 控制台 的左侧导航面板中,展开 日志,然后选择 日志组。点击 AWSIotLogsV2 日志组。
在下图中,您可以看到 AWSIoTLogsV2 日志组详细信息。
点击 搜索日志组 按钮,在过滤事件对话框中输入以下搜索字符串并选择过去 30 分钟。有关如何查询 CloudWatch 日志事件的更多信息,请参考 使用过滤模式搜索日志数据 Amazon CloudWatch Logs。
在搜索框中键入以下内容。{ eventType = RuleExecution ampamp status = Failure }
以下是过去 30 分钟内多个失败的规则执行的示例。
点击 创建指标过滤器 按钮以基于此搜索模式创建指标。在下图中,我为过滤器命名了一个描述性的名称,并且创建了一个新的指标命名空间,称为 MyIotApplication。
您可以根据应用程序、工作负载、项目或您组织中选择的任何分组来对指标进行分组。每次过滤器模式匹配时,指标值设为 1,其他字段保持默认设置。点击 创建 按钮继续。一旦创建了该指标过滤器,您可以像使用其他 CloudWatch 指标一样使用它,将其添加到图表、仪表板或创建警报。
查看自定义指标并创建警报
现在我们导航到 CloudWatch 控制台,并从左侧菜单选择 所有指标。在主窗口中选择 浏览 标签,您将看到刚才创建的新自定义命名空间。在本示例中,它叫做 MyIotApplication。点击 MyIotApplication 链接,然后是 无维度的指标。下面的输出显示了所选时间段内的失败规则执行次数。
点击 图形指标 标签,您将看到有关该指标的更多详细信息,并可以更改图表类型、时间段等。您可以使用右上角的 操作 下拉按钮将此指标添加到当前仪表板或新仪表板中。
您还可以点击 铃铛图标 创建一个警报。现在让我们这样做。
点击 铃铛图标 后,您将看到以下表单,这将允许您调整警报配置。
印尼节点加速器这允许您设置警报的阈值。我们将设置五分钟内大于等于两个的阈值。在附加配置中,这些字段保持默认设置。如果阈值值在一个时间段在本例中为五分钟内低于警报阈值,则该警报将恢复到正常状态。
点击 下一步 并选择一个 Amazon Simple Notification ServiceAmazon SNS 主题,当状态为 ALARM 时将接收通知。假设您已经配置了一个 Amazon SNS 主题。有关更多信息,请参考 创建 Amazon SNS 主题。
为您的警报选择一个名称,并点击 下一步。
在下一个屏幕上,如果一切看起来正确,点击 创建警报。您的警报现在已经创建。
您可以通过将警报状态设置为 ALARM 来测试您的警报和通知。下面是将警报设置为 ALARM 以及返回到 OK 的命令。
bashaws cloudwatch setalarmstate alarmname IoTRuleExecutionFailures statereason testing alarm statevalue ALARM
bashaws cloudwatch setalarmstate alarmname IoTRuleExecutionFailures statereason testing alarm statevalue OK
故障排查触发警报的问题
接下来,我们将展示当您遇到警报或设备行为超出预期阈值时可以执行的步骤。CloudWatch Logs 和 CloudWatch Logs Insights 提供强大的搜索功能,帮助您识别警报或意外行为的可能根本原因。
AWS IoT 日志存储在 AWSIotLogsV2。在此日志组中,您将看到存储在各个日志流中的事件。点击 搜索日志组 按钮,您可以通过查询和时间范围过滤这些日志。
如果您期望规则被评估并执行操作,您可以通过过滤事件类型 RuleMatch 来验证如下:
bash{ eventType = RuleMatch }
如果您想搜索过去 30 分钟内的任何失败规则,我建议将以下内容添加到过滤字段中。该示例展示了如何过滤 RuleExecution 事件,但仅限于状态为失败的事件:
bash{ eventType = RuleExecution ampamp status = Failure }
CloudWatch Logs Insights 使您能够交互式搜索和分析 CloudWatch 日志中的日志数据。您可以执行查询,以帮助您更有效地应对操作问题。如果发生问题,您可以使用 CloudWatch Logs Insights 确定潜在原因并验证已部署的修复。
CloudWatch Log Insights 可以作为帮助您了解使用模式的工具。以您想列出前 10 个发布的主题为例:
bashfields @timestamp topicName stats count() as numPublishIn by (eventType=Success) topicName sort numPublishIn desc limit 10
按客户端 ID 列出前 50 个发布者:
bashfilter eventType=PublishIn stats count() as numPublishIn by clientId sort numPublishIn desc limit 50
CloudWatch Log Insights 允许您针对日志构建查询。如果您收到连接限制警报,您可能需要运行查询,以查看过去 30 分钟内连接数最多的客户端:
bashfilter eventType=Connect stats count() as NumConnections by clientId sort NumConnections desc limit 20
结论
监控是一个持续的过程。随着您的设备舰队和功能的发展,您需要更新监控目标和阈值。通过监控您的设备并设置警报,您可以主动应对问题而不是被动反应。在本文中,您学习了 AWS 提供的不同选项来监控设备舰队。我们展示了如何使用自动化工具和手动监控工具进行操作,例如启用日志记录、用内置指标创建仪表板、创建自定义指标和警报。最后,我们展示了如何在设备行为发生变化时进行故障排查。
进一步阅读可以参考关于 Amazon CloudWatch 的 设计和实施日志记录和监控的指南 和其他相关的 [IoT 最佳实践博客](https//