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驱动不够完善。

测试结果

  • /metrics接口


  • Prometheus Targets



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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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