了解 Firestore 中的性能监控
Cloud Monitoring 会从 Google Cloud 产品中收集 指标、事件和元数据。您还可以通过 Cloud Monitoring 访问“用量”信息中心和安全规则用量中报告的数据,以便进行更详细的分析。借助 Cloud Monitoring,您还可以设置自定义信息中心和用量提醒。
本文档将指导您使用指标、了解自定义指标信息中心以及设置提醒。
受监控的资源
Cloud Monitoring 中受监控的资源表示虚拟机、数据库或应用等逻辑实体或物理实体。受监控的资源包含一组独特的指标,可通过信息中心进行探索、报告或用于创建提醒。此外,每个资源还具有一组资源标签,这些标签是键值对,包含有关资源的其他信息。资源标签适用于与资源关联的所有指标。
借助 Cloud Monitoring API,您可以使用以下资源监控 Firestore 性能:
| 资源 | 说明 | 支持的数据库模式 |
firestore.googleapis.com/Database(推荐) | 受监控的
资源类型,可提供project、
location* 和database_id的细分。
database_id 标签将为 (default) 对于未指定名称的数据库
。 |
适用于两种模式。 |
firestore_instance | Firestore 项目的受监控资源类型,不提供数据库的细分。 | 适用于原生模式 Firestore |
datastore_request | Datastore 项目的受监控资源类型,不提供数据库的细分。 | 适用于两种模式。 |
指标
Firestore 提供两种不同的模式:原生模式 Firestore 和 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 请求并计算错误率。
在图 1 中,您可以看到按服务和方法分组的返回 2xx 代码的请求。2xx 代码是 HTTP 状态代码,表示请求成功。
在图 2 中,您可以看到按 response_code 分组的提交。在此示例中,我们仅看到 HTTP 200 响应,这意味着数据库运行状况良好。
api/request_latencies
api/request_latencies 指标提供所有已完成请求的延迟分布。
Firestore 记录来自 Firestore 服务 组件的指标。延迟时间指标包括 Firestore 收到请求的时间到 Firestore 完成发送响应的时间,包括与存储层的互动。因此,这些指标中不包含客户端与 Firestore 服务之间的往返延迟时间 (rtt)。
api/request_sizes 和 api/response_sizes
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%。
载荷大小指标
这些指标提供对 Firestore 数据库的读取(查找和查询)和写入的载荷大小(以字节为单位)的分布。这些值表示载荷的总大小。例如,查询返回的任何结果。
这些指标与 api/request_sizes 和 api/response_sizes 指标类似,主要区别在于文档操作指标提供更精细的采样,但细分程度较低。
例如,文档操作指标使用 datastore_request 受监控的资源,因此没有服务或方法细分。
entity/read_sizes:已读文档的大小分布。entity/write_sizes:写入的文档的大小分布。
结算指标(企业版)
以下结算指标仅适用于 Firestore 企业版。
使用这些指标来了解结算使用情况。这些指标不包括管理员操作(编入索引、导入、导出和批量删除)产生的结算费用。
api/billable_read_units:可结算的读取单位数。 使用情况可按服务名称和 API 方法细分。api/billable_realtime_read_units:实时更新中可结算的实时更新单位数。api/billable_write_units:可结算的写入单位数。 使用情况可按服务名称和 API 方法细分。document/billable_managed_delete_write_units:来自 TTL 等受管理的删除服务的可结算写入单位数。
索引指标
可以将索引写入速率与 document/write_ops_count 指标
进行对比,以了解 索引扇出
比率。
index/write_count:索引写入次数。
在图 7 中,您可以看到如何将索引写入速率与文档写入速率进行对比。在此示例中,每次写入文档时,大约有 6 次索引写入,这是一个相对较小的索引扇出率。
使用 Firebase SDK 直接连接到数据库的客户端
有两个测量指标可 用于跟踪直接通过 移动 SDK、Web SDK 或 两者连接到 Firestore 数据库的客户端的活动。这些指标包括与实时快照 监听器相关的功能,其中 数据库中的相关更改会立即流式传输回客户端。
network/active_connections:该时间点的活跃连接数。每个 Web 或移动客户端都有一个连接。network/snapshot_listeners:当前在所有已连接的客户端中注册的快照监听器数量。每个客户端可能有多个连接。
您可以在 Firebase 控制台中 Firestore 数据库的 Usage 标签页中查看这些指标。
TTL 指标
TTL 指标适用于原生模式 Firestore 和 Datastore 模式 Firestore 数据库。使用这些指标可 监控强制执行的 TTL 政策 的效果。
document/ttl_deletion_count:由 TTL 服务删除的文档总数。
在图 9 中,您可以看到在几天内每分钟删除的文档速率。
document/ttl_expiration_to_deletion_delays:具有 TTL 的文档过期到实际删除之间经过的时间。
在图 10 中,您可以看到此指标提供了 Firestore 删除具有 TTL 政策的文档所用时间(以秒为单位)的分布。在第 99 个百分位,删除 TTL 过期文档所需的时间不到 0.5 秒。这意味着系统运行正常。Firestore 通常会在 24 小时内删除过期的文档,但不能保证这一点。 如果您发现删除时间超过 24 小时,请与支持团队 联系。
后续步骤
- 了解如何使用 Cloud Monitoring 信息中心查看指标。
- 监控用量,以确定一段时间内的文档读取、写入和删除操作。