Google Cloud IoT Core 将于 2023 年 8 月 16 日停用。如需了解详情,请与您的 Google Cloud 客户支持团队联系。

查看设备日志

Cloud IoT Core 可以选择将设备活动日志发送到 Cloud Logging。设备活动日志包含设备连接和错误等信息。这些称为事件

系统不会记录身份验证失败的情况。设备必须通过 Cloud IoT Core 的身份验证才能生成事件日志。

设备事件生命周期

所有 Cloud IoT Core 设备都遵循类似的生命周期,并发生以下事件。其中一些事件及其底层详细信息会在设备日志中捕获。

  1. 连接到 Cloud IoT Core。
  2. 发送和接收遥测和/或状态事件。
  3. 断开与 Cloud IoT Core 的连接。

这些事件发生和记录的方式取决于设备是使用 MQTT 网桥还是 HTTP 网桥

记录设备活动

Cloud IoT Core 使用日志级别来确定将哪些设备事件发送到 Cloud Logging。您可以为注册表及其所有设备或个别设备设置设备日志级别。为注册表设置的日志级别适用于注册表中的所有设备。为单个设备设置的日志级别会替换其注册表的设置。

下表介绍了可用的设备日志级别:

日志级别 说明
系统不会收集设备事件日志。
ERROR 捕获所有 ERROR 事件,例如发布失败。如需查看 ERROR 事件的完整列表,请参阅记录的设备事件列表
INFO(仅限 MQTT) 捕获所有 INFO 事件,例如通过 MQTT 建立的连接和断开连接的情况。还会捕获所有 ERROR 事件。如需查看 INFO 事件的完整列表,请参阅记录的设备事件列表
DEBUG 捕获所有 DEBUG 事件,例如发布、订阅和检测信号。有助于精确定位特定设备的问题。还会捕获所有 ERRORINFO 事件。如需查看 DEBUG 事件的完整列表,请参阅记录的设备事件列表。如需了解详情,请参阅设备调试日志记录

记录的设备事件列表

下表显示了:

  • 系统会记录哪些设备事件。
  • Cloud Logging 中记录的事件的 eventType
  • 是否记录每个事件的成功和/或失败。
  • 必须在注册表或设备上设置的日志级别才能记录事件。

MQTT 网桥

设备事件 eventType 成功 失败
向服务器进行身份验证 不适用 不记录* 不记录
连接到服务器 CONNECT INFO ERROR
断开与服务器的连接 DISCONNECT INFO 不记录
将设备连接到网关 ATTACH_TO_GATEWAY INFO ERROR
将设备与网关分离 DETACH_FROM_GATEWAY INFO ERROR
将遥测事件或状态发布到服务器 PUBLISH(针对 /devices/{device-id}/events/devices/{device-id}/state MQTT 主题) DEBUG ERROR
接收配置更新 PUBLISH(在 /devices/{device-id}/config MQTT 主题上) DEBUG ERROR
订阅 Pub/Sub 配置主题 SUBSCRIBE DEBUG ERROR
退订 Pub/Sub 配置主题 UNSUBSCRIBE DEBUG ERROR
从服务器收到的 PUBACK PUBACK DEBUG ERROR
不断发送发送到服务器的 ping PINGREQ DEBUG ERROR
从服务器发送至设备的命令 PUBLISH DEBUG ERROR
命令 PUBACK 已发送到服务器 PUBACK DEBUG ERROR

*如果 MQTT 身份验证成功,设备将连接到 Cloud IoT Core 并记录一个 CONNECT 事件,而不是“对服务器进行身份验证”事件。

HTTP 网桥

设备事件 methodName 成功 失败
向服务器进行身份验证 不适用 不记录** 不记录
发布遥测事件 google.cloud.iot.v1.PublishEvent DEBUG ERROR
设置设备状态 google.cloud.iot.v1.SetDeviceState DEBUG ERROR
接收配置更新 google.cloud.iot.v1.GetDeviceConfig DEBUG ERROR

** 如果 HTTP 身份验证成功,则设备连接到 Cloud IoT Core,并且记录相关请求消息(如果收到配置则记录 GET;如果发布消息则记录 POST)。

启用、更改和停用设备日志记录

当您在 Google Cloud Console 或使用 gcloud 工具中创建或修改注册表或设备时,可以选择向 Cloud Logging 报告哪些类型的日志。

设置注册表的日志级别

您可以使用 Google Cloud Console 或 gcloud 为注册表启用、更改或停用设备日志。注册表日志设置会自动应用于注册表中的所有设备。

控制台

如需创建或修改注册表并设置其日志级别,请执行以下操作:

  1. 转到 Google Cloud Console 中的注册表页面。

    转到注册表页面

  2. 点击页面顶部的创建注册表

    如需修改现有注册表,请在注册表页面上点击其 ID,然后点击页面顶部的修改注册表

  3. Stackdriver Logging 下,选择日志级别。

  4. 点击创建(如果创建新注册表)或更新(如果修改现有注册表)。

gcloud

如需创建注册表并设置其日志级别,请运行带有 --log-level 标志的 gcloud iot registries create 命令:

gcloud iot registries create REGISTRY_ID \
    --project=PROJECT_ID \
    --region=REGION \
    [--event-notification-config=topic=TOPIC,[subfolder=SUBFOLDER] [--event-notification-config=...]]
    [--state-pubsub-topic=STATE_PUBSUB_TOPIC] \
    --log-level={NONE|INFO|ERROR|DEBUG}

如需更新设备的日志级别,请运行带有 --log-level 标志的 gcloud iot registries update 命令:

gcloud iot registries update REGISTRY_ID \
    --project=PROJECT_ID \
    --region=REGION \
    --log-level={NONE|INFO|ERROR|DEBUG}

为设备设置日志级别

您可以使用 Google Cloud Console 或 gcloud 为设备启用、更改或停用设备日志。设备的日志级别会替换其注册表的日志级别。

控制台

如需为新设备或现有设备设置日志级别,请执行以下操作:

  1. 转到 Google Cloud Console 中的注册表页面。

    转到注册表页面

  2. 点击设备的注册表的 ID。

  3. 在左侧的注册表菜单中,点击设备

  4. 如需创建新设备,请点击创建设备

    如需修改现有设备,请在设备页面上点击其 ID,然后点击页面顶部的修改设备

  5. Stackdriver Logging 下,选择日志级别。

  6. 点击创建(如果是创建新设备)或更新(如果是修改现有设备)。

gcloud

如需创建设备和设置日志级别,请运行带有 --log-level 标志的 gcloud iot devices create 命令:

gcloud iot devices create DEVICE_ID \
    --project=PROJECT_ID \
    --region=REGION \
    --registry=REGISTRY_ID \
    --public-key path=PUBLIC_KEY,type=TYPE \
    --log-level={NONE|INFO|ERROR|DEBUG}

如需更新设备的日志级别,请运行带有 --log-level 标志的 gcloud iot devices update 命令:

gcloud iot devices update DEVICE_ID \
    --project=PROJECT_ID \
    --region=REGION \
    --registry=REGISTRY_ID \
    --log-level={NONE|INFO|ERROR|DEBUG}

查看日志

您可以在 Google Cloud 控制台的日志浏览器中查看项目的设备活动日志。在日志名称菜单中选择 device_activity

如需了解详情,请参阅使用日志浏览器

API

如需通过 Logging API 读取日志条目,请参阅 entries.list

gcloud

如需使用 gcloud 读取日志条目,请参阅读取日志条目

导出设备日志

您可以按照导出其他类型日志的方式导出设备日志。如需详细了解如何导出日志,请参阅导出日志

以下示例说明了您可能需要导出设备日志的原因:

  • 如需长时间保留设备日志或使用更强大的搜索功能,您可以将设备日志的副本导出到 Cloud Storage、BigQuery 或 Pub/Sub。使用 Pub/Sub,您可以将内容导出到其他应用、其他代码库和第三方。

  • 如需管理整个组织范围内与您相关的设备日志,您可以创建聚合导出接收器,以便从组织中的任何项目或所有项目导出日志。

设备日志记录限制

设备日志配额和限制适用于项目级别。它们会单独测量,不计入其他 Cloud Logging 配额和限制。如果设备日志配额用尽,其他服务的 Cloud Logging 配额不受影响。反之亦然。

设备日志配额基于两个因素:

  • 每秒记录的设备事件数。事件包括发布、连接、断开连接等。
  • 每分钟记录的设备事件的总大小(以字节为单位)。

如果超出任一设备日志配额,则设备日志会暂停。

如需查看设备日志配额和限制的列表,请参阅配额和限制

最佳做法

设备调试日志记录

已记录设备事件列表所示,为注册表或单个设备设置 DEBUG 日志级别可能会生成大量日志记录信息。因此,如果您为拥有大量设备的注册表启用了调试日志记录功能,日志记录可能会由于日志的高速和数量而被丢弃。

例如,假设您有一个包含 100000 台设备的注册表,并且为注册表设置了调试日志级别。如果每台设备每秒发布一个遥测事件,则每秒只记录 100000 个遥测事件中的 1000 个。这是因为,如配额和限制中所示,记录的最大条目数为每秒 1000 条。

为获得最佳效果,请仅在短时间内或为少量设备启用调试日志记录功能。

排查写入日志时的错误

首次为项目启用 Google Cloud IoT Core API 时,系统会自动为项目的新服务帐号分配一个角色 (cloudiot.serviceAgent),该角色支持将日志写入 Cloud Logging。如果您稍后从相关项目服务帐号中移除此默认角色,则可能会遇到错误。如果您无法将设备活动写入 Cloud Logging,请完成以下步骤:

  1. 在 Google Cloud Console 的 IAM 页面上,验证 Cloud IoT Core Service Agent 角色是否显示在相关项目服务帐号的成员列表中。(查找以 @gcp-sa-cloudiot.iam.gserviceaccount.com 结尾的项目服务帐号。)

  2. 如果 Cloud IoT Core Service Agent 角色未显示在成员列表中,请使用 gcloudcloudiot.serviceAgent 角色添加到相关项目服务帐号中。此角色包含将日志写入 Cloud Logging 的权限。

    运行以下命令,将 cloudiot.serviceAgent 角色添加到您的项目中。如需查找 PROJECT_IDPROJECT_NUMBER,请参阅识别项目

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloudiot.iam.gserviceaccount.com \
      --role=roles/cloudiot.serviceAgent