

终止支持通知：2026 年 10 月 7 日， AWS 将停止对的支持。 AWS IoT Greengrass Version 1 2026 年 10 月 7 日之后，您将无法再访问这些 AWS IoT Greengrass V1 资源。如需了解更多信息，请访问[迁移自 AWS IoT Greengrass Version 1](https://docs.aws.amazon.com/greengrass/v2/developerguide/migrate-from-v1.html)。

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

# 使用 AWS IoT Greengrass 日志进行监控
<a name="greengrass-logs-overview"></a>

AWS IoT Greengrass 由云服务和 AWS IoT Greengrass 核心软件组成。C AWS IoT Greengrass ore 软件可以将日志写入 Amazon CloudWatch 和核心设备的本地文件系统。在核心上运行的 Lambda 函数和连接器也可以将日志写入 CloudWatch 日志和本地文件系统。您可以使用日志来监控事件和排查问题。所有 AWS IoT Greengrass 日志条目都包括时间戳、日志级别和有关事件的信息。对日志记录设置所做的更改在部署组后生效。

在组级别配置日志记录。有关说明如何为 Greengrass 组配置日志记录的步骤，请参阅[配置日志记录 AWS IoT Greengrass](#config-logs)。

## 访问 CloudWatch 日志
<a name="gg-logs-cloudwatch"></a>

如果您配置了 CloudWatch 日志记录，则可以在 Amazon CloudWatch 控制台的 “**日志**” 页面上查看日志。日志的 AWS IoT Greengrass 日志组使用以下命名约定：

```
/aws/greengrass/GreengrassSystem/{{greengrass-system-component-name}}
/aws/greengrass/Lambda/{{aws-region}}/{{account-id}}/{{lambda-function-name}}
```

每个日志组包含的日志流使用以下命名约定：

```
{{date}}/{{account-id}}/{{greengrass-group-id}}/{{name-of-core-that-generated-log}}
```

使用 CloudWatch 日志时，需要考虑以下注意事项：
+ 如果没有互联网连接， CloudWatch 日志将发送到日志，重试次数有限。在重试次数用尽后，该事件将被丢弃。
+ 事务、内存以及其他限制将适用。有关更多信息，请参阅 [日志记录限制](#gg-log-limits)。
+ <a name="gg-logs-cloudwatch-perms"></a>你的 Greengrass 群组角色必须 AWS IoT Greengrass 允许写入日志。 CloudWatch 要授予权限，请在您的组角色中[嵌入以下内联策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html#embed-inline-policy-console)。

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "logs:CreateLogGroup",
                  "logs:CreateLogStream",
                  "logs:PutLogEvents",
                  "logs:DescribeLogStreams"
              ],
              "Resource": [
                  "arn:aws:logs:*:*:*"
              ]
          }
      ]
  }
  ```

------
**注意**  
您可以针对您的日志资源授予更细粒度的访问。有关更多信息，请参阅 A *mazon CloudWatch 用户*指南中的[使用基于身份的 CloudWatch 日志策略（IAM 策略）](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/iam-identity-based-access-control-cwl.html)。

  组角色是您创建并附加到 Greengrass 组的 IAM 角色。您可以使用控制台或 AWS IoT Greengrass API 来管理群组角色。

     
**使用控制台**  

  1. <a name="console-gg-groups"></a>**在 AWS IoT 控制台导航窗格的**管理**下，展开 **Greengrass** 设备，然后选择群组 (V1)。**

  1. <a name="group-choose-target-group"></a>选择目标组。

  1. 选择 **查看设置**。在**组角色**下，您可以查看、关联或取消关联群组角色。

     有关演示如何附加组角色的步骤，请参阅[组角色](group-role.md)。
   
**使用 CLI**  
  + 要查找组角色，请使用[get-associated-role](https://docs.aws.amazon.com/cli/latest/reference/greengrass/get-associated-role.html)命令。
  + 要附加组角色，请使用[associate-role-to-group](https://docs.aws.amazon.com/cli/latest/reference/greengrass/associate-role-to-group.html)命令。
  + 要移除组角色，请使用[disassociate-role-from-group](https://docs.aws.amazon.com/cli/latest/reference/greengrass/disassociate-role-from-group.html)命令。
   
要了解如何获取组 ID 以使用这些命令，请参阅[获取组 ID](deployments.md#api-get-group-id)。

## 访问文件系统日志
<a name="gg-logs-local"></a>

如果您配置文件系统日志记录，则日志文件存储在核心设备上的 `{{greengrass-root}}/ggc/var/log` 下。下面是高级别目录结构：

```
{{greengrass-root}}/ggc/var/log
    - crash.log
    - system
        - log files for each Greengrass system component
    - user
        - {{region}}
            - {{account-id}}
                - log files generated by each user-defined Lambda function
            - aws
                - log files generated by each connector
```

**注意**  
默认情况下，{{greengrass-root}} 为 `/greengrass` 目录。如果配置了[写入目录](gg-core.md#write-directory)，则日志位于该目录中。

在使用文件系统日志时，请注意以下几点：
+ 读取文件系统上的 AWS IoT Greengrass 日志需要 root 权限。
+ AWS IoT Greengrass 支持基于大小的轮换，并在日志数据量接近配置的限制时自动清理。
+ `crash.log` 文件仅在文件系统日志中提供。此日志未写入 CloudWatch 日志。
+ 磁盘使用率限制将适用。有关更多信息，请参阅 [日志记录限制](#gg-log-limits)。

**注意**  
 AWS IoT Greengrass 核心软件 v1.0 的日志存储在`{{greengrass-root}}/var/log`目录下。

## 默认日志记录配置
<a name="config-logs-default"></a>

如果未明确配置日志记录设置，则在首次群组部署后 AWS IoT Greengrass 使用以下默认日志配置。

AWS IoT Greengrass 系统组件  
+ Type - `FileSystem`
+ 组件 - `GreengrassSystem`
+ Level - `INFO`
+ 空格 - `128 KB`

用户定义的 Lambda 函数  
+ Type - `FileSystem`
+ 组件 - `Lambda`
+ Level - `INFO`
+ 空格 - `128 KB`

**注意**  
在第一次部署前，仅系统组件将日志写入文件系统，因为不会部署任何用户定义的 Lambda 函数。

## 配置日志记录 AWS IoT Greengrass
<a name="config-logs"></a>

您可以使用 AWS IoT 控制台或配置 AWS IoT Greengrass 日志记录。[AWS IoT Greengrass APIs](#config-logs-api)

**注意**  
 AWS IoT Greengrass 要允许将日志写入 CloudWatch 日志，您的组角色必须允许[所需的 CloudWatch 日志操作](#gg-logs-cloudwatch-perms)。

### 配置日志记录 (控制台)
<a name="config-logs-console"></a>

您可以在组的 **Settings (设置)** 页面上配置日志记录。

1. <a name="console-gg-groups"></a>**在 AWS IoT 控制台导航窗格的**管理**下，展开 **Greengrass** 设备，然后选择群组 (V1)。**

1. 选择要在其中配置日志记录的组。

1. 在组配置页面上，选择**日志**选项卡。

1. 选择日志记录位置，如下所示：
   + 要配置 CloudWatch 日志记录，要**配置CloudWatch 日志**，请选择**编辑**。
   + 要配置文件系统日志记录，请对 **Local logs configuration** (本地日志配置) 选择 **Edit** (编辑)。

   您可以为一个位置或两个位置配置日志记录。

1. 在编辑日志配置模式中，选择 **Greengrass 系统日志级别**或**用户 Lambda 函数日志级别**。您可以选择一个组件或两个组件。

1. 选择要记录的事件的最低级别。低于此阈值的事件会被过滤掉，也不会进行存储。

1. 选择**保存**。更改在部署组后生效。

### 配置日志记录 (API)
<a name="config-logs-api"></a>

你可以使用 AWS IoT Greengrass logger APIs 以编程方式配置日志记录。例如，使用 [https://docs.aws.amazon.com/greengrass/v1/apireference/createloggerdefinition-post.html](https://docs.aws.amazon.com/greengrass/v1/apireference/createloggerdefinition-post.html) 操作根据 [https://docs.aws.amazon.com/greengrass/v1/apireference/definitions-loggerdefinitionversion.html](https://docs.aws.amazon.com/greengrass/v1/apireference/definitions-loggerdefinitionversion.html) 负载创建记录器定义，该定义使用以下语法：

```
{
  "Loggers": [
    {
      "Id": "string",
      "Type": "FileSystem|AWSCloudWatch",
      "Component": "GreengrassSystem|Lambda",
      "Level": "DEBUG|INFO|WARN|ERROR|FATAL",
      "Space": "integer"
    },
    {
      "Id": "string",
      ...
    }
  ]
}
```

`LoggerDefinitionVersion` 是一个或多个具有以下属性的 [https://docs.aws.amazon.com/greengrass/v1/apireference/definitions-logger.html](https://docs.aws.amazon.com/greengrass/v1/apireference/definitions-logger.html) 对象的数组：

`Id`  
记录器的标识符。

`Type`  
日志事件的存储机制。使用`AWSCloudWatch`时，日志事件将发送到 CloudWatch 日志。使用 `FileSystem` 时，日志事件将存储在本地文件系统中。  
有效值：`AWSCloudWatch`、`FileSystem`

`Component`  
日志事件的源。使用 `GreengrassSystem` 时，将记录来自 Greengrass 系统组件的事件。使用 `Lambda` 时，将记录来自用户定义的 Lambda 函数的事件。  
有效值：`GreengrassSystem`、`Lambda`

`Level`  
日志级别的阈值。低于此阈值的日志事件不会筛选出，也不会进行存储。  
有效值：`DEBUG`、`INFO` (推荐)、`WARN`、`ERROR`、`FATAL`

`Space`  
用于存储日志的最大本地存储量 (以 KB 为单位)。此字段仅在 `Type` 设置为 `FileSystem` 时适用。

### 配置示例
<a name="config-logs-examples"></a>

以下 `LoggerDefinitionVersion` 示例指定的日志记录配置可以：
+ 为 AWS IoT Greengrass 系统组件开启文件系统`ERROR`及以上日志功能。
+ 为用户定义的 Lambda 函数启用文件系统 `INFO` (及更高版本) 日志记录。
+ 为用户定义的 Lambda 函数开启 CloudWatch `INFO`（及以上）日志记录。

```
{
  "Name": "LoggingExample",
  "InitialVersion": {
    "Loggers": [
      {
        "Id": "1",
        "Component": "GreengrassSystem",
        "Level": "ERROR",
        "Space": 10240,
        "Type": "FileSystem"
      },
      {
        "Id": "2",
        "Component": "Lambda",
        "Level": "INFO",
        "Space": 10240,
        "Type": "FileSystem"
      },
      {
        "Id": "3",
        "Component": "Lambda",
        "Level": "INFO",
        "Type": "AWSCloudWatch"
      }
    ]
  }
}
```

在创建日志记录器定义版本后，可以使用其版本 ARN 创建组版本，然后再[部署组](deployments.md)。

## 日志记录限制
<a name="gg-log-limits"></a>

AWS IoT Greengrass 有以下日志限制。

### 每秒事务数
<a name="gg-log-limit-tps"></a>

启用登录到后 CloudWatch ，日志组件会在本地批量记录事件，然后再将事件发送到 CloudWatch，因此您可以以高于每个日志流每秒五个请求的速率进行记录。

### 内存
<a name="gg-log-limit-mem"></a>



如果配置 AWS IoT Greengrass 为向发送日志， CloudWatch 且 Lambda 函数在很长一段时间内日志超过 5 MB/second 个，则内部处理管道最终会被填满。理论上，最差的情况为每个 Lambda 函数 6 MB。

### 时钟偏差
<a name="gg-log-limit-skew"></a>

启用登录后 CloudWatch ，日志组件将 CloudWatch使用正常的签名版本 4 签名流程对请求进行签名。如果 AWS IoT Greengrass 核心设备上的系统时间不同步的时长超过 [15 分钟](https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html)，则请求会被拒绝。

### 磁盘使用量
<a name="gg-log-limit-disk"></a>

使用以下公式可计算用于日志记录的最大总磁盘使用量。

```
{{greengrass-system-component-space}} * 8    // 7 if automatic IP detection is disabled
  + 128KB                                // the internal log for the local logging component
  + {{lambda-space}} * {{lambda-count}}          // different versions of a Lambda function are treated as one
```

其中：

`greengrass-system-component-space`  
 AWS IoT Greengrass 系统组件日志的最大本地存储量。

`lambda-space`  
Lambda 函数日志的最大本地存储量。

`lambda-count`  
已部署的 Lambda 函数的数量。

### 记录丢失
<a name="gg-log-loss"></a>

如果您的 AWS IoT Greengrass 核心设备配置为仅登录 CloudWatch 且没有互联网连接，则无法检索内存中当前的日志。

当 Lambda 函数终止时（例如，在部署期间），将不会写入几秒钟的日志。 CloudWatch

## CloudTrail 日志
<a name="cloudtrail-integration"></a>

AWS IoT Greengrass 与一项服务一起 AWS CloudTrail运行，该服务提供用户、角色或 AWS 服务在中执行的操作的记录 AWS IoT Greengrass。有关更多信息，请参阅 [使用记录 AWS IoT Greengrass API 调用 AWS CloudTrail](logging-using-cloudtrail.md)。