GORM 提供了 Prometheus 插件来收集 DBStats 和用户自定义指标

https://github.com/go-gorm/prometheus

用法

  1. import (
  2. "gorm.io/gorm"
  3. "gorm.io/driver/sqlite"
  4. "gorm.io/plugin/prometheus"
  5. )
  6. db, err := gorm.Open(sqlite.Open("gorm.db"), &gorm.Config{})
  7. db.Use(prometheus.New(prometheus.Config{
  8. DBName: "db1", // 使用 `DBName` 作为指标 label
  9. RefreshInterval: 15, // 指标刷新频率(默认为 15 秒)
  10. PushAddr: "prometheus pusher address", // 如果配置了 `PushAddr`,则推送指标
  11. StartServer: true, // 启用一个 http 服务来暴露指标
  12. HTTPServerPort: 8080, // 配置 http 服务监听端口,默认端口为 8080 (如果您配置了多个,只有第一个 `HTTPServerPort` 会被使用)
  13. MetricsCollector: []prometheus.MetricsCollector {
  14. &prometheus.MySQL{
  15. VariableNames: []string{"Threads_running"},
  16. },
  17. }, // 用户自定义指标
  18. }))

用户自定义指标

您可以通过 GORM Prometheus 插件定义并收集自定义的指标,这需要实现 MetricCollector 接口

  1. type MetricsCollector interface {
  2. Metrics(*Prometheus) []prometheus.Collector
  3. }

MySQL

GORM 提供了一个示例,说明如何收集 MySQL 状态指标,查看 prometheus.MySQL 获取详情

  1. &prometheus.MySQL{
  2. // 指标名前缀,默认为 `gorm_status_`
  3. // 例如: Threads_running 的指标名就是 `gorm_status_Threads_running`
  4. Prefix: "gorm_status_",
  5. // 拉取频率,默认使用 Prometheus 的 RefreshInterval
  6. Interval: 100,
  7. // 从 SHOW STATUS 选择变量变量,如果不设置,则使用全部的状态变量
  8. VariableNames: []string{"Threads_running"},
  9. }