OOro

Metrics 指标扩展

使用官方 metrics 扩展把 SQL、缓存和事务事件输出到自定义指标系统。

extensions/metrics 不内置 Prometheus、OpenTelemetry 或其他第三方依赖。它只把 Oro 事件转换成稳定的指标样本,由业务项目决定写入哪里。

import "github.com/duxweb/oro/extensions/metrics"

安装

recorder := metrics.NewMemoryRecorder()

db, err := oro.Open(oro.Config{
    Connections: map[string]oro.ConnectionConfig{
        "default": {Driver: sqlite.Open("app.db")},
    },
    Extensions: []oro.Extension{
        metrics.Extension(metrics.WithRecorder(recorder)),
    },
})

MemoryRecorder 适合测试和本地调试,不建议作为生产指标后端。

样本字段

type Sample struct {
    Event     oro.EventName
    Operation string
    ModelName string
    Table     string
    Rows      int64
    Duration  time.Duration
    Err       error
}

会记录的事件包括:

事件 说明
AfterSQL SQL 执行完成,包含耗时和错误
AfterCacheHit 查询缓存命中
AfterCacheMiss 查询缓存未命中
AfterCommit 事务提交
AfterRollback 事务回滚

自定义 Recorder

type Recorder struct{}

func (Recorder) Record(ctx context.Context, sample metrics.Sample) {
    // 输出到 Prometheus、OpenTelemetry、日志系统或自研指标服务
}

db, err := oro.Open(oro.Config{
    Extensions: []oro.Extension{
        metrics.Extension(metrics.WithRecorder(Recorder{})),
    },
})

Operation 使用清晰的数据库操作语义,例如 selectcreateupdatedeleterawcommit

编辑此页