AWS IoT Greengrass Version 1在 2023 年 6 月 30 日之前,将不再接收功能更新,并且将仅收到安全补丁和错误修复。有关更多信息,请参阅AWS IoT Greengrass V1维护政策。我们强烈建议您迁移到AWS IoT Greengrass Version 2,这增加了重要的新功能并支持其他平台。
本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
利用 AWS IoT Greengrass 日志进行监控
AWS IoT Greengrass 由云服务和 AWS IoT Greengrass 核心软件组成。这些区域有:AWS IoT Greengrass核心软件可以将日志写入亚马逊 CloudWatch 以及核心设备的本地文件系统。在核心上运行的 Lambda 函数和连接器也可以将日志写入 CloudWatch 日志和本地文件系统。您可以使用日志来监控事件和排查问题。所有 AWS IoT Greengrass 日志条目包含时间戳、日志级别和事件相关信息。对日志记录设置所做的更改在部署组后生效。
在组级别配置日志记录。有关说明如何为 Greengrass 组配置日志记录的步骤,请参阅为 AWS IoT Greengrass 配置日志记录。
访问 CloudWatch 日志
如果你配置 CloudWatch 日志记录,则可在日志亚马逊的页面 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 日志,限定了重试次数,以防没有 Internet 连接的情况。在重试次数用尽后,该事件将被丢弃。
-
事务、内存以及其他限制将适用。有关更多信息,请参阅 日志记录限制。
-
您的 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:*:*:*" ] } ] }
注意
您可以针对您的日志资源授予更细粒度的访问。有关更多信息,请参阅 。为使用基于身份的策略(IAM 策略) CloudWatch 日志中的亚马逊 CloudWatch 用户指南.
组角色是您创建并附加到 Greengrass 组的 IAM 角色。您可以使用控制台或 AWS IoT Greengrass API 管理组角色。
- 使用控制台
-
在AWS IoT控制台导航窗格,位于Manage,展开Greengrass 设备,然后选择组 (V1).
选择目标组。
-
选择查看设置. UNDER组角色,则可查看、关联或取消组角色的关联。
有关演示如何附加组角色的步骤,请参阅组角色。
- 使用 CLI
-
-
要查找组角色,请使用get-associated-role命令。
-
要附加组角色,请使用associate-role-to-group命令。
-
要删除组角色,请使用disassociate-role-from-group命令。
要了解如何获取组 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 GreengrassAPI来配置AWS IoT Greengrass日志记录。
注意
允许AWS IoT Greengrass将日志写入 CloudWatch 日志,您的组角色必须允许规定的 CloudWatch 记录操作.
配置日志记录 (控制台)
您可以在组的 Settings (设置) 页面上配置日志记录。
在AWS IoT控制台导航窗格,位于Manage,展开Greengrass 设备,然后选择组 (V1).
-
选择要在其中配置日志记录的组。
-
在组配置页面上,选择日志选项卡。
-
选择日志记录位置,如下所示:
-
配置 CloudWatch 日志记录,用于CloudWatch 日志配置,选择编辑.
-
要配置文件系统日志记录,请对 Local logs configuration (本地日志配置) 选择 Edit (编辑)。
您可以为一个位置或两个位置配置日志记录。
-
-
在编辑日志配置模式中,选择Greengrass 系统日志级别要么用户 Lambda 函数日志级别. 您可以选择一个组件或两个组件。
-
选择要记录的事件的最低级别。低于此阈值的事件会被过滤掉,也不会进行存储。
-
选择 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 日志。使用FileSystem
时,日志事件将存储在本地文件系统中。有效值:
AWSCloudWatch
,FileSystem
Component
-
日志事件的源。使用
GreengrassSystem
时,将记录来自 Greengrass 系统组件的事件。使用Lambda
时,将记录来自用户定义的 Lambda 函数的事件。有效值:
GreengrassSystem
,Lambda
Level
-
日志级别的阈值。低于此阈值的日志事件不会筛选出,也不会进行存储。
有效值:
DEBUG
、INFO
(推荐)、WARN
、ERROR
、FATAL
Space
-
用于存储日志的最大本地存储量 (以 KB 为单位)。此字段仅在
Type
设置为FileSystem
时适用。
配置示例
以下 LoggerDefinitionVersion
示例指定的日志记录配置可以:
-
启用文件系统
ERROR
及更高的日志记录AWS 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 创建组版本,然后再部署组。
日志记录限制
AWS IoT Greengrass 具有以下日志记录限制。
每秒事务数
登录到时 CloudWatch 启用后,日志记录组件会在将事件发送到之前在本地批量记录事件 CloudWatch,使您能够以高于每个日志流每秒 5 个请求的速度进行日志记录。
内存
如果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 并且没有 Internet 连接,您无法检索当前位于内存中的日志。
当 Lambda 函数终止时 (例如,在部署期间),会有几秒钟的日志不被写入到 CloudWatch.
CloudTrail 圆木
AWS IoT Greengrass运行时长AWS CloudTrail,提供用户、角色或AWS服务于AWS IoT Greengrass. 有关更多信息,请参阅使用 AWS IoT Greengrass 记录 AWS CloudTrail API 调用。