本页介绍了调查和调试 AlloyDB for PostgreSQL 发送到读取池实例的查询的方法:
- 查看读取池的组成节点的详细列表,包括其 IP 地址。
- 直接连接到节点,以进行调试。
- 检查 AlloyDB 日志,以确定哪个特定节点在处理发送到读取池的任何查询。
- 查询给定读取池节点的所有近期活动的日志。
- 查看与读取池节点关联的 Google Cloud 指标。
将这些方法结合使用,您可以对读取池执行诊断和调试操作。例如,如果集群的一个读取池在处理长时间运行的查询时使用了异常多的 CPU,您可以使用这些技术确定哪个节点在处理该查询,然后直接连接到该节点以进一步检查或终止该查询。
列出读取池节点的详细信息
在正常使用 AlloyDB 时,您无需知道构成读取池的节点的标识或地址。不过,在必要时,您可以查看读取池实例的节点列表。列出的每个节点都包含以下信息,这些信息对后续诊断和调试很有用:
节点的 Google Cloud ID 字符串,用于执行有关该节点近期活动的日志查询。
集群虚拟私有云 (VPC) 中的节点 IP 地址,您可以使用该地址直接连接到该节点的 PostgreSQL 服务器。
如需查看读取池节点的内部 ID 字符串和 IP 地址,请按照查看实例详情中针对 gcloud
的说明操作,但要额外添加一个 --view=FULL
命令行参数:
gcloud
gcloud alloydb instances describe READ_POOL_ID \
--region=REGION_ID \
--cluster=CLUSTER_ID \
--project=PROJECT_ID \
--view=FULL
替换以下内容:
- READ_POOL_ID:读取池的 ID。
- REGION_ID:实例的地区 ID。
- CLUSTER_ID:实例所在集群的 ID。
- PROJECT_ID:实例所属项目的 ID。
输出包含标记为 nodes
的部分,类似于以下内容:
nodes:
- id: READ_POOL_INSTANCE_ID-edd4f6ed-hcfh
ip: 10.90.80.57
state: HEALTHY
zoneId: us-central1-b
- id: READ_POOL_INSTANCE_ID-edd4f6ed-ldbm
ip: 10.90.80.56
state: HEALTHY
zoneId: us-central1-c
每个条目的 id
和 ip
字段与本页介绍的其他技术密切相关:
ip
字段显示节点在集群 VPC 中的 IP 地址。id
字段包含节点的完整 Google Cloud ID 字符串。节点的已记录条目中仅会显示此字符串的最后四个字符。例如,如需查找与上例输出中的第一个节点相关的日志条目,请使用 ID 字符串
hcfh
查询日志。
直接连接到节点
知道节点的 IP 地址后,您可以直接连接到其 PostgreSQL 服务器。例如,如需使用 psql
连接到集群 VPC 中的虚拟机,请按照运行 psql 客户端中的说明操作。执行此操作时,请提供节点的 IP 地址,而不是其读取池实例的 IP 地址:
psql -h NODE_IP_ADDRESS -U USERNAME
在日志中查找节点活动
AlloyDB 会在有关读取池处理的查询的日志条目中包含节点 ID。一般来说,您可以通过以下两种方式使用这些发现的 ID:
- 确定该节点的 IP 地址,以便您可以连接到该节点。
- 执行进一步的日志查询,详细了解节点的近期活动。
确定哪个节点正在处理已知查询
如果您知道某个读取池正在处理长时间运行的查询,则日志浏览器可以帮助您确定处理该查询的特定节点的 ID。
请注意,此方法仅适用于启用了 pgAudit 扩展程序的读取池实例。
访问 Logs Explorer:
在查询构建器中,将
resource.labels.instance_id="READ_POOL_ID"
添加到查询编辑器字段,并将 READ_POOL_ID 替换为读取池实例的名称。将您要调查的 SQL 语句(全部或部分)添加到查询编辑器字段中。例如
select id from MyTable
。此输入不区分大小写。点击运行查询。
您可以使用日志浏览器的控件根据需要调整和重新运行查询,以过滤出最相关的结果。
点击结果列表中的日志条目以展开其显示内容。
点击条目展开式显示中的
labels
字段。记下
labels
下的NODE_ID
的值。
结果是处理查询的节点的四位字符标识符。
连接到日志条目中提及的节点
如果您想根据特定节点的日志记录活动直接连接到其 PostgreSQL 服务器,请按以下步骤操作:
记下已记录节点的四位字符 ID 字符串。您可以在日志条目的
NODE_ID
字段中找到此 ID。在该列表中,找到 ID 字符串以您在第一步中记下的四个字符结尾的节点。列出的节点可能都不匹配。
如果您找到匹配的节点,请使用其匹配的 IP 地址连接到该节点的 PostgreSQL 服务器。
否则,如果上一步中列出的读取池的所有节点的 ID 都与已记录的节点不匹配,则表示读取池在原始日志条目之后的时间段内已停用该节点。这是 AlloyDB 读取池的正常行为,如关于节点易失性的备注中所述。在这种情况下,您无法与该节点建立直接连接。
连接到节点的 PostgreSQL 服务器后,您可以使用标准 PostgreSQL 监控技术(例如 pg_stat_activity
)进一步调查节点的当前进程,并根据需要进行调整。
查看有关节点的更多日志条目
如需查看与特定 ID 的节点相关的较新日志记录活动,请执行以下操作:
访问 Logs Explorer:
将
labels.NODE_ID=NODE_ID
添加到日志浏览器查询构建器,将 NODE_ID 替换为节点的四位字符 ID 字符串。点击运行查询可查看所选时间范围内该节点的所有活动,或调整查询以进一步过滤。
根据需要重复上述步骤,以优化搜索。
监控节点指标
您可以从 AlloyDB 系统数据分析信息中心查看与各个节点关联的指标。如需详细了解可用节点指标,请参阅系统数据分析指标参考文档。
如需了解哪些节点 ID 与特定读取池实例相关联,请参阅列出读取池节点的详细信息。
如需查看这些指标及其他 AlloyDB 指标的完整参考文档,请参阅“Google Cloud 指标”中的 alloydb
。
关于节点暂时性的说明
虽然您可以出于临时调查或调试目的安全地连接到节点,但使用读取池的应用应始终使用集群在其实例列表中显示的 IP 地址在实例级别连接到这些池。
AlloyDB 会将读取池的节点视为短暂的可互换资源。该服务会根据需要更改读取池的节点名单,以确保该读取池实例能够实现负载均衡并保持响应速度。如果应用直接连接到读取池节点(而不是读取池实例),则每当 AlloyDB 更新实例的节点名单时,都有可能突然与数据库断开连接。
请始终让应用在实例级别连接到读取池,并让 AlloyDB 负责将查询高效路由到适当的节点。
后续步骤
- 详细了解如何使用日志浏览器。