利用 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 日志进行监控

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

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

访问 CloudWatch 日志

如果您配置了 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 日志将发送到日志,重试次数有限。在重试次数用尽后,该事件将被丢弃。

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

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

    { "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 策略)

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

     

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

    2. 选择目标组。

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

      有关演示如何附加组角色的步骤,请参阅组角色

     

    使用 CLI

     

    要了解如何获取组 ID 以使用这些命令,请参阅获取组 ID

访问文件系统日志

如果您配置文件系统日志记录,则日志文件存储在核心设备上的 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 目录。如果配置了写入目录,则日志位于该目录中。

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

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

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

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

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

注意

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 控制台或 AWS IoT Greengrass API 配置 AWS IoT Greengrass 日志记录。

注意

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

配置日志记录 (控制台)

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

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

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

  3. 在组配置页面上,选择日志选项卡。

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

    • 要配置 CloudWatch 日志记录,要配置CloudWatch 日志,请选择编辑

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

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

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

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

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

配置日志记录 (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 日志。使用 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,因此您可以以高于每个日志流每秒五个请求的速率进行记录。

内存

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

时钟偏差

启用登录后 CloudWatch ,日志组件将 CloudWatch使用正常的签名版本 4 签名流程对请求进行签名。如果 AWS IoT Greengrass 核心设备上的系统时间不同步的时长超过 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核心设备配置为仅登录 CloudWatch 且没有互联网连接,则无法检索内存中当前的日志。

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

CloudTrail 日志

AWS IoT Greengrass 使用 AWS CloudTrail 运行,后者是在 AWS IoT Greengrass 中记录用户、角色或 AWS 服务所执行操作的服务。有关更多信息,请参阅 使用 AWS CloudTrail 记录 AWS IoT Greengrass API 调用