今天和大家分享一位用户的实战投稿,主题是:如何从零构建一个适用于 YashanDB 的 Prometheus Exporter,打通监控全链路,打造更智能的数据库运维体系。

一、为什么需要 YashanDB Exporter?
在数据库运维中,实时监控系统的健康状态是关键一环。目前比较主流的监控解决方案有 Prometheus+Grafana、Zabbix、Nagios 等,而 Prometheus+Grafana 因其易部署、强可视化能力和丰富的生态被广泛使用。

在这个方案中,Exporter 是连接数据库与 Prometheus 的桥梁。它的核心职责就是从数据库中采集指定的指标,并将数据按 Prometheus 规范格式暴露出去。
image.png

二、架构设计思路
为了实现对多个 YashanDB 实例的统一监控,我们设计了一个支持多实例采集的 Exporter,整个架构包括数据采集、格式包装和数据暴露三部分:

数据采集通过 SQL 查询数据库指标,支持并发执行;

格式包装是将采集结果转成 Prometheus 可识别的格式;

数据暴露则是以 HTTP 服务形式提供 /metrics 接口供 Prometheus 抓取。

为了增强灵活性,Exporter 支持两个配置文件:一个用于定义采集哪些数据库实例,另一个用于配置要采集哪些指标、对应的 SQL 是什么。

image.png
三、核心功能实现解析
Exporter 是用 Go 编写的,通过官方提供的 Prometheus 客户端包开发。程序启动时会完成几个关键动作:

初始化配置,创建 Exporter 实例;

注册 Exporter 到 Prometheus;

启动 HTTP 服务,绑定 /metrics 接口;

接收到抓取请求时,执行指标采集逻辑。

Exporter 实现了 Prometheus 的 Collector 接口,其中的 Collect() 方法是采集指标的核心。为了提高效率,所有的指标采集是并发执行的,每个数据库实例下的每个指标都由独立的协程采集,最终将结果统一写入数据通道。

在超时时间控制方面,每个查询都包裹了超时机制,确保单个慢查询不会拖慢整个抓取过程。

image.png
四、配置文件说明
整个方案的灵活性主要体现在配置文件上。
image.png

指标配置文件是一个 YAML 格式的列表,每个指标项包含名字、SQL 语句、指标类型(如 gauge)和描述信息。比如:

metrics:
  - name: uptime
    query: select ... from v$instance
    sub_metrics:
      - col: uptime
        type: gauge
        description: Uptime of the database

数据库实例配置文件同样采用 YAML 格式,支持配置多个实例的连接信息,包括 IP、端口、名称等。比如:

targets:
  - name: yasdb
    nodes:
      - name: instance1
        connection:
          ip: 127.0.0.1
          port: 1688

五、部署与验证流程
1.启动一个本地的 YashanDB 实例,确保监听端口开启;

2.编辑好 Exporter 的配置文件,确保能连通数据库;

3.启动 Exporter 程序,默认监听 9100 端口;

4.访问 http://localhost:9100/metrics,可以看到采集到的指标数据;
image.png

5.通过 Docker 拉起 Prometheus 服务,配置 prometheus.yml 文件抓取 Exporter;

6.启动 Grafana,配置数据源指向 Prometheus;

7.创建 Dashboard,添加图表,即可实现指标可视化监控。
image.png
image.png

六、小结
本次实践基于 Prometheus 官方客户端开发包,用 Go 实现了一个简洁高效的 YashanDB Exporter。从配置文件定义、指标采集、HTTP 服务暴露到接入 Prometheus + Grafana 全链路联通,不仅满足了多实例采集的需求,也为后续指标扩展和告警提供了基础能力。

这套方案已经在多个场景下得到实战验证,欢迎你也试试看。YashanDB 的生态正在快速发展,欢迎更多小伙伴一起来共建。


数据库砖家
1 声望0 粉丝