AWS IoT Greengrass
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

利用 AWS IoT Greengrass 日志进行监控

AWS IoT Greengrass 由云服务和 AWS IoT Greengrass 核心软件组成。AWS IoT Greengrass 核心软件可将日志写入到 Amazon CloudWatch 和核心设备的本地文件系统。您可以使用日志来监控事件和排查问题。所有 AWS IoT Greengrass 日志条目包含时间戳、日志级别和事件相关信息。

在组级别配置日志记录。有关说明如何配置 AWS IoT Greengrass 组 的日志记录的步骤,请参阅为 AWS IoT Greengrass 配置日志记录

CloudWatch Logs

如果您配置 CloudWatch 日志记录,则可在 Amazon CloudWatch 控制台的 Logs (日志) 页面上查看日志。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 Logs 时,请注意以下几点:

  • 您的 Greengrass 组角色必须允许 AWS IoT Greengrass 写入 CloudWatch Logs。要授予权限,请在您的组角色中嵌入以下内联策略

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

    您可以针对您的日志资源授予更细粒度的访问。有关更多信息,请参阅 Amazon CloudWatch 用户指南 中的为 CloudWatch Logs 使用基于身份的策略(IAM 策略)

  • 日志将发送到 CloudWatch Logs,并且限定了重试次数,以防没有 Internet 连接的情况。在重试次数用尽后,该事件将被丢弃。

  • 事务、内存以及其他限制将适用。有关更多信息,请参阅日志记录限制

文件系统日志

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

greengrass-root/ggc/var/log - crash.log - system - log files for each Greengrass system component - user - log files generated by each user-defined Lambda function

注意

默认情况下,greengrass-root/greengrass 目录。如果配置了写入目录,则日志位于该目录中。

在使用文件系统日志时,请注意以下几点:

  • 读取文件系统上的 AWS IoT Greengrass 日志需要根权限。

  • AWS IoT Greengrass 支持在日志数据的数量接近配置的限制时进行基于大小的轮换和自动清除。

  • crash.log 文件仅在文件系统日志中提供。此日志不会写入到 CloudWatch Logs。

  • 磁盘使用率限制将适用。有关更多信息,请参阅 日志记录限制

注意

AWS IoT Greengrass 核心软件 1.0 版本的日志存储在 greengrass-root/var/log 目录下。

默认日志记录配置

如果未显式配置日志记录设置,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 配置日志记录

您可以使用 AWS IoT Core 控制台或 AWS IoT Greengrass API 配置 AWS IoT Greengrass 日志记录。

注意

要允许 AWS IoT Greengrass 将日志写入 CloudWatch Logs,您的组角色必须允许所需的 CloudWatch Logs 操作

配置日志记录 (控制台)

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

  1. 在 AWS IoT Core 控制台中,选择 Greengrass,然后选择 Groups (组)

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

  3. 在组配置页面上,选择 Settings (设置)。

  4. 选择日志记录位置,如下所示:

    • 要配置 CloudWatch 日志记录,请对 CloudWatch logs configuration (CloudWatch 日志配置) 选择 Edit (编辑)

    • 要配置文件系统日志记录,请对 Local logs configuration (本地日志配置) 选择 Edit (编辑)。

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

  5. Configure Group logging (配置组日志记录) 页面上,选择 Add another log type (添加其他日志类型)。

  6. 选择事件源,如下所示:

    • 要记录来自用户定义的 Lambda 函数的事件,请选择 User Lambdas (用户 Lambdas)

    • 要记录来自 AWS IoT Greengrass 系统组件的事件,请选择 Greengrass system (Greengrass 系统)

    您可以选择一个组件或两个组件。

  7. 选择 Update

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

  9. 对于文件系统日志,指定磁盘空间限制。

  10. 选择 Save

配置日志记录 (API)

您可以使用 AWS IoT Greengrass 记录器 API 以编程方式配置日志记录。例如,使用 CreateLoggerDefinition 操作根据 LoggerDefinitionVersion 负载创建记录器定义,该定义使用以下语法:

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

LoggerDefinitionVersion 是一个或多个具有以下属性的 Logger 对象的数组:

Id

记录器的标识符。

Type

日志事件的存储机制。在使用 AWSCloudWatch 时,日志事件将发送到 CloudWatch Logs。使用 FileSystem 时,日志事件将存储在本地文件系统中。

有效值:AWSCloudWatchFileSystem

Component

日志事件的源。使用 GreengrassSystem 时,将记录来自 Greengrass 系统组件的事件。使用 Lambda 时,将记录来自用户定义的 Lambda 函数的事件。

有效值:GreengrassSystemLambda

Level

日志级别的阈值。低于此阈值的日志事件不会筛选出,也不会进行存储。

有效值:DEBUGINFO (推荐)、WARNERRORFATAL

Space

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

配置示例

以下 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 创建组版本,然后再部署组。

日志记录限制

AWS IoT Greengrass 具有以下日志记录限制。

每秒事务数

在启用到 CloudWatch 的日志记录后,日志记录组件在将日志事件发送到 CloudWatch 之前会在本地对这些事件进行批处理,使您能够以高于每个日志流每秒 5 个请求的速度进行日志记录。

内存

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

时钟偏差

在启用到 CloudWatch 的日志记录之后,日志记录组件将使用常规的签名版本 4 签名过程签署对 CloudWatch 的请求。如果 AWS IoT Greengrass Core设备上的系统时间不同步的时长超过 15 分钟,则请求会被拒绝。

磁盘使用量

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

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 函数的数量。

记录丢失

如果您的 AWS IoT Greengrass Core设备配置为仅记录到 CloudWatch 并且没有 Internet 连接,则您无法检索当前位于内存中的日志。

当 Lambda 函数终止时(例如,在部署期间),会有几秒钟的日志不被写入到 CloudWatch。

CloudTrail 日志

AWS IoT Greengrass 与 AWS CloudTrail 集成,后者是在 AWS IoT Greengrass 中提供用户、角色或 AWS 服务所采取操作的记录的服务。有关更多信息,请参阅使用 AWS CloudTrail 记录 AWS IoT Greengrass API 调用