Ahmed Gouda:将自定义存储集成到 pgwatch

Ahmed Gouda:将自定义存储集成到 pgwatch

💡 原文英文,约500词,阅读约需2分钟。
📝

内容提要

pgwatch 默认将指标存入 PostgreSQL,但支持通过 gRPC 客户端扩展存储。本文介绍用 Go 开发自定义 gRPC 服务器,实现 Receiver 服务的 UpdateMeasurements、SyncMetric、DefineMetrics 方法,将采集指标写入 ClickHouse,涵盖生成代码、建表、连接数据库及注册服务,测试后数据成功写入。

🔎

延伸解读

pgwatch 的存储扩展机制

pgwatch 默认将指标存入 PostgreSQL,但通过 gRPC 客户端提供了扩展能力。用户可以实现一个兼容的 gRPC 服务器,将指标写入其他存储系统。这为需要特定 OLAP 数据库或自定义格式的场景提供了灵活性,而无需修改 pgwatch 本身。

实现自定义 gRPC 服务器的关键步骤

要集成自定义存储,需实现 Receiver 服务的三个方法:UpdateMeasurements 接收指标数据,SyncMetric 处理同步请求,DefineMetrics 定义指标结构。实现后注册服务并启动服务器,将 URI 传递给 pgwatch,即可接收采集的指标。

以 ClickHouse 为例的实践要点

文章以 ClickHouse 为例,使用 Go 语言和 clickhouse-go 包,创建 Measurements 表并初始化连接。在 UpdateMeasurements 中编写插入逻辑,将 pgwatch 发送的数据写入 ClickHouse。测试后日志显示数据成功写入,验证了方案的可行性。

❓

Q&A

pgwatch 默认将指标存储在哪里?

pgwatch 默认将收集的指标存储在 PostgreSQL 数据库中。

如何为 pgwatch 集成自定义存储?

通过开发一个兼容的 gRPC 服务器,实现 pgwatch gRPC 客户端定义的 Receiver 服务接口,然后将该服务器的 URI 传递给 pgwatch,即可将指标写入自定义存储。

pgwatch 的 gRPC Receiver 服务需要实现哪些方法?

需要实现三个方法:UpdateMeasurements、SyncMetric 和 DefineMetrics。

如何用 Go 开发一个将 pgwatch 指标写入 ClickHouse 的 gRPC 服务器?

首先从 pgwatch 的 protobuf 文件生成 Go 代码,然后创建一个新的服务器目录并复制生成的代码。使用 clickhouse-go 包创建 Measurements 表并初始化连接。实现 UpdateMeasurements 方法将接收到的数据插入 ClickHouse,最后在 main 函数中注册 ClickHouseReceiver 并启动服务器。

如何测试自定义 gRPC 服务器是否成功接收 pgwatch 指标?

启动服务器后,在日志中看到类似“[address:localhost:8888] Measurement Written”的消息,并连接数据库确认数据已写入,即表示测试成功。

pgwatch 的 gRPC 客户端支持哪些自定义存储场景?

可以将指标存储到特定的 OLAP 数据库(如 ClickHouse)或特定格式中,满足不同场景下的存储需求。

🏷️

标签

➡️

继续阅读