内容提要
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)或特定格式中,满足不同场景下的存储需求。