GORM Prometheus 监控插件
Prometheus 插件可为 GORM 提供数据库性能监控能力,自动采集连接池状态与查询延迟等指标。
插件功能
监控指标
插件自动暴露以下 Prometheus 指标:
| 指标名称 | 说明 |
|---|---|
gorm_connections_open | 当前打开的连接数 |
gorm_connections_in_use | 正在使用的连接数 |
gorm_wait_count | 等待连接的请求数 |
gorm_query_duration_seconds | 查询耗时分布 |
gorm_query_total | 查询总数 |
集成步骤
安装依赖
Bash
go get github.com/dmitryliden/gorm-prometheus
注册插件
Go
import "github.com/dmitryliden/gorm-prometheus"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
panic(err)
}
// 注册 Prometheus 插件
db.Use(prometheus.New(prometheus.Config{
DBName: "user_db",
RefreshInterval: 15, // 指标刷新间隔(秒)
}))
暴露指标端点
Go
import "github.com/prometheus/client_golang/prometheus/promhttp"
http.Handle("/metrics", promhttp.Handler())
http.ListenAndServe(":8080", nil)
配置参数
Config 结构体
Go
type Config struct {
DBName string // 数据库名称,用于区分多数据源
RefreshInterval int // 连接池指标刷新间隔(秒)
StartServer bool // 是否自动启动 HTTP 服务
ServerAddr string // HTTP 服务地址
MetricsPath string // 指标暴露路径
}
推荐配置
Go
db.Use(prometheus.New(prometheus.Config{
DBName: "main_db",
RefreshInterval: 10,
StartServer: false, // 推荐复用现有 metrics 端点
}))
监控实践
Grafana 看板配置
常用查询语句:
promql
# 平均查询延迟
rate(gorm_query_duration_seconds_sum[5m]) / rate(gorm_query_duration_seconds_count[5m])
# 连接池使用率
gorm_connections_in_use / gorm_connections_open
# 每秒查询数
rate(gorm_query_total[1m])
告警规则
YAML
- alert: GormHighLatency
expr: rate(gorm_query_duration_seconds_sum[5m]) / rate(gorm_query_duration_seconds_count[5m]) > 0.5
for: 5m
annotations:
summary: "GORM 查询延迟过高"
注意事项
多数据源场景需为每个数据库实例单独注册插件,
DBName不能重复。
RefreshInterval不宜过小,避免频繁采集影响性能。
生产环境建议复用现有
/metrics端点,避免插件启动额外端口。
要点总结
- Prometheus 插件自动采集 GORM 连接池与查询指标
- 通过
db.Use()注册,配置DBName与刷新间隔 - 指标包括连接数、等待队列、查询延迟与总数
- 配合 Grafana 可实现可视化监控与告警
- 多数据源需分别注册,注意
DBName唯一性
存放路径:D:\git2\jwdev\articles\GORM\进阶\插件系统\Prometheus 监控插件.md
📝 发现内容有误?点击此处直接编辑