监控 AWS IoT Greengrass 日志
AWS IoT Greengrass 由云服务和 AWS IoT Greengrass 核心软件组成。AWS IoT Greengrass Core 软件可将日志写入 Amazon CloudWatch Logs 和核心设备的本地文件系统。在核心设备上运行的 Greengrass 组件也可以将日志写入 CloudWatch Logs 和本地文件系统。您可以使用日志来监控事件和排查问题。所有 AWS IoT Greengrass 日志条目包含时间戳、日志级别和事件相关信息。
默认情况下,AWS IoT Greengrass Core 软件仅将日志写入本地文件系统。您可以实时查看文件系统日志,因此您可以调试自己开发和部署的 Greengrass 组件。您还可以将核心设备配置为将日志写入 CloudWatch Logs,以便您可以在不访问本地文件系统的情况下对核心设备进行故障排除。有关更多信息,请参阅 支持登录 CloudWatch Logs。
访问文件系统日志
AWS IoT Greengrass Core 软件将日志存储在核心设备上的
文件夹中,其中
/logs/greengrass/v2
是 AWS IoT Greengrass 根文件夹的路径。日志文件夹具有以下结构:/greengrass/v2
└── logs ├── greengrass.log ├── greengrass_
/greengrass/v2
2021_09_14_15_0
.log ├──ComponentName
.log ├──ComponentName
_2021_09_14_15_0
.log └── main.log
-
greengrass.log
– AWS IoT Greengrass Core 软件日志文件。使用此日志文件可查看有关组件和部署的实时信息。此日志文件包含针对 Greengrass Nucleus(AWS IoT Greengrass Core 软件的核心)和插件组件(例如日志管理器和密钥管理器)的日志。 -
– Greengrass 组件日志文件。使用组件日志文件可查看有关核心设备上运行的 Greengrass 组件的实时信息。通用组件和 Lambda 组件将标准输出 (stdout) 和标准错误 (stderr) 写入这些日志文件。ComponentName
.log -
main.log
– 用于处理组件生命周期的main
服务的日志文件。此日志文件将始终为空。
有关插件、通用组件和 Lambda 组件之间的差异的更多信息,请参阅组件类型。
在使用文件系统日志时,请注意以下几点:
-
根用户权限
您必须具有根权限才能读取文件系统上的 AWS IoT Greengrass 日志。
-
日志文件轮换
AWS IoT Greengrass Core 软件每小时或在日志文件超过文件大小限制时轮换一次日志文件。轮换日志文件的文件名包含时间戳。例如,轮换的 AWS IoT Greengrass Core 软件日志文件可以命名为
greengrass_2021_09_14_15_0.log
。默认文件大小限制为 1024KB(1MB)。你可以在 Greengrass Nucleus 组件上配置文件大小限制。 -
日志文件删除
当 AWS IoT Greengrass Core 软件日志文件或 Greengrass 组件日志文件(包括轮换的日志文件)的大小超过磁盘空间限制时,AWS IoT Greengrass Core 软件会清理较早的日志文件。AWS IoT Greengrass Core 软件日志和每个组件日志的默认磁盘空间限制为 10240KB(10MB)。您可以在 Greengrass Nucleus 组件或日志管理器组件上配置 AWS IoT Greengrass Core 软件日志磁盘空间限制。您可以在日志管理器组件上配置每个组件的日志磁盘空间限制。
查看 AWS IoT Greengrass Core 软件日志文件
-
运行以下命令可实时查看日志文件。将
替换为 AWS IoT Greengrass 根文件夹路径。/greengrass/v2
查看组件的日志文件
-
运行以下命令可实时查看日志文件。将
或/greengrass/v2
C:\greengrass\v2
替换为 AWS IoT Greengrass 根文件夹的路径,将com.example.HelloWorld
替换为组件的名称。
您还可以使用 Greengrass CLI 的 logs
命令来分析核心设备上的 Greengrass 日志。要使用 logs
命令,您必须将 Greengrass Nucleus 配置为输出 JSON 格式的日志文件。有关更多信息,请参阅Greengrass 命令行界面 和日志。
访问 CloudWatch Logs
您可以部署日志管理器组件,将核心设备配置为写入 CloudWatch Logs。有关更多信息,请参阅 支持登录 CloudWatch Logs。然后,您可以在 Amazon CloudWatch 控制台的日志页面上或者使用 CloudWatch Logs API 查看日志。
- 日志组名称
-
/aws/greengrass/
componentType
/region
/componentName
日志组名称使用以下变量:
-
componentType
– 组件的类型,可以为以下类型之一:-
GreengrassSystemComponent
– 此日志组包括针对内核和插件组件的日志,它们与 Greengrass Nucleus 在同一 JVM 中运行。组件是 Greengrass Nucleus 的一部分。 -
UserComponent
– 此日志组包括针对设备上通用组件、Lambda 组件和其他应用程序的日志。组件不是 Greengrass Nucleus 的一部分。
有关更多信息,请参阅 组件类型。
-
-
region
– 核心设备使用的 AWS 区域。 -
componentName
– 组件名称。对于系统日志,此值为System
。
-
- 日志流名称
-
/
date
/thing/thingName
日志流名称使用以下变量:
-
date
– 日志的日期,例如2020/12/15
。日志管理器组件使用yyyy/MM/dd
格式。 -
thingName
– 核心设备名称。
注意
如果事物名称包含冒号 (
:
),则日志管理器会将冒号替换为加号 (+
)。 -
在使用日志管理器组件写入 CloudWatch Logs 时,请注意以下几点:
-
日志延迟
注意
我们建议您升级到日志管理器版本 2.3.0,该版本可减少轮换日志文件和活动日志文件的日志延迟。当您升级到日志管理器 2.3.0 时,我们建议您还升级到 Greengrass Nucleus 2.9.1。
日志管理器组件版本 2.2.8(及更早版本)仅处理和上传轮换日志文件中的日志。默认情况下,AWS IoT Greengrass Core 软件每小时或在达到 1024 KB 后轮换一次日志文件。因此,只有在 AWS IoT Greengrass Core 软件或 Greengrass 组件写入超过 1024 KB 的日志后,日志管理器组件才会上传日志。您可以配置更低的日志文件大小限制,从而更频繁地轮换日志文件。这会导致日志管理器组件更频繁地将日志上传到 CloudWatch Logs。
日志管理器组件版本 2.3.0(及更高版本)会处理并上传所有日志。写入新日志时,日志管理器版本 2.3.0(及更高版本)会处理并直接上传该活动日志文件,而不会等待其轮换。这意味着您可以在 5 分钟或更短时间内查看新日志。
日志管理器组件会定期上传新日志。默认情况下,日志管理器组件每 5 分钟上传一次新日志。您可以配置更短的上传间隔,通过配置
periodicUploadIntervalSec
,让日志管理器组件更频繁地将日志上传到 CloudWatch Logs。有关如何配置此周期性间隔的更多信息,请参阅配置。日志可以从同一 Greengrass 文件系统近乎实时地上传。如果您需要实时观察日志,可考虑使用文件系统日志。
注意
如果您使用不同的文件系统写入日志,日志管理器会恢复到日志管理器组件版本 2.2.8 及更早版本中的行为。有关访问文件系统日志的信息,请参阅访问文件系统日志。
-
时钟偏差
日志管理器组件使用标准签名版本 4 签名流程来创建 CloudWatch Logs 的 API 请求。如果核心设备上系统时间的不同步时长超过 15 分钟,则 CloudWatch Logs 会拒绝请求。有关更多信息,请参阅《AWS 一般参考》中的签名版本 4 签名流程。
访问系统服务日志
如果您将 AWS IoT Greengrass Core 软件配置为系统服务,则可以查看系统服务日志以排查问题,例如软件无法启动。
查看系统服务日志(CLI)
-
运行以下命令可查看 AWS IoT Greengrass Core 软件系统服务文件。
-
在 Windows 设备上,AWS IoT Greengrass Core 软件会为系统服务错误创建单独的日志文件。运行以下命令可查看系统服务错误日志。
在 Windows 设备上,您还可以使用事件查看器应用程序来查看系统服务日志。
查看 Windows 服务日志(事件查看器)
-
打开事件查看器应用程序。
-
选择 Windows 日志,将其展开。
-
选择应用程序以查看应用程序服务日志。
-
查找并打开来源为 greengrass 的事件日志。
支持登录 CloudWatch Logs
您可以部署日志管理器组件,将核心设备配置为将日志写入 CloudWatch Logs。您可以为 AWS IoT Greengrass Core 软件日志启用 CloudWatch Logs,也可以为特定 Greengrass 组件启用 CloudWatch Logs。
注意
Greengrass 核心设备的令牌交换角色必须允许核心设备写入 CloudWatch Logs,如以下示例 IAM 策略所示。如果您使用自动资源预置安装 AWS IoT Greengrass Core 软件,则您的核心设备具有这些权限。
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents", "logs:DescribeLogStreams" ], "Effect": "Allow", "Resource": "arn:aws:logs:*:*:*" } ] }
要将核心设备配置为将 AWS IoT Greengrass Core 软件日志写入 CloudWatch Logs,请创建一个部署,指定配置更新,为 aws.greengrass.LogManager
组件将 uploadToCloudWatch
设置为 true
。AWS IoT Greengrass核心软件日志包括针对 Greengrass Nucleus 和插件组件的日志。
{ "logsUploaderConfiguration": { "systemLogsConfiguration": { "uploadToCloudWatch": "true" } } }
要将核心设备配置为将 Greengrass 组件的日志写入 CloudWatch Logs,请创建一个部署,指定配置更新,将组件添加到组件日志记录配置列表。当您将组件添加到此列表时,日志管理器组件会将其日志写入 CloudWatch Logs。组件日志包括针对通用组件和 Lambda 组件的日志。
{ "logsUploaderConfiguration": { "componentLogsConfigurationMap": { "
com.example.HelloWorld
": { } } } }
部署日志管理器组件时,您还可以配置磁盘空间限制,以及核心设备在将日志文件写入 CloudWatch Logs 后是否将其删除。有关更多信息,请参阅 为 AWS IoT Greengrass 配置日志记录。
为 AWS IoT Greengrass 配置日志记录
您可以配置以下选项,为 Greengrass 核心设备自定义日志记录。要配置这些选项,请创建一个部署,为 Greengrass Nucleus 或日志管理器组件指定配置更新。
-
将日志写入 CloudWatch Logs
要远程对核心设备进行故障排除,您可以将核心设备配置为将 AWS IoT Greengrass Core 软件和组件日志写入 CloudWatch Logs。为此,请部署和配置日志管理器组件。有关更多信息,请参阅 支持登录 CloudWatch Logs。
-
删除上传的日志文件
要减少磁盘空间使用量,您可以将核心设备配置为在将日志文件写入 CloudWatch Logs 后删除日志文件。有关更多信息,请参阅日志管理器组件的
deleteLogFileAfterCloudUpload
参数,您可以为 AWS IoT Greengrass Core 软件日志和组件日志指定该参数。 -
日志磁盘空间限制
要限制磁盘空间使用量,您可以在核心设备上为每个日志(包括其轮换的日志文件)配置最大磁盘空间。例如,您可以为
greengrass.log
和轮换的greengrass.log
文件配置最大组合磁盘空间。有关更多信息,请参阅 Greengrass Nucleus 组件的logging.totalLogsSizeKB
参数和日志管理器组件的diskSpaceLimit
参数,您可以为 AWS IoT Greengrass Core 软件日志和组件日志指定这些参数。 -
日志文件大小限制
您可以为每个日志文件配置最大文件大小。日志文件超过此文件大小限制后,AWS IoT Greengrass Core 软件会创建新的日志文件。日志管理器组件版本 2.28(及更早版本)仅将轮换的日志文件写入 CloudWatch Logs,因此您可以指定较低的文件大小限制,以便更频繁地将日志写入 CloudWatch Logs。日志管理器组件版本 2.3.0(及更高版本)会处理和上传所有日志,而不是等待轮换。有关更多信息,请参阅 Greengrass Nucleus 组件的日志文件大小限制参数 (
logging.fileSizeKB
)。 -
最低日志级别
您可以配置 Greengrass Nucleus 组件写入文件系统日志的最低日志级别。例如,您可以指定
DEBUG
级别日志以帮助进行故障排除,也可以指定ERROR
级别日志以减少核心设备创建的日志量。有关更多信息,请参阅 Greengrass Nucleus 组件的日志级别参数 (logging.level
)。您还可以配置日志管理器组件写入 CloudWatch Logs 的最低日志级别。例如,您可以指定更高的日志级别以降低日志记录成本
。有关更多信息,请参阅日志管理器组件的 minimumLogLevel
参数,您可以为 AWS IoT Greengrass Core 软件日志和组件日志指定该参数。 -
将日志写入 CloudWatch Logs 的间隔
要增加或减少日志管理器组件将日志写入 CloudWatch Logs 的频率,您可以配置要写入新日志文件的间隔。例如,您可以指定比默认 5 分钟间隔更短的间隔,以更快地查看 CloudWatch Logs 中的日志。您可以指定更高的间隔以降低成本,因为日志管理器组件会将日志文件批处理成更少的请求。有关更多信息,请参阅日志管理器组件的上传间隔参数 (
periodicUploadIntervalSec
)。 -
日志格式
您可以选择 AWS IoT Greengrass Core 软件是以文本格式,还是以 JSON 格式写入日志。如果您阅读日志,请选择文本格式;如果您使用应用程序读取或解析日志,则选择 JSON 格式。有关更多信息,请参阅 Greengrass Nucleus 组件的日志格式参数 (
logging.format
)。 -
本地文件系统日志文件夹
您可以在核心设备上将日志文件夹从
更改为另一个文件夹。有关更多信息,请参阅 Greengrass Nucleus 组件的输出目录参数 (
/logs/greengrass/v2
logging.outputDirectory
)。
AWS CloudTrail日志
AWS IoT Greengrass 与 AWS CloudTrail 集成,后者是在 AWS IoT Greengrass 中记录用户、角色或 AWS 服务 服务所执行操作的服务。有关更多信息,请参阅 使用 AWS IoT Greengrass V2 记录 AWS CloudTrail API 调用。