View a markdown version of this page

配置 Amazon IoT 日志记录 - Amazon IoT Core
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

配置 Amazon IoT 日志记录

在监控和记录 Amazon IoT 活动之前,必须使用 Amazon IoT 控制台、CLI 或 API 启用日志记录。您可以为三个 Amazon IoT 级别配置日志记录:账户级别、事件级别或资源特定级别。 Event-level 而且特定资源的日志记录仅适用于 V2 日志记录。使用 V1 日志记录的客户必须迁移到 V2 才能访问这些功能。查看详情

在考虑如何配置 Amazon IoT 日志记录时,除非另有说明,否则账户级别的日志记录配置将决定如何记录 Amazon IoT 活动。首先,你可能需要获取默认日志级别为 INFO 或 DEBUG 的详细日志。查看初始日志后,您可以将默认日志级别更改为不那么详细的级别,例如账户或事件级别的 WARN 或 ERROR,并对可能需要更多关注的资源设置更详细的特定资源日志级别。日志级别可随时更改。

本主题介绍云端登录。 Amazon IoT有关设备端日志记录和监控的信息,请参阅将设备端日志上传到。 CloudWatch

有关登录和监控的信息 Amazon IoT Greengrass,请参阅登录和监控 Amazon IoT Greengrass

配置 V2 登录 Amazon IoT

确定您的日志版本

NotConfiguredException 如果未启用 V2 日志记录,则 GetV2LoggingOptions API 将返回。当使用 V1 日志记录或未配置日志记录时,就会出现此错误。

了解 V2 日志记录功能

V2 日志记录提供两项关键功能:事件级日志记录和特定资源日志。 Event-levellogging 支持使用可自定义的日志级别和日志组目标进行有针对性的 CloudWatch 日志记录配置。 Resource-specific 日志记录允许您按事物组、来源 IP、客户端 ID 或主体 ID 筛选日志。这些功能共同提供了对物联网运营的精细控制和全面的可见性,通过消除不必要的日志记录活动来提高日志可搜索性并降低成本。

从 V1 迁移到 V2

您可以通过 Amazon CLI 或 SDK 使用 SetV2LoggingOptions API 迁移到 V2 日志记录。迁移后, Amazon IoT 自动将所有日志路由到 CloudWatch 日志组 “AWSIotLogsV2”。重要:如果您的下游应用程序或资源消耗来自 “AWSIotLogs” 的信息,请将其更新为使用相应的日志组路径。

配置日志记录角色和策略

在启用登录之前 Amazon IoT,您必须创建一个 IAM 角色和一个 Amazon IoT 授予代表您向 Amazon IoT 日志组写入 CloudWatch 日志活动的权限的策略。您还可以在 Amazon IoT 控制台的 “日志” 部分使用所需的策略生成 IAM 角色

注意

在启用 Amazon IoT 日志记录之前,请确保您了解 CloudWatch 日志访问权限。有权访问 CloudWatch 日志的用户可以查看您的设备上的调试信息。有关更多信息,请参阅 Amazon CloudWatch 日志的身份验证和访问控制

如果您预计负载测试会 Amazon IoT Core 导致高流量模式,请考虑禁用 IoT 日志记录以防止限制。如果检测到高流量,我们的服务可能会禁用您账户中的日志记录。

以下显示如何为 Amazon IoT Core 资源创建日志记录角色和策略。

创建日志记录角色

要创建日志记录角色,请打开 IAM 控制台的角色中心并选择 Create role(创建角色)。

  1. 选择受信任的实体下,选择 Amazon 服务。然后在使用案例下,选择 IoT。如果您看不到 IoT,请在其他 Amazon 服务的使用案例:下拉菜单中输入并搜索 IoT。选择下一步

  2. Add permissions(添加权限)页面上,您将看到自动附加到服务角色的策略。选择下一步

  3. Name, review, and create(命名、检查和创建)页面上,为此角色输入 Role name(角色名称)和 Role description(角色描述),然后选择 Create role(创建角色)。

日志记录角色策略

以下策略文档提供了角色策略和信任策略,允许您代表您 Amazon IoT 向其 CloudWatch 提交日志条目。如果您使用自定义日志组配置事件级 CloudWatch 日志记录,则必须更新角色策略以包含自定义资源 ARN。

如果您还 适用于 LoRaWAN 的 Amazon IoT Core 允许提交日志条目,则会看到为您创建的记录这两项活动的策略文档。

注意

在您创建日志记录角色时已为您创建这些文档。这些文档包含变量 ${partition}, ${region} 、和 ${accountId} ,必须将其替换为您的值。

  • 将分区替换为该区域的分区。

  • 将区域替换为您使用的 Amazon 区域。确保使用的 Amazon 区域与在设备上配置 Amazon CLI 时使用的区域相同。

  • 将账户 ID 替换为您的 Amazon 账户 ID。

角色策略:

{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents", "logs:PutMetricFilter", "logs:PutRetentionPolicy", "iot:GetLoggingOptions", "iot:SetLoggingOptions", "iot:SetV2LoggingOptions", "iot:GetV2LoggingOptions", "iot:SetV2LoggingLevel", "iot:ListV2LoggingLevels", "iot:DeleteV2LoggingLevel" ], "Resource": [ "arn:aws:logs:us-east-1:123456789012:log-group:AWSIotLogsV2:*" ] } ] }

仅记录 Amazon IoT Core 活动的信任政策:

{ "Version":"2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "iot.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

Amazon IoT 由于 IAM 角色权限不足, CloudWatch 日志记录可能无法将日志发布到日志。发生这种情况时,请检查 CloudWatch 日志指标以调查和排除故障。

在... 中配置登录 Amazon IoT (控制台)

本节介绍如何使用 Amazon IoT 控制台配置 Amazon IoT 日志记录。您可以设置账户级别、事件级别和特定资源的日志记录。

进行配置 Amazon IoT 记录:
  1. 登录 Amazon IoT 控制台。有关更多信息,请参阅 打开 Amazon IoT 控制台

  2. 在左侧导航窗格中,选择日志(以前是 “设置” 下的部分)。

  3. 配置账户级别日志:账户级别日志记录适用于您的所有 Amazon IoT 队列(设备或终端节点),除非被事件级别或资源特定设置覆盖。

    1. 在 “ Account-level 登录” 下,选择 “管理账户级别日志” 以进行更新。

    2. 选择 “启用日志记录” 复选框以开始向其发送日志 CloudWatch。当未选中 “启用日志记录” 时,无论事件级别或资源级别的日志配置如何,都 Amazon IoT 不会向 CloudWatch 日志组发送任何日志。

    3. IAM 日志角色下,从下拉列表中选择现有角色。您可以查看角色详细信息以检查角色权限。或者,选择创建新角色来设置新的 IAM 角色。日志角色提供允许代表您 Amazon IoT 向提交日志条目的策略。 CloudWatch 如果您使用自定义日志组配置事件级 CloudWatch 日志记录,则必须更新角色策略以包括该日志组的 ARN。

    4. 选择与要在日志中显示的日志条目的详细https://docs.amazonaws.cn/iot/latest/developerguide/configure-logging.html#log-level级别相对应的默认 CloudWatch 日志级别。注意:日志级别 “DEBUG” 提供了最多的细节,但会增加 CloudWatch 成本。 CloudWatch 无法在账户级别配置日志组目标。但是,您可以为单个事件类型指定自定义日志组,如下一节所述。

    5. 选择 “更新日志” 以保存您的更改。

  4. Event-level 日志记录允许您有选择地捕获相关事件的日志,并将其定向到专用的 CloudWatch 日志组。这使您可以灵活地按用例整理日志以提高可发现性,与不同的受众共享,并通过启用日志和根据事件严重程度设置日志级别来降低 CloudWatch 成本。

    配置事件级日志:事件级日志记录捕获特定 Amazon IoT 事件,例如客户端身份验证尝试。这些设置会覆盖 Account-Level 日志记录。

    1. 在 “Event-level 日志” 部分下,选择 “管理事件级日志” 以进行更新。

    2. 默认情况下,事件类型继承账户级别的日志配置。注意:配置特定资源的日志记录时,它会覆盖账户和事件级别的设置。

    3. 要修改单个事件的设置,请单击相应事件行中的值。您可以调整日志级别和 CloudWatch 日志组目标。指定自定义 CloudWatch 日志组目标时,必须验证 IAM 角色策略是否包含新日志组的权限。未能更新角色策略将 Amazon IoT 阻止将日志写入自定义日志组。做出选择后,点击复选标记以确认您的选择。“已修改” 列将显示 “是”,表示待处理的更改。

    4. 单击 “更新日志” 以应用您的更改,或选择 “取消” 以丢弃。

  5. 配置 Resource-specific 覆盖: Resource-specific 替代将日志记录设置应用于所选资源。资源可以是事物组、来源 IP、客户端 ID 或主体 ID。 Resource-specific 日志配置会覆盖账户级别和事件级别的设置。启用后,它将在为指定资源配置的日志记录级别上为所有事件类型生成日志。例如,您可以为特定事物设置调试级别的日志记录,同时为所有其他事物保留信息级别的日志记录。

    1. 在 “覆盖” 部分中选择 “添加特定资源的 Resource-specific 替代”。

    2. 选择日志目标:事物组、源 IP、客户端 ID 或主体 ID。

    3. 为所选目标类型输入相应的日志目标值。

    4. 从日志级别部分的下拉菜单中选择所需的 Resource-specific 日志级别。

    5. 单击 “提交” 添加改写或单击 “取消” 以放弃更改。

    6. 要修改现有的特定资源覆盖,请选中该资源旁边的复选框,然后单击 “移除” 以删除该替代或单击 “编辑” 进行修改。

启用日志记录后,请访问 查看 Amazon IoT 在 CloudWatch 控制台中登录 以了解有关查看日志条目的更多信息。

配置账户并 Event-level 登录 Amazon IoT (CLI)

本节介绍如何使用 CLI 为 Amazon IoT 配置全局日志。

您可以选择配置 Event-level 日志记录。 Event-level 日志记录捕获事件级别的日志信息,例如身份验证和授权或证书创建事件。您可以在事件级别自定义日志级别和 CloudWatch 日志组目的地。 Event-level 与账户级别的日志记录相比,日志记录在更具针对性的级别上运行,因此会覆盖账户级别的日志记录设置。这种分层方法允许您根据操作重要性和成本考虑为不同类型的事件维护不同的日志记录策略。

注意

您需要提供要使用角色的 Amazon 资源名称(ARN)。如果需要创建用于日志记录的角色,请参阅 创建日志记录角色,然后继续操作。为任何事件类型指定自定义 CloudWatch日志组时,请确保您的日志记录角色具有目标日志组所需的权限。

用于调用 API 的委托人对于您的日志记录角色必须具有传递角色权限

您还可以使用 API 中与此处显示的 CLI 命令相对应的方法通过 Amazon API 执行此过程。

使用 CLI 为配置默认日志 Amazon IoT
  1. 使用 set-v2-logging-options 命令为您的账户设置日志记录选项。

    aws iot set-v2-logging-options \ --event-configurations event-configuration-list \ --role-arn logging-role-arn \ --default-log-level log-level

    其中:

    --role-arn

    授予在日志中 CloudWatch 写入日志的 Amazon IoT 权限的角色 ARN。 Role-arn 初始设置需要配置。

    --default-log-level

    要使用的日志级别。有效值为:ERRORWARNINFODEBUG、或DISABLED。 Default-log-level 初始设置需要配置。

    --no-disable-all-logs

    启用所有 Amazon IoT 日志记录的可选参数。使用此参数可在当前禁用日志记录时启用日志记录。

    --disable-all-logs

    禁用所有 Amazon IoT 日志记录的可选参数。使用此参数可在当前启用日志记录时禁用日志记录。

    --event-configurations

    此参数是可选的,允许您为单个事件类型自定义日志记录设置:

    • EventType:覆盖账户级别设置的事件类型

    • LogLevel:使用 DEBUG、INFO、ERROR、WARN 或 DISABLED 覆盖账户级别设置

    • 日志目标:为日志传送指定自定义 CloudWatch 日志组

    您可以为每种事件类型单独配置日志记录级别和日志目的地。如果未指定,则事件将继承账户级别的设置

    aws iot set-v2-logging-options \ --event-configurations "[{\"eventType\":\"Publish-In\",\"logLevel\":\"INFO\",\"logDestination\":\"examplePublishInLogGroup\"}]"
  2. 使用 get-v2-logging-options 命令获取当前日志记录选项。

    aws iot get-v2-logging-options \ --verbose

    其中:

    --verbose

    一个可选参数,使您能够检索所有事件类型及其配置。

启用日志记录后,请访问 查看 Amazon IoT 在 CloudWatch 控制台中登录 以了解有关查看日志条目的更多信息。

注意

Amazon IoT 继续支持较旧的命令(set-logging-optionsget-logging-options)来设置和获取账户的全局登录信息。请注意,使用这些命令时,生成的日志将包含纯文本而不是 JSON 有效载荷,并且日志记录延迟通常会更高。将不会再对这些较早命令的实施进行更多改进。我们建议您使用 “v2” 版本来配置日志选项,并在可能的情况下更改使用旧版本的旧版应用程序。

在中配置 Resource-specific 覆盖 Amazon IoT (CLI)

本节介绍如何使用 CLI 为 Amazon IoT 配置 Resource-specific 替代。 Resource-specific 覆盖允许您为由事物组、客户端 ID、来源 IP 或主体 ID 标识的特定资源指定日志记录级别。启用特定资源的日志记录后,它会覆盖账户级别和事件级别的设置。所有事件类型都将在配置的日志记录级别为指定资源生成日志,即使这些事件在事件级别配置中被禁用也是如此。

事物组可包含其它事物组以创建分层关系。此流程介绍如何配置单个事物组的日志记录。您可以将此流程应用于层次结构中的父事物组,以配置层次结构中所有事物组的日志记录。您也可以将此流程应用于子事情组,以覆盖其父级的日志记录配置。

一个事物可以是一个事物组的成员。这种成员资格允许该事物继承应用于该事物组的配置、策略和设置。事物组用于集体管理和应用设置到多个事物,而不是单独处理每个事物。当您的客户端 ID 与事物名称匹配时, Amazon IoT Core 会自动将客户端会话与相应的事物资源关联起来。这允许客户端会话继承应用于该事物所属事物组的配置和设置,包括日志记录级别。如果您的客户端 ID 与事物名称不匹配,您可以启用独占事物附件来建立关联。有关更多信息,请参阅 将 Amazon IoT 事物关联到 MQTT 客户端连接

除了事物组之外,您还可以录入目标,例如设备的客户端 ID、源 IP 和主体 ID。

注意

您需要提供要使用角色的 Amazon 资源名称(ARN)。如果需要创建用于日志记录的角色,请参阅 创建日志记录角色,然后继续操作。

用于调用 API 的委托人对于您的日志记录角色必须具有传递角色权限

您还可以使用 API 中与此处显示的 CLI 命令相对应的方法通过 Amazon API 执行此过程。

使用 CLI 为配置 Resource-specific 替代 Amazon IoT
  1. 在使用以下命令配置特定资源日志记录之前,启用账户级日志记录:aws iot set-v2-logging-options 命令

  2. 使用该set-v2-logging-level命令配置 Resource-specific覆盖。请参阅以下事物组配置示例:

    aws iot set-v2-logging-level \ --log-target targetType=THING_GROUP,targetName=thing_group_name \ --log-level log_level
    --log-target

    您要配置日志记录的资源的类型和名称。targetType 值必须是下列项之一:THING_GROUP | CLIENT_ID | SOURCE_IP | PRINCIPAL_ID。log-target 参数值可以是文本(如前面的命令示例所示),也可以是 JSON 字符串,如以下示例所示。

    aws iot set-v2-logging-level \ --log-target '{"targetType": "THING_GROUP","targetName": "thing_group_name"}' \ --log-level log_level
    --log-level

    为指定资源生成日志时使用的日志记录级别。有效值为:DEBUGINFOERRORWARNDISABLED

  3. 使用 list-v2-logging-levels 命令列出当前配置的日志记录级别。

    aws iot list-v2-logging-levels
  4. 使用 delete-v2-logging-level 命令删除资源特定的日志记录级别,比如下面的例子。

    aws iot delete-v2-logging-level \ --target-type "THING_GROUP" \ --target-name "thing_group_name"
    aws iot delete-v2-logging-level \ --target-type=CLIENT_ID --target-name=ClientId1
    --target-type

    target-type 值必须是下列项之一:THING_GROUP | CLIENT_ID | SOURCE_IP | PRINCIPAL_ID

    --target-name

    要删除日志记录级别的事物组的名称。

日志级别

这些日志级别确定记录的事件,并应用于默认日志级别和资源特定的日志级别。

ERROR

导致操作失败的任何错误。

示例:由于证书过期,无法对设备进行身份验证。

日志仅包含 ERROR 信息。

警告

可能导致系统中出现不一致问题,但不会导致操作失败的所有情况。

示例:接近消息速率限制。

日志包括 ERROR 和 WARN 信息。

INFO

High-level 有关事物流动的信息。

示例:客户端成功订阅了 MQTT 主题。

日志包括 INFO、ERROR 和 WARN 信息。

调试

可能有助于调试问题的信息。

示例:IoT 规则引擎检测到发布到规则主题 “rule/test” 的消息并成功开始执行。该规则配置为 RepublishAction。

日志包括 DEBUG、INFO、ERROR 和 WARN 信息。

DISABLED

所有日志记录均处于禁用状态。