Getting started with otelsql, the OpenTelemetry instrumentation for Go SQL | OpenTelemetry driverをラップする系 GitHub - nhatthm/otelsql: OpenTelemetry SQL database driver wrapper for Go sqlx などのラッパーライブラリと組み合わせることも簡単。 package main import ( _ "github.com/lib/pq" "github.com/jmoiron/sqlx" semconv "go.opentelemetry.io/otel/semconv/v1.27.0" "go.nhat.io/otelsql" ) func main(){ // ... driverName, err := otelsql.Register("mysql", otelsql.AllowRoot(), otelsql.TraceQueryWithoutArgs(), otelsql.TraceRowsClose(), otelsql.TraceRowsAffected(), otelsql.WithDatabaseName(dbname), // Optional. otelsql.WithSystem(semconv.DBSystemMySQL), // Optional. ) if err != nil { panic(err) } sqlxDb, err := sqlx.Open(driverName, dsn) if err != nil { panic(err) } // ... } sql.Openを置き換える系 GitHub - XSAM/otelsql: OpenTelemetry instrumentation for database/sql GitHub - uptrace/opentelemetry-go-extra: OpenTelemetry instrumentations for Go go getするときに各DBライブラリに適した otelsql, otelsqlx, otelgorm を選択する こちらも修正は容易で、 sql.Open を otelsql.Open に変えるだけである // github.com/XSAM/otelsql の場合 db, err := otelsql.Open("mysql", mysqlDSN, otelsql.WithAttributes( semconv.DBSystemMySQL, )) if err != nil { panic(err) } defer db.Close() // metricsを収集したい場合 err = otelsql.RegisterDBStatsMetrics(db, otelsql.WithAttributes( semconv.DBSystemMySQL, )) if err != nil { panic(err) } sqlxDb := sqlx.NewDb(sqlDb, "mysql") // github.com/uptrace/opentelemetry-go-extra/otelsqlx の場合 db, err := otelsqlx.Open("mysql", mysqlDSN, otelsql.WithAttributes(semconv.DBSystemMySQL), otelsql.WithDBName("mydb"), ) if err != nil { panic(err) } defer db.Close()