AWS IoT Analytics 问题排查 - AWS IoT Analytics
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

AWS IoT Analytics 问题排查

请参阅以下部分,以排除错误并找到和解决 AWS IoT Analytics.

我如何知道我的信息是否进入 AWS IoT Analytics?

检查通过规则引擎将数据注入通道的规则是否已正确配置。

aws iot get-topic-rule --rule-name your-rule-name

响应应如下所示。

{ "ruleArn": "arn:aws:iot:us-west-2:your-account-id:rule/your-rule-name", "rule": { "awsIotSqlVersion": "2016-03-23", "sql": "SELECT * FROM 'iot/your-rule-name'", "ruleDisabled": false, "actions": [ { "iotAnalytics": { "channelArn": "arn:aws:iotanalytics:region:your_account_id:channel/your-channel-name" } } ], "ruleName": "your-rule-name" } }

确保规则中使用的区域和通道名称正确。为确保您的数据达到规则引擎且规则正在正确执行,您可能希望添加新的目标,以将传入的消息存储在 Amazon S3 桶临时。

为什么我的管道丢失消息?我该如何修复?

  • 活动收到了无效的 JSON 输入:

    除Lambda活动外,所有活动都特别需要有效的JSON字符串作为输入。如果活动收到的 JSON 无效,则将丢弃消息,并且消息不会传入数据存储。确保您将有效的 JSON 消息提取到服务中。在使用二进制输入时,确保管道中的第一个活动是将二进制数据转换为有效 JSON 的 Lambda 活动,然后再将其传递到下一个活动或者存储到数据存储中。有关更多信息,请参阅 Lambda功能示例2.

  • 甲 Lambda 函数调用 Lambda 活动的权限不足:

    确保 Lambda 函数 Lambda 活动具有从调用的权限 AWS IoT Analytics 服务。您可以使用以下 AWS CLI 命令授予权限。

    aws lambda add-permission --function-name <name> --region <region> --statement-id <id> --principal iotanalytics.amazonaws.com --action lambda:InvokeFunction
  • 不正确地定义了某个筛选条件或 removeAttribute 活动:

    确保定义(如有) filterremoveAttribute 活动正确。如果您筛选出了某条消息或者从某条消息中删除了所有属性,该消息不会添加到数据存储。

为什么我的数据仓库中没有数据?

  • 数据提取与数据可用之间存在延迟:

    将数据提取到通道中之后,可能需要几分钟时间,然后数据才会在数据存储中可用。该时间因管道活动数以及管道中的任何自定义 Lambda 活动的定义而异。

  • 管道正将消息筛选掉:

    确保您未在管道中丢弃消息。(参见上一个问题和答案,)

  • 数据集查询不正确:

    确保从数据存储生成数据集的查询正确无误。从查询中删除任何不必要的筛选条件,确保数据可以进入数据存储。

为什么我的数据集仅显示:code:`_dt`?

  • 此列由服务自动添加,并包含数据的大致提取时间。它可用于优化查询。如果数据集中除此之外不含任何其他内容,请参阅前面的问题和答复。

问: 如何对由数据集完成驱动的事件进行编码?

  • 您必须根据 describe-dataset 命令检查具有特定时间戳的数据集的状态是否为 成功.

问: 如何将笔记本实例正确配置为使用IoTAnalytics服务?

  • 请按照以下步骤操作,确保 IAM 用于创建笔记本实例的角色具有所需的权限:

    1. 转到 SageMaker 控制台并创建笔记本实例。

    2. 填写详细信息,然后选择 create a new role (创建新角色)。记录角色 ARN。

    3. 创建笔记本实例。这也创造了一个 SageMaker 可以使用。

    4. 转到 IAM 并修改新创建的 SageMaker 角色。当您打开该角色时,它应具有一个托管策略。

    5. 点击 添加内联策略,选择 物联网分析 作为服务,在读取权限下,选择 获取数据集内容.

    6. 检查策略,添加策略名称,然后对它选择 create (创建)。新创建的角色现在具有从以下位置读取数据集的策略权限 AWS IoT Analytics.

    7. 转至 AWS IoT Analytics 控制台并在笔记本实例中创建笔记本。

    8. 等待笔记本实例进入“In Service”(正在服务) 状态。

    9. 选择 create notebooks (创建笔记本),然后选择您创建的笔记本实例。这将使用可访问您的数据集的选定模板创建 Jupyter 笔记本。

为什么不能在实例中创建笔记本?

  • 确保您使用正确的 IAM 策略创建了笔记本实例。(按照上一个问题中的步骤操作。)

  • 请确保笔记本实例处于“In Service”(正在服务) 状态。创建实例时,它以“待处理”状态开始。通常大约需要 5 分钟进入“In Service”(正在服务) 状态。如果笔记本实例在大约五分钟后进入“失败”状态,请再次检查权限。

为什么我在QuickSight中看不到我的数据集?

  • 按照以下步骤确保您向 QuickSight 提供了数据集内容的读取权限:

    1. 单击右上角的图标(提及账户名称的图标)并选择 Manage QuickSight (管理 QuickSight)

    2. 选择 Account settings (账户设置),然后在 Connected products & services (互联产品和服务) 下面选择 Add or remove (添加或删除)

    3. 选择 AWS IoT Analytics,然后选择 更新. 这会向 QuickSight 提供对您数据集的读取权限。

    4. 请重试以可视化您的数据。

  • 确保你选择相同的 AWS 两者均为区域 AWS IoT Analytics 和 Amazon QuickSight. 否则,您可能无法访问 AWS 资源。有关支持的地区列表,请参阅 AWS IoT Analytics 端点和配额Amazon QuickSight 端点和配额Amazon Web Services 一般参考.

为什么我没有看到现有 Jupyter Notebook?

  • 这是由于 AWS IoT Analytics 容器化插件. 如果您在2018年8月23日之前创建了SageMaker笔记本实例,您需要按照 对笔记本进行容器化.

  • 如果在从 AWS IoT Analytics 控制台或手动安装,请联系 AWS IoT Analytics 技术支持。

为什么我的容器化插件安装失败?

  • 通常,插件安装失败是因为 SageMaker 笔记本实例缺少权限。有关笔记本实例需要的权限,请参阅权限以及向笔记本实例角色添加所需权限。如果问题仍然存在,请从 AWS IoT Analytics 控制台。

  • 如果在安装插件期间出现以下消息,您可以在日志中安全忽略该消息:“每次加载笔记本(或其他应用程序)时在浏览器中初始化此扩展程序。”

为什么我的容器化插件会引发错误?

  • 容器化失败并生成错误的原因有很多。在进行笔记本容器化之前,确保您使用的是正确的内核。容器化内核以“Containerized”前缀开头。

  • 由于插件会在 ECR 存储库中创建并保存一个 Docker 映像,请确保您的笔记本实例角色有足够权限来读取、列出和创建 ECR 存储库。有关笔记本实例需要的权限,请参阅权限以及向笔记本实例角色添加所需权限。

  • 此外,还要确保存储库的名称符合 ECR 要求。ECR 存储库名称必须以字母开头,并且只能包含小写字母、数字、连字符、下划线和正斜杠。

  • 如果容器化过程失败,错误为:“此实例没有足够的可用空间运行容器化”,请尝试使用较大的实例来解决此问题。

  • 如果显示连接错误或映像创建错误,请重试。如果问题仍然存在,请重新启动实例并安装最新的插件版本。

为什么我在容器化过程中看不到我的变量?

  • 的 AWS IoT Analytics 容器化插件在笔记本运行带有“容器化”内核的笔记本后,会自动识别笔记本中的所有变量。使用其中一个容器化内核运行笔记本,然后执行容器化。

我可以将哪些变量作为输入添加到容器?

  • 您可以将要在运行时期间修改其值的任何变量作为输入添加到容器中。这使您能以数据集创建时需要提供的不同参数运行同一容器。的 AWS IoT Analytics 容器化Jupyter插件通过自动识别笔记本中的变量并将其作为容器化过程的一部分提供,简化了此过程。

如何设置集装箱输出作为后续分析的输入?

  • 每次运行容器数据集时,都会创建一个可存储已执行构件的特定 S3 位置。要访问此输出位置,请在您的容器数据集中创建一个类型为 outputFileUriValue 的变量。该变量的值应该是用于存储其他输出文件的 S3 路径。要在后续运行中访问这些保存的工件,您可以使用 getDatasetContent API并选取后续运行所需的适当输出文件。

为什么我的容器数据集失败?

  • 确保将正确的 executionRole 传递给容器数据集。执行的信任策略角色必须同时包括 iotanalytics.amazonaws.comsagemaker.amazonaws.com.

  • 如果您看到 AlgorithmError 作为失败的原因,请尝试手动调试您的容器代码。如果容器代码中有错误或执行角色无权执行容器,则会出现这种情况。如果您使用 AWS IoT Analytics Jupyter插件,创建新的SageMaker笔记本实例,其角色与containerDataset的执行角色相同,并尝试手动运行笔记本。如果容器是在 Jupyter 插件外创建的,请尝试手动运行代码并限制 executionRole 的权限。