

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

# 从 AWS IoT Greengrass 核心设备收集系统运行状况遥测数据
<a name="telemetry"></a>

系统运行状况遥测数据是一种诊断数据，可以帮助您监控 Greengrass 核心设备上关键操作的性能。您可以创建项目和应用程序，以检索、分析、转换和报告来自边缘设备的遥测数据。工艺工程师等领域专家可以使用这些应用程序来深入了解实例集的运行状况。

您可以使用以下方法从 Greengrass 核心设备收集遥测数据：
+ **内核遥测发射器组件** – Greengrass 核心设备上的[核心遥测发射器组件](nucleus-emitter-component.md) (`aws.greengrass.telemetry.NucleusEmitter`) 默认向 `$local/greengrass/telemetry` 主题发布遥测数据。即使您的设备与云的连接有限，您也可以使用发布到本主题的数据，在核心设备上进行本地操作。或者，您也可以将组件配置为将遥测数据发布到您选择的 M AWS IoT Core QTT 主题。

  您必须将核心发射器组件部署到核心设备才能发布遥测数据。向本地主题发布遥测数据不会产生任何费用。但是，使用 MQTT 主题向发布数据 AWS 云 需视[AWS IoT Core 定价](https://aws.amazon.com/iot-core/pricing/)而定。

  <a name="greengrass-software-catalog-influxdb-telemetry-publisher"></a>AWS IoT Greengrass 提供了多个[社区组件](greengrass-software-catalog.md)，可帮助您使用 InfluxDB 和 Grafana 在核心设备上本地分析和可视化遥测数据。这些组件使用来自 Nucleus 发射器组件的遥测数据。有关更多信息，请参阅 [InfluxDB](https://github.com/awslabs/aws-greengrass-labs-telemetry-influxdbpublisher) 发布者组件的自述文件。
+ **遥测代理** — Greengrass 核心设备上的遥测代理收集本地遥测数据并将其发布到亚马逊，无需任何客户互动。 EventBridge 核心设备会尽最大努力向其 EventBridge 发布遥测数据。例如，核心设备在离线时可能无法传输遥测数据。

  所有 Greengrass 核心设备默认启用遥测代理功能。设置 Greengrass 核心设备后，您就会自动开始接收数据。除了数据链路费用外，从核心设备传输到的数据 AWS IoT Core 也是免费的。这是因为代理向 AWS 保留主题发布内容。但是，根据您的使用场景，您在接收或处理数据时可能会产生费用。
**注意**  
Amazon EventBridge 是一项事件总线服务，可用于将应用程序与来自各种来源（例如 Greengrass 核心设备）的数据连接起来。有关更多信息，请参阅[什么是亚马逊 EventBridge？](https://docs.aws.amazon.com/eventbridge/latest/userguide/what-is-amazon-eventbridge.html) 在《*亚马逊 EventBridge 用户指南》*中。

为确保 AWS IoT Greengrass Core 软件正常运行，请 AWS IoT Greengrass 使用数据进行开发和质量改进。此功能还有助于为新的和增强的边缘功能提供信息。 AWS IoT Greengrass 将遥测数据最多保留七天。

本部分介绍如何配置和使用遥测座席。有关配置核心遥测发射器组件的信息，请参阅[Nucleus 遥测发射器](nucleus-emitter-component.md)。

**Topics**
+ [遥测指标](#telemetry-metrics)
+ [配置遥测座席设置](#configure-telemetry-agent-settings)
+ [订阅遥测数据 EventBridge](#subscribe-for-telemetry-data)

## 遥测指标
<a name="telemetry-metrics"></a>

下表描述了遥测座席发布的指标。


| Name | 说明 | 
| --- | --- | 
|  **系统**  | 
|  `SystemMemUsage`  |  Greengrass 核心设备上所有应用程序（包括操作系统）当前使用的内存量。  | 
|  `CpuUsage`  |  Greengrass 核心设备上所有应用程序（包括操作系统）当前使用的 CPU 量。  | 
|  `TotalNumberOfFDs`  |  Greengrass 核心设备操作系统存储的文件描述符的数量。一个文件描述符可以唯一地标识一个打开的文件。  | 
|  **Greengrass Nucleus**  | 
|  `NumberOfComponentsRunning`  |  Greengrass 核心设备上运行的组件的数量。  | 
|  `NumberOfComponentsErrored`  |  Greengrass 核心设备上处于错误状态的组件的数量。  | 
|  `NumberOfComponentsInstalled`  |  Greengrass 核心设备上安装的组件的数量。  | 
|  `NumberOfComponentsStarting`  |  Greengrass 核心设备上启动的组件的数量。  | 
|  `NumberOfComponentsNew`  |  Greengrass 核心设备上新组件的数量。  | 
|  `NumberOfComponentsStopping`  |  Greengrass 核心设备上停止组件的数量。  | 
|  `NumberOfComponentsFinished`  |  Greengrass 核心设备上完成组件的数量。  | 
|  `NumberOfComponentsBroken`  |  Greengrass 核心设备上损坏组件的数量。  | 
|  `NumberOfComponentsStateless`  |  Greengrass 核心设备上无状态组件的数量。  | 
|  **客户端设备身份验证** – 此功能需要客户端设备身份验证组件的 v2.4.0 或更高版本。  | 
|  `VerifyClientDeviceIdentity.Success`  |  验证客户端设备身份是否成功的次数。  | 
|  `VerifyClientDeviceIdentity.Failure`  |  验证客户端设备身份是否失败的次数。  | 
|  `AuthorizeClientDeviceActions.Success`  |  客户端设备被授权完成请求的操作的次数。  | 
|  `AuthorizeClientDeviceActions.Failure`  |  客户端设备无权完成请求的操作的次数。  | 
|  `GetClientDeviceAuthToken.Success`  |  客户端设备成功通过身份验证的次数。  | 
|  `GetClientDeviceAuthToken.Failure`  |  客户端设备无法通过身份验证的次数。  | 
|  `SubscribeToCertificateUpdates.Success`  |  证书更新的成功订阅数量。  | 
|  `SubscribeToCertificateUpdates.Failure`  |  证书更新的失败订阅尝试的数量。  | 
|  `ServiceError`  |  客户端设备身份验证中未处理的内部错误数量。  | 
|  **流管理器** – 此功能需要 v2.7.0 或更高版本的 Greengrass Nucleus 组件。  | 
|  `BytesAppended`  |  附加到流管理器的数据的字节数。  | 
|  `BytesUploadedToIoTAnalytics`  |  流管理器导出到其中的频道的数据字节数 AWS IoT Analytics。  | 
|  `BytesUploadedToKinesis`  |  流管理器导出到 Amazon Kinesis Data Streams 中流的数据的字节数。  | 
|  `BytesUploadedToIoTSiteWise`  |  流管理器导出到中资产属性的数据字节数 AWS IoT SiteWise。  | 
|  `BytesUploadedToS3`  |  流管理器导出到 Amazon S3 中对象的数据的字节数。  | 
|  **系统指标**：此功能需要 v2.15.0 或更高版本的 Greengrass Nucleus 组件。  | 
|  `CPUArchitecture`  |  设备中央处理器架构。  | 
|  `Family`  |  设备操作系统系列（仅限 Windows）。  | 
|  `KernelVersion`  |  设备内核版本（仅限 Unix）。  | 
|  `KnowledgeBaseArticles`  |  设备上安装的知识库文章（仅限 Windows）。  | 
|  `OSBuildMajor`  |  操作系统版本的主要内部版本号（仅限 Windows）。  | 
|  `OSBuildMinor`  |  操作系统版本的次要内部版本号（仅限 Windows）。  | 
|  `OSName`  |  设备操作系统名称。  | 
|  `OSVersion`  |  设备上操作系统的上市版本。  | 

## 配置遥测座席设置
<a name="configure-telemetry-agent-settings"></a>

遥测座席将使用以下默认设置：
+ 遥测代理每小时汇总一次遥测数据。
+ 遥测代理每 24 小时发布一次遥测消息。

遥测座席将使用服务质量（QoS）级别为 0 的 MQTT 协议来发布数据，这意味着它不会确认交付或重试发布尝试。遥测消息与其他发往 AWS IoT Core的订阅消息共享 MQTT 连接。

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

您可以为每台 Greengrass 核心设备启用或禁用遥测座席功能。您还可以配置核心设备聚合和发布数据的间隔。要配置遥测，请在部署 [Greengrass Nucleus 组件](greengrass-nucleus-component.md)时自定义[遥测配置参数](greengrass-nucleus-component.md#greengrass-nucleus-component-configuration-telemetry)。

## 订阅遥测数据 EventBridge
<a name="subscribe-for-telemetry-data"></a>

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

### 遥测事件
<a name="events-message-format"></a>

遥测事件使用以下格式。

```
{
  "version": "0",
  "id": "a09d303e-2f6e-3d3c-a693-8e33f4fe3955",
  "detail-type": "Greengrass Telemetry Data",
  "source": "aws.greengrass",
  "account": "123456789012",
  "time": "2020-11-30T20:45:53Z",
  "region": "us-east-1",
  "resources": [],
  "detail": {
    "ThingName": "MyGreengrassCore",
    "Schema": "2020-07-30",
    "ADP": [
      {
        "TS": 1602186483234,
        "NS": "SystemMetrics",
        "M": [
          {
            "N": "TotalNumberOfFDs",
            "Sum": 6447.0,
            "U": "Count"
          },
          {
            "N": "CpuUsage",
            "Sum": 15.458333333333332,
            "U": "Percent"
          },
          {
            "N": "SystemMemUsage",
            "Sum": 10201.0,
            "U": "Megabytes"
          }
        ]
      },
      {
        "TS": 1602186483234,
        "NS": "GreengrassComponents",
        "M": [
          {
            "N": "NumberOfComponentsStopping",
            "Sum": 0.0,
            "U": "Count"
          },
          {
            "N": "NumberOfComponentsStarting",
            "Sum": 0.0,
            "U": "Count"
          },
          {
            "N": "NumberOfComponentsBroken",
            "Sum": 0.0,
            "U": "Count"
          },
          {
            "N": "NumberOfComponentsFinished",
            "Sum": 1.0,
            "U": "Count"
          },
          {
            "N": "NumberOfComponentsInstalled",
            "Sum": 0.0,
            "U": "Count"
          },
          {
            "N": "NumberOfComponentsRunning",
            "Sum": 7.0,
            "U": "Count"
          },
          {
            "N": "NumberOfComponentsNew",
            "Sum": 0.0,
            "U": "Count"
          },
          {
            "N": "NumberOfComponentsErrored",
            "Sum": 0.0,
            "U": "Count"
          },
          {
            "N": "NumberOfComponentsStateless",
            "Sum": 0.0,
            "U": "Count"
          }
        ]
      },
      {
        "TS": 1602186483234,
        "NS": "aws.greengrass.ClientDeviceAuth",
        "M": [
          {
            "N": "VerifyClientDeviceIdentity.Success",
            "Sum": 3.0,
            "U": "Count"
          },
          {
            "N": "VerifyClientDeviceIdentity.Failure",
            "Sum": 1.0,
            "U": "Count"
          },
          {
            "N": "AuthorizeClientDeviceActions.Success",
            "Sum": 20.0,
            "U": "Count"
          },
          {
            "N": "AuthorizeClientDeviceActions.Failure",
            "Sum": 5.0,
            "U": "Count"
          },
          {
            "N": "GetClientDeviceAuthToken.Success",
            "Sum": 5.0,
            "U": "Count"
          },
          {
            "N": "GetClientDeviceAuthToken.Failure",
            "Sum": 2.0,
            "U": "Count"
          },
          {
            "N": "SubscribeToCertificateUpdates.Success",
            "Sum": 10.0,
            "U": "Count"
          },
          {
            "N": "SubscribeToCertificateUpdates.Failure",
            "Sum": 1.0,
            "U": "Count"
          },
          {
            "N": "ServiceError",
            "Sum": 3.0,
            "U": "Count"
          }
        ]
      },
      {
        "TS": 1602186483234,
        "NS": "aws.greengrass.StreamManager",
        "M": [
          {
            "N": "BytesAppended",
            "Sum": 157745524.0,
            "U": "Bytes"
          },
          {
            "N": "BytesUploadedToIoTAnalytics",
            "Sum": 149012.0,
            "U": "Bytes"
          },
          {
            "N": "BytesUploadedToKinesis",
            "Sum": 12192.0,
            "U": "Bytes"
          },
          {
            "N": "BytesUploadedToIoTSiteWise",
            "Sum": 13321.0,
            "U": "Bytes"
          },
          {
            "N": "BytesUploadedToS3",
            "Sum": 12213.0,
            "U": "Bytes"
          }
        ]
      }
      {
        "TS": 1750104449426,
        "NS": "SystemMetrics",
        "M": [
          {
            "N": "KernelVersion",
            "Sum": 1,
            "U": "6.1.140-154.222.amzn2023.x86_64"
          },
          {
            "N": "OSVersion",
            "Sum": 1,
            "U": "2023.7.20250609"
          },
          {
            "N": "OSName",
            "Sum": 1,
            "U": "Amazon Linux"
          },
          {
            "N": "CPUArchitecture",
            "Sum": 1,
            "U": "Broadwell (Server)"
          },
        ]
      }
    ]
  }
}
```<a name="telemetry-agent-adp-array-config"></a>

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

`TS`  
表示数据在何时收集的时间戳。

`NS`  
指标命名空间。

`M`  
指标列表。一个指标包含以下属性：    
`N`  
指标的名称。  
`Sum`  
此遥测事件中指标值的总计。  
`U`  
指标值的单位。

有关每个指标的更多信息，请参阅[遥测指标](#telemetry-metrics)。

### 创建 EventBridge 规则的先决条件
<a name="create-events-rule-prerequisites-telemetry"></a>

在为创建 EventBridge 规则之前 AWS IoT Greengrass，应执行以下操作：
+ 熟悉中的事件、规则和目标。 EventBridge
+ 创建和配置您的 EventBridge 规则调用的[目标](https://docs.aws.amazon.com/eventbridge/latest/userguide/eventbridge-targets.html)。规则可以调用多种类型的目标，例如 Amazon Kinesis 流、 AWS Lambda 函数、亚马逊 SNS 主题和亚马逊 SQS 队列。

  您的 EventBridge 规则和关联目标必须位于您创建 Greengrass 资源 AWS 区域 的位置。有关更多信息，请参阅 *AWS 一般参考* 中的[服务端点和配额](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html)。

有关更多信息，请参阅[什么是亚马逊 EventBridge？](https://docs.aws.amazon.com/eventbridge/latest/userguide/what-is-amazon-eventbridge.html) 以及《[亚马逊* EventBridge 用户指南》 EventBridge中的 “亚马逊*入门](https://docs.aws.amazon.com/eventbridge/latest/userguide/eventbridge-getting-set-up.html)”。

### 创建事件规则以获取遥测数据（控制台）
<a name="create-telemetry-event-rule-console"></a>

使用以下步骤 AWS 管理控制台 来创建用于接收 Greengrass 核心设备发布的遥测数据的 EventBridge 规则。这样，Web 服务器、电子邮件地址和其他主题订阅者就可以响应事件。有关更多信息，请参阅 *Amazon EventBridge 用户指南*中的[创建针对来自 AWS 资源的事件触发的 EventBridge 规则](https://docs.aws.amazon.com/eventbridge/latest/userguide/create-eventbridge-rule.html)。

1. 打开 A [mazon EventBridge 控制台](https://console.aws.amazon.com/events/)，然后选择**创建规则**。

1. 在 **Name and description (名称和描述)** 下，输入规则的名称和描述。

1. 在 **Define pattern (定义模式)** 下，配置规则模式。

   1. 选择 **Event pattern (事件模式)**。

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

   1. 对于 **Service provider (服务提供商)**，选择 **AWS**。

   1. 对于 **Service name (服务名称)**，选择 **Greengrass**。

   1. 对于**事件类型**，选择 **Greengrass 遥测数据**。

1. 在 **Select event bus (选择事件总线)** 下，保留默认事件总线选项。

1. 在 **Select targets (选择目标)** 下，配置您的目标。以下示例使用 Amazon SQS，但您也可配置其它目标类型。

   1. 对于**目标**，选择 **SQS 队列**。

   1. 对于**队列\$1**，选择目标队列。

1. 在 **Tags - optional (标签 - 可选)** 下，定义规则的标签或将字段留空。

1. 选择**创建**。

### 创建事件规则以获取遥测数据 (CLI)
<a name="create-telemetry-event-rule-cli"></a>

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

1. 创建 规则。
   + *thing-name*替换为核心设备的事物名称。

------
#### [ Linux or Unix ]

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

------
#### [ Windows Command Prompt (CMD) ]

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

------
#### [ PowerShell ]

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

------

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

1. 将主题添加为规则目标。以下示例使用 Amazon SQS，但您也可配置其他目标类型。
   + *queue-arn*替换为您的 Amazon SQS 队列的 ARN。

------
#### [ Linux or Unix ]

   ```
   aws events put-targets \
     --rule MyGreengrassTelemetryEventRule \
     --targets "Id"="1","Arn"="queue-arn"
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   aws events put-targets ^
     --rule MyGreengrassTelemetryEventRule ^
     --targets "Id"="1","Arn"="queue-arn"
   ```

------
#### [ PowerShell ]

   ```
   aws events put-targets `
     --rule MyGreengrassTelemetryEventRule `
     --targets "Id"="1","Arn"="queue-arn"
   ```

------
**注意**  
要允许 Amazon EventBridge 调用您的目标队列，您必须在主题中添加基于资源的策略。有关更多信息，请参阅《[亚马逊* EventBridge 用户指南》中的 Ama* zon SQS 权限](https://docs.aws.amazon.com/eventbridge/latest/userguide/resource-based-policies-eventbridge.html#sqs-permissions)。

有关更多信息，请参阅 *Amazon EventBridge 用户指南 EventBridge*[中的事件和事件模式](https://docs.aws.amazon.com/eventbridge/latest/userguide/eventbridge-and-event-patterns.html)。