从 AWS IoT Greengrass 核心设备收集系统运行状况遥测数据 - AWS IoT Greengrass
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

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

系统运行状况遥测数据是诊断数据,可以帮助您监控 Greengrass 核心设备上关键操作的性能。Greengrass 核心上的遥测代理收集本地遥测数据并将其发布到 AWS 云,而无需任何客户交互。

您可以创建项目和应用程序,以从边缘设备中检索、分析、转换和报告遥测数据。域专家(如流程工程师)可以使用这些应用程序快速获得队组运行状况的洞察。

要确保 Greengrass 边缘组件正常运行,AWS IoT Greengrass 使用该数据用于开发和质量改进目的。此功能还有助于告知新的和增强的边缘功能。AWS IoT Greengrass 仅保留遥测数据长达 7 天。

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

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

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

Telemetry 指标
姓名 Description

SystemMemUsage

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

系统

CpuUsage

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

系统

TotalNumberOfFDs

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

系统

LambdaOutOfMemory

导致 Lambda 函数内存不足的执行次数。

系统

DroppedMessageCount

目标是 AWS IoT Core 的已丢弃消息的数量。

GGCloudSpooler 系统组件

LambdaTimeout

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

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

LambdaUngracefullyKilled

用户定义的 Lambda 函数无法完成的执行数。

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

LambdaError

导致用户定义的 Lambda 函数写入错误日志的执行数。

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

BytesAppended

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

GGStreamManager 系统组件

BytesUploadtedToIoTAnalytics

流管理器导出到 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 预留主题。但是,根据您的使用案例,您在接收或处理数据时可能会产生费用。

Requirements

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

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

    注意

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

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

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

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

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

配置遥测设置(控制台)

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

  1. 登录到 AWS IoT Greengrass 控制台

  2. 在导航窗格中的 Greengrass 下,选择 Groups (组)

  3. Greengrass groups (Greengrass 组) 下,选择您的目标组。

  4. 在导航窗格中,选择 Cores

  5. Cores (核心) 下,选择您的目标核心。

  6. 在导航窗格中,选择 Telemetry

  7. System Health Telemetry (系统运行状况遥测) 页面上,选择 Edit (编辑)

  8. Configure Telemetry (配置遥测) 下,选择 Enable (启用)Disable (禁用),然后选择 Update (更新)

    重要

    默认情况下,为 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 核心的遥测设置。

  • Replace 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 核心的遥测设置。

  • Replace 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

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

类型:字符串

有效值:InSync或者OutOfSync

Telemetry

打开或关闭遥测。默认值为 On

类型:字符串

有效值:On或者Off

订阅以接收遥测数据

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

Telemetry 事件

包括遥测数据在内的部署状态更改的事件使用以下格式:

{ "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

metric 的名称。

Sum

聚合指标值。遥测代理将新值添加到以前的总计中,因此总和是递增值。您可以使用时间戳来查找特定聚合的值。例如,要查找最新的聚合值,请从最新的时间戳值中减去以前的时间戳值。

U

指标值的单位。

ThingName

必填项。您定位的事物设备的名称。

创建 EventBridge 规则的先决条件

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

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

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

    您的 EventBridge 规则和关联的目标必须位于您创建 Greengrass 资源的 AWS 区域中。有关更多信息,请参阅 https://docs.amazonaws.cn/general/latest/gr/aws-service-information.html 中的服务终端节点和配额AWS General Reference。

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

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

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

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

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

  3. Define pattern (定义模式) 下,配置规则模式。

    1. 选择 Event pattern

    2. 选择 Pre-defined pattern by service (服务预定义的模式)

    3. 对于 Service provider (服务提供商),选择 AWS

    4. 对于 Service name (服务名称),选择 Greengrass

    5. 对于 Event type (事件类型),选择 Greengrass Telemetry Data (Greengrass Telemetry 数据)

  4. Select event bus (选择事件总线) 下,保留默认事件总线选项。

  5. Select targets (选择目标) 下,配置您的目标。以下示例使用 Amazon SQS 队列,但您可以配置其他目标类型。

    1. 对于 Target (目标),选择 SQS queue (SQS 队列)

    2. 对于 Queue* (队列*),选择您的目标队列。

  6. Tags - optional (标签 - 可选) 下,定义规则的标签或将字段留空。

  7. 选择创建

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

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

  1. 创建 规则。

    • Replace 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,但您可以配置其他目标类型。

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

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

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

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

遥测问题排查AWS IoT Greengrass

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

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

解决方案:

  • Device Shadow 服务需要一些时间来处理运行时配置更新并将更新传送到 Greengrass 核心设备。AWS IoT稍后,您可能会等待并检查遥测设置是否同步。

  • 确保您的核心设备处于在线状态。

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

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