利用 Amazon IoT Greengrass 日志进行监控 - Amazon IoT Greengrass
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

Amazon IoT Greengrass Version 1在 2023 年 6 月 30 日之前,不再接收功能更新,只会收到安全补丁和错误修复。有关更多信息,请参阅 。Amazon IoT Greengrass V1维护政策. 强烈建议您迁移到Amazon IoT Greengrass Version 2,它补充说重要新功能对其他平台的支持.

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

利用 Amazon IoT Greengrass 日志进行监控

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

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

访问 CloudWatch 日志

如果你配置 CloudWatch 日志记录,则可在日志亚马逊的页面 CloudWatch 控制台。Amazon 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 日志,限定了重试次数,以防没有 Internet 连接的情况。在重试次数用尽后,该事件将被丢弃。

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

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

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

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

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

     

    使用控制台
    1. 在Amazon IoT控制台导航窗格,位于Manage,展开Greengrass 设备,然后选择组 (V1).

    2. 选择目标组。

    3. 选择查看设置. UNDER组角色,则可查看、关联或取消组角色的关联。

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

     

    使用 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 目录。如果配置了写入目录,则日志位于该目录中。

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

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

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

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

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

注意

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

默认日志记录配置

如果未显式配置日志记录设置,Amazon IoT Greengrass 将在第一个组部署后使用以下默认日志记录配置。

Amazon IoT Greengrass 系统组件
  • Type - FileSystem

  • 组件 - GreengrassSystem

  • Level - INFO

  • 空格 - 128 KB

用户定义的Lambda 函数
  • Type - FileSystem

  • 组件 - Lambda

  • Level - INFO

  • 空格 - 128 KB

注意

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

为 Amazon IoT Greengrass 配置日志记录

您可以使用Amazon IoT控制台或Amazon IoT GreengrassAPI来配置Amazon IoT Greengrass日志记录。

注意

允许Amazon IoT Greengrass将日志写入 CloudWatch 日志,您的组角色必须允许规定的 CloudWatch 记录操作.

配置日志记录 (控制台)

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

  1. 在Amazon IoT控制台导航窗格,位于Manage,展开Greengrass 设备,然后选择组 (V1).

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

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

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

    • 配置 CloudWatch 日志记录,用于CloudWatch 日志配置,选择编辑.

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

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

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

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

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

配置日志记录 (API)

您可以使用 Amazon 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 示例指定的日志记录配置可以:

  • 启用文件系统ERROR及更高的日志记录Amazon IoT Greengrass系统组件。

  • 启用文件系统INFO(及更高版本) 用户定义的 Lambda 函数的日志记录。

  • 启用。 CloudWatch INFO(及更高版本) 用户定义的 Lambda 函数的日志记录。

{ "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 创建组版本,然后再部署组

日志记录限制

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

每秒事务数

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

内存

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

时钟偏差

登录到时 CloudWatch 启用时,日志记录组件将签署对的请求 CloudWatch使用常规的签名版本 4 签名流程。如果系统时间在Amazon 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

Amazon IoT Greengrass 系统组件日志的最大本地存储量。

lambda-space

Lambda 函数日志的最大本地存储量。

lambda-count

已部署的 Lambda 函数的数量。

记录丢失

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

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

CloudTrail 圆木

Amazon IoT Greengrass运行时长Amazon CloudTrail,提供用户、角色或Amazon服务于Amazon IoT Greengrass. 有关更多信息,请参阅使用 Amazon IoT Greengrass 记录 Amazon CloudTrail API 调用