Prometheus适配GaussDB开源开发任务心得

举报
yangjiaxin98 发表于 2024/11/12 16:25:04 2024/11/12
【摘要】 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驱动不够完善。

验收材料

交付件清单

验收细则 评分说明 是否为验收必选项 结果(通过/不通过) 开发者举证
功能开发:完成与华为三大根技术生态(鲲鹏云、昇腾云、鸿蒙)适配的功能开发 完成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



【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。