Skip to content

OneClick Metrics Exporter 是一个使用 Go 编写的服务,用于从 PostgreSQL 数据库中定时采集 Pull Request(PR)相关指标,并通过 Prometheus 暴露 /metrics 接口,供监控系统使用。

Notifications You must be signed in to change notification settings

EIETS/oneclick-metrics-go

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

OneClick Metrics Exporter (Go)

📌 项目简介

OneClick Metrics Exporter 是一个使用 Go 编写的服务,用于从 PostgreSQL 数据库中定时采集 Pull Request(PR)相关指标,并通过 Prometheus 暴露 /metrics 接口,供监控系统使用。

🚀 功能说明

  • 定时从数据库中采集 PR 状态、报告覆盖率等指标
  • 使用 Prometheus 客户端注册并暴露指标
  • 支持标签化指标(如 project、pr_state、report 等)
  • 可配置采集间隔、数据库连接信息、日志等级等

🛠️ 安装依赖

go mod init oneclick-metrics-go
go get github.com/jackc/pgx/v5
go get github.com/prometheus/client_golang/prometheus
go get github.com/prometheus/client_golang/prometheus/promhttp

⚙️ 数据库连接

DATABASE_URL:PostgreSQL 连接字符串,例如:

postgres://user:password@localhost:5432/dbname

▶️ 运行方式

go run cmd/main.go

启动后,Prometheus 指标服务将运行在 http://localhost:8000/metrics。

📊 示例输出

访问 /metrics 后,你将看到如下输出(部分):

  • 注:数据源来在calix公司内部数据,须在公司内部环境执行
# HELP oneclick_pr_missing_report The number of pull requests in one project with missing reports
# TYPE oneclick_pr_missing_report gauge
oneclick_pr_missing_report{pr_state="declined",project="APIPTM"} 0
oneclick_pr_missing_report{pr_state="declined",project="CCL"} 0
oneclick_pr_missing_report{pr_state="declined",project="CPC"} 0
oneclick_pr_missing_report{pr_state="declined",project="DEMO"} 0
oneclick_pr_missing_report{pr_state="declined",project="MAP"} 0
oneclick_pr_missing_report{pr_state="declined",project="NAP"} 0
oneclick_pr_missing_report{pr_state="declined",project="OCC"} 0
oneclick_pr_missing_report{pr_state="declined",project="ONECC"} 0
oneclick_pr_missing_report{pr_state="declined",project="SAPP"} 0
oneclick_pr_missing_report{pr_state="declined",project="TEST"} 0
oneclick_pr_missing_report{pr_state="merged",project="APIPTM"} 0
oneclick_pr_missing_report{pr_state="merged",project="CCL"} 0
oneclick_pr_missing_report{pr_state="merged",project="CPC"} 0
oneclick_pr_missing_report{pr_state="merged",project="DEMO"} 0
oneclick_pr_missing_report{pr_state="merged",project="MAP"} 0
oneclick_pr_missing_report{pr_state="merged",project="NAP"} 0
oneclick_pr_missing_report{pr_state="merged",project="OCC"} 0
oneclick_pr_missing_report{pr_state="merged",project="ONECC"} 0
oneclick_pr_missing_report{pr_state="merged",project="SAPP"} 0
oneclick_pr_missing_report{pr_state="merged",project="TEST"} 0
oneclick_pr_missing_report{pr_state="open",project="APIPTM"} 0
oneclick_pr_missing_report{pr_state="open",project="CCL"} 1
oneclick_pr_missing_report{pr_state="open",project="CPC"} 0
oneclick_pr_missing_report{pr_state="open",project="DEMO"} 0
oneclick_pr_missing_report{pr_state="open",project="MAP"} 0
oneclick_pr_missing_report{pr_state="open",project="NAP"} 0
oneclick_pr_missing_report{pr_state="open",project="OCC"} 0
oneclick_pr_missing_report{pr_state="open",project="ONECC"} 0
oneclick_pr_missing_report{pr_state="open",project="SAPP"} 0
oneclick_pr_missing_report{pr_state="open",project="TEST"} 0
  • 其中,grafana监控的CCL项目,如下图所示
  • img.png
  • 对应上方的metrics中
oneclick_pr_missing_report{pr_state="open",project="CCL"} 1 
oneclick_pr_missing_report{pr_state="merged",project="CCL"} 0
oneclick_pr_missing_report{pr_state="declined",project="CCL"} 0

自动重连机制

  • 当数据库连接断开时,会使用二进制指数退避机制进行重连,保证系统的健壮性。 img_1.png

🧭 总体目标

将 Python 实现的 OneClick Metrics Exporter 重构为 Go 项目,具备以下能力:

定时从 PostgreSQL 拉取 PR 数据 处理并聚合指标(如 PR 状态、报告覆盖率等) 暴露 Prometheus 指标接口 支持配置、日志、模块化结构

🗂️ 阶段划分与任务清单

✅ 阶段 1:项目初始化与基础搭建(1 天)(已完成)

📌 任务

  • 初始化 Go 模块:go mod init oneclick-metrics-go
  • 创建基础目录结构
  • 安装依赖:
go get github.com/jackc/pgx/v5
go get github.com/prometheus/client_golang/prometheus
go get github.com/prometheus/client_golang/prometheus/promhttp

🎯 目标

✅ 阶段 2:数据库连接模块(1 天)(已完成)

📌 任务

  • 在 db/connection.go 中实现连接池(使用 pgxpool)
  • 支持从环境变量或配置文件读取连接信息
  • 编写测试函数验证连接是否成功

🎯 目标

  • 能成功连接 PostgreSQL 并执行简单查询

✅ 阶段 3:Prometheus 指标注册与暴露(1 天)(已完成)

📌 任务

  • 在 metrics/exporter.go 中注册多个指标(如 PR 状态、报告数量)
  • 使用 GaugeVec 定义指标结构
  • 在 main.go 中定时调用采集函数

🎯 目标

  • Prometheus 能拉取多个结构化指标(带标签)

✅ 阶段 4:实现 SQL 查询与数据采集逻辑(3~4 天)(已完成)

📌 任务

  • 将 Python 中的 SQL 查询迁移为 Go 字符串常量
  • 在 db/queries.go 中封装每个查询函数
  • 在 metrics/collectors.go 中实现每类指标的采集逻辑
    • open PR
    • closed PR
    • result report
    • check summary
    • missing report

🎯 目标

  • 每类指标都能从数据库中获取真实数据并更新 Prometheus 指标

✅ 阶段 5:配置与参数支持(1 天)(已完成)

📌 任务

  • 使用 viper 支持配置文件
  • 支持设置:
    • 数据库连接信息
    • 拉取间隔
    • 日志等级
    • 时区

🎯 目标

  • 项目可配置,适配不同部署环境

✅ 阶段 6:日志与错误处理(1 天)(完成)

📌 任务

  • 使用 zap 记录关键操作与错误
  • 所有数据库操作、指标采集都应有日志输出
  • 捕获并处理错误,避免程序崩溃

🎯 目标

  • 稳定运行,日志清晰,便于调试

✅ 阶段 7:打包与部署准备(1 天)

📌 任务

  • 编写 README.md,说明项目功能、结构、运行方式
  • 添加 Dockerfile(可选)
  • 编写部署脚本或 systemd 服务文件(可选)

🎯 目标

  • 项目可部署、可运行、可展示

🧠 附加建议

  • ✅ 每完成一个阶段就 git commit,保持版本清晰
  • ✅ 可以用 Grafana 连接 Prometheus 展示指标图表
  • ✅ 最后在简历中写上你实现的模块、技术栈、项目目标和成效

About

OneClick Metrics Exporter 是一个使用 Go 编写的服务,用于从 PostgreSQL 数据库中定时采集 Pull Request(PR)相关指标,并通过 Prometheus 暴露 /metrics 接口,供监控系统使用。

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages