了解 Firestore 中的性能监控

Cloud Monitoring 会从 Google Cloud 产品中收集指标、事件和元数据。此外,您还可以通过 Cloud Monitoring 访问用量信息中心安全规则用量报告的数据,以进行更详细的分析。借助 Cloud Monitoring,您还可以设置自定义信息中心和用量提醒。

本文档将指导您使用指标、了解自定义指标信息中心以及如何设置提醒。

受监控的资源

Cloud Monitoring 中的受监控的资源表示逻辑或物理实体,例如虚拟机、数据库或应用。受监控的资源包含一组唯一的指标,这些指标可通过信息中心进行浏览、报告,或者用于创建提醒。每项资源还有一组资源标签,这些标签是键值对,用于保存有关资源的其他信息。资源标签可用于与资源关联的所有指标。

使用 Cloud Monitoring API,您可以通过以下资源监控 Firestore 的性能:

资源 说明 支持的数据库模式
firestore.googleapis.com/Database(推荐) 受监控的资源类型,可提供 projectlocation* 和 database_id 的细分数据。对于没有特定名称创建的数据库,database_id 标签将为 (default) 这两种模式都支持的所有指标,但 Datastore 模式 Firestore 不支持的以下指标除外:
  • document/delete_ops_count
  • document/read_ops_count
  • document/write_ops_count
firestore_instance 受监控的 Firestore 项目的资源类型,但不提供数据库的细分数据。 适用于 Firestore Native
datastore_request 受监控的 Datastore 项目的资源类型,不提供数据库细分数据。 同时适用于两种模式。

指标

Firestore 有两种不同的模式:Firestore Native 和 Datastore 模式 Firestore。如需了解这两种模式之间的功能比较,请参阅选择数据库模式

如需查看这两种模式指标的完整列表,请访问以下链接:

服务运行时指标

serviceruntime 指标提供项目流量的简要概览。大多数 Google Cloud API 都支持这些指标。consumed_api 受监控的资源类型包含以下通用指标。这些指标每 30 分钟进行一次采样,以使数据变得平滑。

serviceruntime 指标的一个重要资源标签是 method。此标签表示调用的底层 RPC 方法。您调用的 SDK 方法的名称不一定与底层 RPC 方法的名称相同。原因在于 SDK 提供了高级 API 抽象。但是,在尝试了解应用与 Firestore 的交互方式时,务必根据 RPC 方法的名称了解相关指标。

如果您需要了解给定 SDK 方法的底层 RPC 方法是什么,请参阅 API 文档

使用以下服务运行时指标来监控数据库。

api/request_count

此指标提供已完成请求的数量,涉及协议(请求协议,例如 http、gRPC 等)、响应代码(HTTP 响应代码)、response_code_class(响应代码类别,例如 2xx、4xx 等)和 grpc_status_code数字 gRPC 响应代码)。使用此指标可观察整体 API 请求并计算错误率。

用于返回 2xx 代码的 api/request_count 指标。
图 1. api/request_count 指标(点击可放大)。

在图 1 中,可以看到返回 2xx 代码的请求(按服务和方法分组)。2xx 代码是表示请求成功的 HTTP 状态代码。

用于返回 2xx 代码的 api/request_count 指标。
图 2. 返回 2xx 代码的 api/request_count 指标(点击可放大)。

在图 2 中,可以看到按 response_code 分组的提交。在此示例中,我们仅看到 HTTP 200 响应,这表示数据库运行良好。

api/request_latencies

api/request_latencies 指标提供所有已完成请求的延迟时间分布情况。

Firestore 会记录 Firestore Service 组件中的指标。延迟时间指标包括 Firestore 收到请求到 Firestore 完成响应发送之间的时间,包括与存储层的互动。因此,这些指标不包括客户端与 Firestore 服务之间的往返延迟时间 (rtt)。

用于计算延迟时间分布情况的 api/request_latencies
图 4. api/request_latencies,计算延迟时间分布情况。
api/request_sizes 和 api/response_sizes

api/request_sizesapi/response_sizes 指标分别提供了关于载荷大小(以字节为单位)的数据分析。这些日志可帮助您了解发送大量数据或查询过于宽泛并返回大型载荷的写入工作负载。

api/request_sizes 和 api/response_sizes 指标
图 5.api/request_sizes 和 api/response_sizes 指标(点击可放大)。

在图 5 中,可以看到 RunQuery 方法的响应大小的热图。我们可以看到,大小是稳定的,中位数为 50 个字节,总体介于 10 个字节到 100 个字节之间。请注意,载荷大小始终以未压缩的字节为单位,不包括传输控制开销。

文档操作指标

Firestore 提供读取、写入和删除计数。写入指标提供了“CREATE”和“UPDATE”操作的详细信息。这些指标与 CRUD 操作保持一致。

以下指标可用于了解您的数据库是读取密集型还是写入密集型,以及新文档与删除文档的速率。

  • document/delete_ops_count:成功删除文档的次数。
  • document/read_ops_count:通过查询或查找操作成功读取文档的次数。
  • document/write_ops_count:成功写入文档的次数。
创建读取文档与写入文档之间的比率
图 6.创建读取文档与写入文档之间的比率(点击可放大)。

在图 6 中,您可以看到如何创建显示读取文档与写入文档比率的比率。在本例中,读取的文档数量比写入的文档数量多出 6% 左右。

文档操作指标

这些指标提供了 Firestore 数据库读取(查找和查询)和写入的载荷大小分布(以字节为单位)。这些值表示载荷的总大小。例如,查询返回的任何结果。 这些指标与 api/request_sizesapi/response_sizes 指标类似,主要区别在于文档操作指标提供的采样更精细,但细分更少。

例如,文档操作指标使用 datastore_request 受监控的资源,因此不存在服务或方法细分。

  • entity/read_sizes:读取文档大小的分布情况。
  • entity/write_sizes:书面文档大小的分布情况。

索引指标

您可将索引写入速率与 document/write_ops_count 指标进行比较,以了解 索引扇出比率

  • index/write_count:索引写入的计数。
索引写入速率与文档写入速率对比
图 7.索引写入速率与文档写入速率(点击可放大)的对比。

在图 7 中,您可以看到索引写入速率与文档写入速率的对比。在此示例中,每次文档写入大约有 6 次索引写入,索引扇出率相对较小。

使用 Firebase SDK 直接连接到数据库的客户端

两种指标可用于跟踪通过移动 SDK 和/或 Web SDK 直接连接到 Firestore 数据库的客户端中的活动。这些指标包括与实时快照监听器相关的功能,其中数据库中的相关更改会立即流式传输回客户端。

  • network/active_connections:时间点的活跃连接数。每个网络客户端或移动客户端都有一个连接。
  • network/snapshot_listeners:当前在所有连接的客户端中注册的快照监听器的数量。每个客户端可能有多个连接。

您可以在 Firebase 控制台的 Firestore 数据库的“Usage”标签页中查看这些指标。

用于跟踪连接到 Firestore 的客户端活动的指标
图 8.用于跟踪连接到 Firestore 的客户端活动的指标。

TTL 指标

TTL 指标适用于 Firestore 原生数据库和 Datastore 模式 Firestore 数据库。使用这些指标可以监控强制执行 TTL 政策的效果。

  • document/ttl_deletion_count:TTL 服务删除的文档总数。
TTL 服务删除的文档总数
图 9.TTL 服务删除的文档总数(点击可放大)。

在图 9 中,您可以看到一段时间内每分钟删除的文档的速率。

  • document/ttl_expiration_to_deletion_delays:具有 TTL 的文档从到期到实际删除所经过的时间。
Firestore 删除具有 TTL 政策的文档所花费的时间(以秒为单位)
图 10.Firestore 删除具有 TTL 政策的文档所花费的时间(以秒为单位),点击可放大。

在图 10 中,您可以看到该指标提供了 Firestore 删除具有 TTL 政策的文档所花费的时间(以秒为单位)的分布情况。删除第 99 百分位处的 TTL 到期文档可以在 0.5 秒内删除。这意味着系统运行正常。Firestore 通常会在 24 小时内删除过期的文档,但不能保证这一点。如果您发现花费的时间超过 24 小时,请与支持团队联系

后续步骤