从 AWS IoT Greengrass 核心设备收集系统运行状况遥测数据 - AWS IoT Greengrass

AWS IoT Greengrass Version 1 2023 年 6 月 30 日进入延长寿命阶段。有关更多信息,请参阅 AWS IoT Greengrass V1 维护策略。在此日期之后,将 AWS IoT Greengrass V1 不会发布提供功能、增强功能、错误修复或安全补丁的更新。在上面运行的设备 AWS IoT Greengrass V1 不会中断,将继续运行并连接到云端。我们强烈建议您迁移到 AWS IoT Greengrass Version 2,这样可以添加重要的新功能支持其他平台

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

从 AWS IoT Greengrass 核心设备收集系统运行状况遥测数据

系统运行状况遥测数据是一种诊断数据,可以帮助您监控 Greengrass 核心设备上关键操作的性能。Greengrass 核心上的遥测代理收集本地遥测数据,并将其发布到 Amazon EventBridge,无需任何客户交互。核心设备会以最大努力将遥测数据发布到 EntBridge。例如,核心设备在离线时可能无法传输遥测数据。

注意

Amazon EventBridge 是一种事件总线服务,您可以用其轻松地将应用程序与来自各种来源的数据相连接,例如 Greengrass 核心设备和部署通知。有关更多信息,请参阅 Amazon EventBridge 用户指南中的什么是 Amazon EventBridge?

您可以创建项目和应用程序,以检索、分析、转换和报告来自边缘设备的遥测数据。工艺工程师等领域专家可以使用这些应用程序来深入了解实例集的运行状况。

为确保 Greengrass 边缘组件正常运行,AWS IoT Greengrass 会使用这些数据来满足开发和质量改进用途。此功能还有助于为新增和增强的边缘功能提供信息。AWS IoT Greengrass 仅将遥测数据保留最多 7 天。

此功能在 AWS IoT Greengrass Core 软件 v1.11.0 中可用,并且所有 Greengrass 核心(包括现有的核心)都会默认启用此功能。升级到 AWS IoT Greengrass Core 软件 v1.11.0 或更高版本后,您将自动开始接收数据。

有关如何访问或管理已发布遥测数据的信息,请参阅订阅以接收遥测数据

遥测代理收集并发布以下系统指标。

遥测指标
名称 描述

SystemMemUsage

Greengrass 核心设备上所有应用程序(包括操作系统)当前使用的内存量。

System

CpuUsage

Greengrass 核心设备上所有应用程序(包括操作系统)当前使用的 CPU 量。

System

TotalNumberOfFDs

Greengrass 核心设备操作系统存储的文件描述符的数量。一个文件描述符可以唯一地标识一个打开的文件。

System

LambdaOutOfMemory

导致 Lambda 函数用完内存的运行次数。

System

DroppedMessageCount

发往 AWS IoT Core 的已丢弃消息的数量。

GGCloudSpooler 系统组件

LambdaTimeout

运行用户定义的 Lambda 函数的超时次数。

用户定义的 Lambda 函数、AWS Cloud 和系统

LambdaUngracefullyKilled

用户定义的 Lambda 函数未能完成的运行次数。

用户定义的 Lambda 函数、AWS Cloud 和系统

LambdaError

产生用户定义的 Lambda 函数写入错误日志的运行次数。

用户定义的 Lambda 函数、AWS Cloud 和系统

BytesAppended

附加到流管理器的数据的字节数。

GGStreamManager 系统组件

BytesUploadedToIoTAnalytics

流管理器导出到 AWS IoT Analytics 中频道的数据的字节数。

GGStreamManager 系统组件

BytesUploadedToKinesis

流管理器导出到 Amazon Kinesis Data Streams 中流的数据的字节数。

GGStreamManager 系统组件

BytesUploadedToIoTSiteWise

流管理器导出到 AWS IoT SiteWise 中资源属性的数据的字节数。

GGStreamManager 系统组件

BytesUploadedToS3ExportTaskExecutor

流管理器导出到 Amazon S3 中对象的数据的字节数。

GGStreamManager 系统组件

BytesUploadedToHTTP

流管理器导出到 HTTP 的数据的字节数。

GGStreamManager 系统组件

配置遥测设置

Greengrass 遥测使用以下设置:

  • 遥测代理每小时汇总一次遥测数据。

  • 遥测代理每 24 小时发布一次遥测消息。

注意

这些设置不可更改。

您可以为 Greengrass 核心设备启用或禁用遥测功能。AWS IoT Greengrass 将使用影子来管理遥测配置。当核心与 AWS IoT Core 与连接时,您的更改会立即生效。

遥测代理使用服务质量 (QoS) 级别为 0 的 MQTT 协议来发布数据。这意味着它不会确认传输或重试发布操作。遥测消息与其他发往 AWS IoT Core 的订阅消息共享 MQTT 连接。

除数据链路成本外,从核心到 AWS IoT Core 的数据传输是免费的。这是因为代理会发布到 AWS 保留主题。但是,根据您的使用场景,您在接收或处理数据时可能会产生费用。

要求

配置遥测设置时适用以下要求:

  • 您必须使用 AWS IoT Greengrass Core v1.11.0 或更高版本。

    注意

    如果您运行的是早期版本并且不想使用遥测,您不需要执行任何操作。

  • 在更新遥测设置之前,您必须提供 IAM 权限以更新核心(事物)影子和调用配置 API。

    以下示例 IAM 策略允许您管理特定核心的影子和运行时配置:

    { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowManageShadow", "Effect": "Allow", "Action": [ "iot:GetThingShadow", "iot:UpdateThingShadow", "iot:DeleteThingShadow", "iot:DescribeThing" ], "Resource": [ "arn:aws:iot:region:account-id:thing/core-name-*" ] }, { "Sid": "AllowManageRuntimeConfig", "Effect": "Allow", "Action": [ "greengrass:GetCoreRuntimeConfiguration", "greengrass:UpdateCoreRuntimeConfiguration" ], "Resource": [ "arn:aws:iot:region:account-id:thing/core-name" ] } ] }

    您可以授予对资源的具体或条件访问权限(例如,通过使用通配符 * 命名方案)。有关更多信息,请参阅 IAM 用户指南中的添加和删除 IAM 策略

配置遥测设置(控制台)

以下内容显示了如何在 AWS IoT Greengrass 控制台中更新 Greengrass 核心的遥测设置。

  1. 在 AWS IoT 控制台导航窗格的管理下,展开 Greengrass 设备,然后选择组 (V1)

  2. Greengrass 组下,选择您的目标组。

  3. 在组配置页面的概述部分中,选择您的 Greengrass 核心

  4. 在核心的配置页面上,选择遥测选项卡。

  5. 系统运行状况遥测部分中,选择配置

  6. 配置遥测中,选择遥测以启用或禁用遥测状态。

    重要

    默认情况下,AWS IoT Greengrass Core 软件 v1.11.0 或更高版本的遥测功能处于启用状态。

这些更改在运行时生效。您不需要部署这个组。

配置遥测设置 (CLI)

在 AWS IoT Greengrass API 中,TelemetryConfiguration 对象表示 Greengrass 核心的遥测设置。此对象是与核心关联的 RuntimeConfiguration 对象的一部分。您可以使用 AWS IoT Greengrass API、AWS CLI 或 AWS 开发工具包来管理 Greengrass 遥测数据。本节中的示例使用 AWS CLI。

检查遥测设置

以下命令会获取 Greengrass 核心的遥测设置。

  • 用目标核心的名称替换 core-thing-name

    要获取事物名称,请使用 get-core-definition-version 命令。该命令返回包含事物名称的事物 ARN。

aws greengrass get-thing-runtime-configuration --thing-name core-thing-name

该命令返回 JSON 响应中的 GetCoreRuntimeConfigurationResponse 对象。例如:

{ "RuntimeConfiguration": { "TelemetryConfiguration": { "ConfigurationSyncStatus": "OutOfSync", "Telemetry": "On" } } }
配置遥测设置

以下命令会更新 Greengrass 核心的遥测设置。

  • 用目标核心的名称替换 core-thing-name

    要获取事物名称,请使用 get-core-definition-version 命令。该命令返回包含事物名称的事物 ARN。

JSON expanded
aws greengrass update-thing-runtime-configuration --thing-name core-thing-name --telemetry-configuration '{ "RuntimeConfiguration": { "TelemetryConfiguration": { "ConfigurationSyncStatus": "InSync", "Telemetry": "Off" } } }
JSON single-line
aws greengrass update-thing-runtime-configuration --thing-name core-thing-name --telemetry-configuration "{\"TelemetryConfiguration\":{\"ConfigurationSyncStatus\":\"InSync\",\"Telemetry\":\"Off\"}}"

如果 ConfigurationSyncStatusInSync,则已应用对遥测设置的更改。这些更改在运行时生效。您不需要部署这个组。

TelemetryConfiguration 对象

TelemetryConfiguration 对象具有以下属性:

ConfigurationSyncStatus

检查遥测设置是否同步。您可能无法更改此属性。

类型:字符串

有效值:InSyncOutOfSync

Telemetry

开启或关闭遥测。默认为 On

类型:字符串

有效值:OnOff

订阅以接收遥测数据

您可以在 Amazon EventBridge 中创建规则,以定义如何处理从 Greengrass 核心设备发布的遥测数据。EntBridge 接收到数据时,会调用您的规则中定义的目标操作。例如,您可以创建事件规则来发送通知、存储事件信息、采取纠正措施或调用其他事件。

遥测事件

部署状态更改的事件(包括遥测数据)采用以下格式:

{ "version": "0", "id": "f70f943b-9ae2-e7a5-fec4-4c22178a3e6a", "detail-type": "Greengrass Telemetry Data", "source": "aws.greengrass", "account": "123456789012", "time": "2020-07-28T20:45:53Z", "region": "us-west-1", "resources": [], "detail": { "ThingName": "CoolThing", "Schema": "2020-06-30", "ADP": [ { "TS": 123231546, "NS": "StreamManager", "M": [ { "N": "BytesAppended|BytesUploadedToKinesis", "Sum": 11, "U": "Bytes" } ] }, { "TS": 123231546, "NS": "StreamManager", "M": [ { "N": "BytesAppended|BytesUploadedToS3ExportTaskExecutor", "Sum": 11, "U": "Bytes" } ] }, { "TS": 123231546, "NS": "StreamManager", "M": [ { "N": "BytesAppended|BytesUploadedToHTTP", "Sum": 11, "U": "Bytes" } ] }, { "TS": 123231546, "NS": "StreamManager", "M": [ { "N": "BytesAppended|BytesUploadedToIoTAnalytics", "Sum": 11, "U": "Bytes" } ] }, { "TS": 123231546, "NS": "StreamManager", "M": [ { "N": "BytesAppended|BytesUploadedToIoTSiteWise", "Sum": 11, "U": "Bytes" } ] }, { "TS": 123231546, "NS": "arn:aws:lambda:us-west-1:123456789012:function:my-function", "M": [ { "N": "LambdaTimeout", "Sum": 15, "U": "Count" } ] }, { "TS": 123231546, "NS": "CloudSpooler", "M": [ { "N": "DroppedMessageCount", "Sum": 15, "U": "Count" } ] }, { "TS": 1593727692, "NS": "SystemMetrics", "M": [ { "N": "SystemMemUsage", "Sum": 11.23, "U": "Megabytes" }, { "N": "CpuUsage", "Sum": 35.63, "U": "Percent" }, { "N": "TotalNumberOfFDs", "Sum": 416, "U": "Count" } ] }, { "TS": 1593727692, "NS": "arn:aws:lambda:us-west-1:123456789012:function:my-function", "M": [ { "N": "LambdaOutOfMemory", "Sum": 12, "U": "Count" }, { "N": "LambdaUngracefullyKilled", "Sum": 100, "U": "Count" }, { "N": "LambdaError", "Sum": 7, "U": "Count" } ] } ] } }

ADP 数组包含具有以下属性的聚合数据点的列表:

TS

必需。表示数据在何时聚合的时间戳。

NS

必需。系统的命名空间。

M

必需。指标列表。一个指标包含以下属性:

N

指标的名称。

Sum

聚合的指标值。遥测代理会将新值加到之前的总数上,因此总和是一个不断增大的值。您可以使用时间戳来查找特定聚合的值。例如,要查找最新的聚合值,请从最新时间戳的值中减去上一时间戳的值。

U

指标值的单位。

ThingName

必需。您的目标事物的名称。

创建 EventBridge 规则的先决条件

在为 AWS IoT Greengrass 创建 EventBridge 规则之前,您应该先执行以下操作:

  • 熟悉 EventBridge 中的事件、规则和目标。

  • 创建和配置由 EventBridge 规则调用的目标。规则可以调用多种类型的目标,例如 Amazon Kinesis 流、AWS Lambda 函数、Amazon SNS 主题和 Amazon SQS 队列。

    您的 EventBridge 规则和关联的目标必须位于您在其中创建 Greengrass 资源的 AWS 区域中。有关更多信息,请参阅 AWS 一般参考 中的服务端点和配额

有关更多信息,请参阅 Amazon EventBridge 用户指南中的什么是 Amazon EventBridge?Amazon EventBridge 入门

创建事件规则以获取遥测数据(控制台)

按照以下步骤,使用 AWS Management Console 来创建 EventBridge 规则,以便接收 Greengrass 核心发布的遥测数据。这样,Web 服务器、电子邮件地址和其他主题订阅者就可以响应事件。有关更多信息,请参阅 Amazon EventBridge 用户指南中的创建针对来自 AWS 资源的事件触发的 EventBridge 规则

  1. 打开 Amazon EventBridge 控制台,并选择 创建规则

  2. Name and description (名称和描述) 下,输入规则的名称和描述。

  3. 选择时间总线,并对选定事件总线启用规则。

  4. 选择规则类型,并选择具有事件模式的规则

  5. 选择 Next(下一步)。

  6. 对于 Event source(事件源),选择 AWS 事件或 EventBridge 合作伙伴事件

  7. 示例事件中,选择 AWS 事件,然后选择 Greengrass 遥测数据

  8. 事件模式中,请进行下列选择:

    1. 对于 Event source(事件源),选择 AWS services(服务)。

    2. 对于 AWS 服务,选择 Greengrass

    3. 事件类型中,选择 Greengrass 遥测数据

  9. 选择 Next(下一步)。

  10. 对于 目标,选择 AWS 服务

  11. 选择目标中,选择 SQS 队列

  12. 队列中,选择您的函数。

创建事件规则以获取遥测数据 (CLI)

按照以下步骤,使用 AWS CLI 来创建 EventBridge 规则,以便接收 Greengrass 核心发布的遥测数据。这样,Web 服务器、电子邮件地址和其他主题订阅者就可以响应事件。

  1. 创建 规则。

    • thing-name 替换为核心的事物名称。

      要获取事物名称,请使用 get-core-definition-version 命令。该命令返回包含事物名称的事物 ARN。

    aws events put-rule \ --name TestRule \ --event-pattern "{\"source\": [\"aws.greengrass\"], \"detail\": {\"ThingName\": [\"thing-name\"]}}"

    模式中省略的属性将被忽略。

  2. 将主题添加为规则目标。以下示例使用 Amazon SQS,但您也可配置其他目标类型。

    • queue-arn 替换为 Amazon SQS 队列的 ARN。

    aws events put-targets \ --rule TestRule \ --targets "Id"="1","Arn"="queue-arn"
    注意

    要允许 Amazon EventBridge 调用您的目标队列,您必须将基于资源的策略添加到您的主题中。有关更多信息,请参阅 Amazon EventBridge 用户指南中的 Amazon SQS 权限

有关更多信息,请参阅 Amazon EventBridge 用户指南中的 EventBridge 中的事件和事件模式

AWS IoT Greengrass 遥测故障排除

可以使用以下信息帮助解决配置 AWS IoT Greengrass 遥测的问题。

错误:运行 get-thing-runtime-configuration 命令后,响应中包含 "ConfigurationStatus": "OutOfSync"

解决方案

  • AWS IoT 设备影子服务需要时间来处理运行时配置更新,并将更新传输到 Greengrass 核心设备。您可以稍等片刻,然后再检查遥测设置是否同步。

  • 确保您的核心设备在线。

  • 启用 AWS IoT Core 中的 Amazon CloudWatch Logs 以监控影子。

  • 使用 AWS IoT 指标监控事物。