Prometheus适配GaussDB开源开发任务心得
根据计划书https://bbs.huaweicloud.com/blogs/439327,了解到我们这个Prometheus对于GaussDB的适配工作,主要就是开发一个Exporter来采集GaussDB中的系统指标数据。有一定的开发工作,但是不需要修改Prometheus,在设计上实现了Prometheus与Exporter的剥离,因此我们只需开发GaussDB Exporter即可。而无需对Prometheus源码做修改。由于从零开始开发工作量相对较大,我们可以参考PostgreSQL的Exporter和OpenGauss的一些相似的特性,再结合GaussDB做相应的拓展与修改即可。这里非常感谢PostgreSQL和OpenGauss,给与了相关的可参考性。
代码仓库
我实在gitee上先导入了PostgreSQL相关的代码仓库,然后在上面开发GaussDB Exporter。https://gitee.com/a717138552/gaussdb_exporter
开发过程
主要是参考PostgreSQL Exporterhttps://github.com/prometheus-community/postgres_exporter的实现,以及OpenGauss的一些特性https://opengauss.org/zh/。
刮削管理器 {scrape}
刮削任务管理器负责集中管理多个刮削任务(即每一个数据库节点),统一控制启停。
刮削器 {scraper}
每一个刮削器都是一个具有专用场景的程序模块,在数据库中执行SQL语句,并将返回的数据进行处理后存入缓存中。
内存缓存 {cache}
在Go语言中实现内存缓存模块,将 Exporter 和刮削器解耦,提供更稳定的 Metrics 输出性能
服务器 {server}
提供HTTP服务器,实现 Prometheus SDK 中的 Exporter 接口,通过 `Collect` 函数调用从内存缓存中调取数据生成 Metrics API 响应
scraper刮削器扩展指南 {scraper}
创建刮削器并实现 `scrape.Scraper` 接口
:::
参考代码路径:internal/scraper/xxx.go
:::
```go
type ExampleScraper struct {
}
func NewExampleScraper() *BaseInfoScraper {
return &ExampleScraper{}
}
func (g ExampleScraper) Scrape(t *scrape.TaskOLD) ([]prometheus.Metric, []error, error) {
return []prometheus.Metric{}, nil, nil
}
```
在框架中注册这个刮削器
:::
参考:internal/scraper/scraper.go
:::
```go
func Init() {
// ....
scrape.RegisterScraper("example", NewExampleScraper())
// ....
}
```
在配置文件中启用注册的刮削器,config.yaml
```yaml
tasks:
- dsn: "postgresql://name:password@host:port/postgres"
name: Test Server 1
duration: 5s
master: true
scrapers:
- example # 使用在上一步中注册的刮削器ID,即可启动已注册的刮削器
```
这里需要注意查阅GaussDB视图https://support.huaweicloud.com/productdesc-gaussdb/gaussdb_19_0030.html,与PostgreSQL和OpenGauss视图进行对比。
在开发过程中,我们使用华为云官方文档所推荐的Go驱动去连接GaussDBhttps://doc.hcs.huawei.com/db/zh-cn/gaussdb/24.1.30/devg-dist/gaussdb-12-0233.html。
开发过程中遇到的一些视图问题记录在https://gitcode.com/HuaweiCloudDeveloper/OpenSourceForHuaweiWiki/issues/19。
总结
本任务主要是根据Prometheus的功能特性来实现一个Exporter,通过这个Exporter收集并暴露指标,然后Prometheus收集并存储指标。
主要是需要注意本次开发是基于PostgreSQL Exporter,因此要同时去了解熟悉PostgreSQL和GaussDB的差异性。
通过本次开发,发现有以下几点问题:
- GaussDB相关文档更新不够及时,导致在视图那里遇到一些问题。
- Go语言方面相关的GaussDB驱动不够完善。
验收材料
交付件清单
- (1) DEMO仓库地址: https://gitee.com/a717138552/gaussdb_exporter
- (2) DEMO开发提交记录: https://gitee.com/a717138552/gaussdb_exporter/commits/master
- (3) 博客的地址: https://bbs.huaweicloud.com/blogs/438331
验收细则 | 评分说明 | 是否为验收必选项 | 结果(通过/不通过) | 开发者举证 |
---|---|---|---|---|
功能开发:完成与华为三大根技术生态(鲲鹏云、昇腾云、鸿蒙)适配的功能开发 | 完成GaussDB数据库适配功能开发。 | 是 | 参考资源清单和测试结果。 | |
代码质量:适配华为三大根技术生态的代码质量经过工具检测达标 | 不涉及 | 否 | ||
提供相关文档,比如部署文档、使用文档、配置文档等 | 不涉及 | 否 | ||
合入到开源项目主仓:代码推送上游社区 | 不涉及 | 否 | ||
Deomo设计&开发:完成功能演示Demo的开发 | 举证提供DEMO仓库地址和DEMO开发提交记录。 | 是 | 参考(1)(2) | |
Demo部署&验证:完成功能演示DEMO基于华为云鲲鹏环境的部署和功能验证 | 提供DEMO部署验证结果的关键截图进行举证。提供DEMO运行环境和资源的规格清单。 | 是 | 参考资源清单和测试结果。 | |
发布博客:发布博客介绍适配心得。 | 提供博客的地址。 | 是 | 参考(3) | |
制作单机版无高危开源镜像。 | 上架云商店。 | 否 | ||
单机版镜像上架时支持模板部署。 | 否 | |||
制作集群版无高危开源镜像 | 上架云商店。 | 否 | ||
集群版镜像上架时支持模板部署 | 否 |
资源清单
华为云CodeArts体验版|50个(次)
华为云SWR
产品名称 | 产品类型 | 数据库引擎版本 | 内核引擎版本 | 实例类型 | 部署形态 | 备注 |
---|---|---|---|---|---|---|
云数据库 GaussDB | 基础版 | V2.0-8.* | 505.2.* | 集中式 | 1主2备 | 推荐 |
产品名称 | 集群类型 | 集群版本 | 集群规模 | 备注 |
---|---|---|---|---|
云容器引擎 CCE | CCE Standard 集群 | V1.28 | 50 | 推荐 |
产品名称 | CPU架构 | 实例类型 | 公共镜像 | 镜像版本 | 备注 |
---|---|---|---|---|---|
弹性云服务器 | 鲲鹏计算 | 鲲鹏通用计算增强型 | Huawei Cloud EulerOS | Huawei Cloud EulerOS 2.0 标准版 64位 ARM版(10GiB) | 推荐 |
测试结果
- /metrics接口
- Prometheus Targets
- 点赞
- 收藏
- 关注作者
评论(0)