Getting started with otelsql, the OpenTelemetry instrumentation for Go SQL | OpenTelemetry
driverをラップする系
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()