AWS IoT
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

监控 AWS IoT

监控是保持 AWS IoT 和 AWS 解决方案的可靠性、可用性和性能的重要环节。您应从 AWS 解决方案的各个部分收集监控数据,以便更轻松地调试出现的多点故障。开始监控 AWS IoT 之前,您应制定一个监控计划并在计划中回答下列问题:

  • 您的监控目标是什么?

  • 您将监控哪些资源?

  • 监控这些资源的频率如何?

  • 您将使用哪些监控工具?

  • 谁负责执行监控任务?

  • 出现错误时应通知谁?

接下来,通过在不同时间和不同负载条件下衡量性能,在您的环境中建立为正常的 AWS IoT 性能建立基准。监控 AWS IoT 时,将历史监控数据存储下来,以便可以将其与当前性能数据进行比较,确定正常性能模式和异常性能表现,并设计出问题解决方法。

例如,如果您使用的是 Amazon EC2,则可以监控实例的 CPU 利用率、磁盘 I/O 和网络利用率。如果性能低于您所建立的基准,则您可能需要重新配置或优化实例以降低 CPU 使用率、改进磁盘 I/O 或减少网络流量。

要建立基准,您至少应监控以下各项:

  • PublishIn.Success

  • PublishOut.Success

  • Subscribe.Success

  • Ping.Success

  • Connect.Success

  • GetThingShadow.Accepted

  • UpdateThingShadow.Accepted

  • DeleteThingShadow.Accepted

  • RulesExecuted

使用 AWS CloudTrail 记录 AWS IoT API 调用

AWS IoT 与 CloudTrail 集成,后者可捕获所有 AWS IoT API 调用并将日志文件传输到您指定的 Amazon S3 存储桶中。CloudTrail 可捕获来自 AWS IoT 控制台的 API 调用或者从您的代码对 AWS IoT API 进行的调用。通过使用 CloudTrail 收集的信息,您可以确定向 AWS IoT 发出了什么请求、发出请求的源 IP 地址、何人发出的请求以及请求的发出时间等。

要了解有关 CloudTrail 的更多信息,包括如何对其进行配置和启用,请参阅 AWS CloudTrail User Guide

CloudTrail 中的 AWS IoT 信息

在您的 AWS 账户中启用 CloudTrail 日志记录后,会在 CloudTrail 日志文件中跟踪对 AWS IoT 操作执行的大多数 API 调用,这些操作会随其他 AWS 服务记录一起写入到这些日志文件。CloudTrail 基于时间段和文件大小来确定何时创建新文件并向其写入内容。

注意

AWS IoT 数据层面操作 (设备端) 不由 CloudTrail 记录。使用 CloudWatch 可监控这些操作。

AWS IoT 控制层面操作 CloudTrail 记录。例如,对 CreateThingListThingsListTopicRules 部分的调用均将在 CloudTrail 日志文件中生成条目。

每个日志条目都包含有关生成请求的人员的信息。日志条目中的用户身份信息可帮助您确定以下内容:

  • 请求是使用根用户凭证还是 IAM 用户凭证发出的.

  • 请求是使用角色还是联合身份用户的临时安全凭证发出的。

  • 请求是否由其他 AWS 服务发出。

有关更多信息,请参阅 CloudTrail userIdentity 元素。AWS IoT 操作在 AWS IoT API 参考中记录。

如果您需要获得日志文件传输的通知,则可以将 CloudTrail 配置为在传输新日志文件时发布 Amazon SNS 通知。有关更多信息,请参阅为 CloudTrail 配置 Amazon SNS 通知

您还可以将多个 AWS 区域和多个 AWS 账户中的 AWS IoT 日志文件聚合到单个 Amazon S3 存储桶中。

有关更多信息,请参阅接收多个区域中的 CloudTrail 日志文件从多个账户中接收 CloudTrail 日志文件

了解 AWS IoT 日志文件条目

CloudTrail 日志文件可以包含一个或多个日志条目。每个条目列出了多个 JSON 格式的事件。一个日志条目表示来自任何源的一个请求,包括有关所请求的操作、操作的日期和时间、请求参数等方面的信息。日志条目不是公用 API 调用的有序堆栈跟踪,因此它们不会以任何特定顺序显示。

下面的示例显示了一个 CloudTrail 日志条目,该条目说明了 AttachPolicy 操作。

{ "timestamp":"1460159496", "AdditionalEventData":"", "Annotation":"", "ApiVersion":"", "ErrorCode":"", "ErrorMessage":"", "EventID":"8bff4fed-c229-4d2d-8264-4ab28a487505", "EventName":"AttachPolicy", "EventTime":"2016-04-08T23:51:36Z", "EventType":"AwsApiCall", "ReadOnly":"", "RecipientAccountList":"", "RequestID":"d4875df2-fde4-11e5-b829-23bf9b56cbcd", "RequestParamters":{ "principal":"arn:aws:iot:us-east-1:123456789012:cert/528ce36e8047f6a75ee51ab7beddb4eb268ad41d2ea881a10b67e8e76924d894", "policyName":"ExamplePolicyForIoT" }, "Resources":"", "ResponseElements":"", "SourceIpAddress":"52.90.213.26", "UserAgent":"aws-internal/3", "UserIdentity":{ "type":"AssumedRole", "principalId":"AKIAI44QH8DHBEXAMPLE", "arn":"arn:aws:sts::12345678912:assumed-role/iotmonitor-us-east-1-beta-InstanceRole-1C5T1YCYMHPYT/i-35d0a4b6", "accountId":"222222222222", "accessKeyId":"access-key-id", "sessionContext":{ "attributes":{ "mfaAuthenticated":"false", "creationDate":"Fri Apr 08 23:51:10 UTC 2016" }, "sessionIssuer":{ "type":"Role", "principalId":"AKIAI44QH8DHBEXAMPLE", "arn":"arn:aws:iam::123456789012:role/executionServiceEC2Role/iotmonitor-us-east-1-beta-InstanceRole-1C5T1YCYMHPYT", "accountId":"222222222222", "userName":"iotmonitor-us-east-1-InstanceRole-1C5T1YCYMHPYT" } }, "invokedBy":{ "serviceAccountId":"111111111111" } }, "VpcEndpointId":"" }