otelpgx

package module
v0.0.0-...-efb0b68 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 26, 2024 License: Apache-2.0 Imports: 25 Imported by: 0

README

Go Reference

otelpgx

Provides OpenTelemetry instrumentation for the jackc/pgx library.

Requirements

  • go 1.18 (or higher)
  • pgx v5 (or higher)

Usage

Install the library:

go get github.com/exaring/otelpgx

Create the tracer as part of your connection:

cfg, err := pgxpool.ParseConfig(connString)
if err != nil {
    return nil, fmt.Errorf("create connection pool: %w", err)
}

cfg.ConnConfig.Tracer = otelpgx.NewTracer()

conn, err := pgxpool.NewConfig(ctx, cfg)
if err != nil {
    return nil, fmt.Errorf("connect to database: %w", err)
}

if err := otelpgx.RecordStats(conn); err != nil {
    return nil, fmt.Errorf("unable to record database stats: %w", err)
}

See options.go for the full list of options.

Documentation

Index

Constants

View Source
const (
	DBMaxConnLifetimeKey          = "db.max_conn_lifetime"
	DBMaxConnIdleTimeKey          = "db.max_conn_idle_time"
	DBMaxConnsKey                 = "db.max_conns"
	DBMinConnsKey                 = "db.min_conns"
	DBHealthCheckPeriodKey        = "db.health_check_period"
	DBStatementCacheCapacityKey   = "db.statement_cache_capacity"
	DBDescriptionCacheCapacityKey = "db.description_cache_capacity"
	DBHostKey                     = "db.host"
	DBPortKey                     = "db.port"
	DBUserKey                     = "db.user"
	DBConnectTimeoutKey           = "db.connect_timeout"
	DBKerberosSrvNameKey          = "db.kerberos_srv_name"
	DBKerberosSpnKey              = "db.kerberos_spn"
)
View Source
const (
	LevelTrace slog.Level = -8
	LevelNone  slog.Level = 12
)
View Source
const (
	UnitDimensionless = "1"
	UnitBytes         = "By"
	UnitMilliseconds  = "ms"
)
View Source
const (
	// RowsAffectedKey represents the number of rows affected.
	RowsAffectedKey = attribute.Key("pgx.rows_affected")
	// QueryParametersKey represents the query parameters.
	QueryParametersKey = attribute.Key("pgx.query.parameters")
	// BatchSizeKey represents the batch size.
	BatchSizeKey = attribute.Key("pgx.batch.size")
	// PrepareStmtNameKey represents the prepared statement name.
	PrepareStmtNameKey = attribute.Key("pgx.prepare_stmt.name")
	// SQLStateKey represents PostgreSQL error code,
	// see https://www.postgresql.org/docs/current/errcodes-appendix.html.
	SQLStateKey = attribute.Key("pgx.sql_state")
)

Variables

View Source
var LevelNames = map[slog.Level]string{
	LevelTrace: "TRACE",
	LevelNone:  "NONE",
}

Functions

func NewTraceLogger

func NewTraceLogger(opts ...LoggerOption) *tracelog.TraceLog

NewTraceLogger creates a new trace logger.

func RecordStats

func RecordStats(db *pgxpool.Pool, opts ...MeterOption) error

RecordStats records database statistics for provided pgxpool.Pool at the provided interval.

Types

type LogLevelConverter

type LogLevelConverter interface {
	ToTraceLogLevel(leveler slog.Leveler) tracelog.LogLevel
	ToSlogLevel(level tracelog.LogLevel) slog.Leveler
}

type Logger

type Logger struct {
	// contains filtered or unexported fields
}

func (Logger) Log

func (l Logger) Log(ctx context.Context, level tracelog.LogLevel, msg string, data map[string]any)

type LoggerOption

type LoggerOption func(*Logger)

func WithLogLevel

func WithLogLevel(level slog.Level) LoggerOption

WithLogLevel sets the log level.

func WithLogLevelConverter

func WithLogLevelConverter(c LogLevelConverter) LoggerOption

WithLogLevelConverter sets the log level converter.

func WithLogger

func WithLogger(logger *slog.Logger) LoggerOption

WithLogger sets the logger.

type Meter

type Meter struct {
	// contains filtered or unexported fields
}

type MeterOption

type MeterOption interface {
	// contains filtered or unexported methods
}

MeterOption allows for managing otelsql configuration using functional options.

func WithMeterProvider

func WithMeterProvider(p metric.MeterProvider) MeterOption

WithMeterProvider sets meter provider.

func WithMinimumReadDBStatsInterval

func WithMinimumReadDBStatsInterval(interval time.Duration) MeterOption

WithMinimumReadDBStatsInterval sets the minimum interval between calls to db.Stats(). Negative values are ignored.

type MeterOptionFunc

type MeterOptionFunc func(o *Meter)

type Option

type Option interface {
	// contains filtered or unexported methods
}

Option specifies instrumentation configuration options.

func WithAttributes

func WithAttributes(attrs ...attribute.KeyValue) Option

WithAttributes specifies additional attributes to be added to the span.

func WithDisableSQLStatementInAttributes

func WithDisableSQLStatementInAttributes() Option

WithDisableSQLStatementInAttributes will disable logging the SQL statement in the span's attributes.

func WithIncludeQueryParameters

func WithIncludeQueryParameters() Option

WithIncludeQueryParameters includes the SQL query parameters in the span attribute with key pgx.query.parameters. This is implicitly disabled if WithDisableSQLStatementInAttributes is used.

func WithSpanNameFunc

func WithSpanNameFunc(fn SpanNameFunc) Option

WithSpanNameFunc will use the provided function to generate the span name for a SQL statement. The function will be called with the SQL statement as a parameter.

By default, the whole SQL statement is used as a span name, where applicable.

func WithTracerProvider

func WithTracerProvider(provider trace.TracerProvider) Option

WithTracerProvider specifies a tracer provider to use for creating a tracer. If none is specified, the global provider is used.

func WithTrimSQLInSpanName

func WithTrimSQLInSpanName() Option

WithTrimSQLInSpanName will use the SQL statement's first word as the span name. By default, the whole SQL statement is used as a span name, where applicable.

type ResourceConfig

type ResourceConfig struct {
	ServiceName    string
	ServiceVersion string
	ServiceEnv     string
}

type SpanNameFunc

type SpanNameFunc func(stmt string) string

SpanNameFunc is a function that can be used to generate a span name for a SQL. The function will be called with the SQL statement as a parameter.

type Tracer

type Tracer struct {
	// contains filtered or unexported fields
}

Tracer is a wrapper around the pgx tracer interfaces which instrument queries.

func NewTracer

func NewTracer(opts ...Option) *Tracer

NewTracer returns a new Tracer.

func (*Tracer) TraceBatchEnd

func (t *Tracer) TraceBatchEnd(ctx context.Context, _ *pgx.Conn, data pgx.TraceBatchEndData)

TraceBatchEnd is called at the end of SendBatch calls.

func (*Tracer) TraceBatchQuery

func (t *Tracer) TraceBatchQuery(ctx context.Context, conn *pgx.Conn, data pgx.TraceBatchQueryData)

TraceBatchQuery is called at the after each query in a batch.

func (*Tracer) TraceBatchStart

func (t *Tracer) TraceBatchStart(ctx context.Context, conn *pgx.Conn, data pgx.TraceBatchStartData) context.Context

TraceBatchStart is called at the beginning of SendBatch calls. The returned context is used for the rest of the call and will be passed to TraceBatchQuery and TraceBatchEnd.

func (*Tracer) TraceConnectEnd

func (t *Tracer) TraceConnectEnd(ctx context.Context, data pgx.TraceConnectEndData)

TraceConnectEnd is called at the end of Connect and ConnectConfig calls.

func (*Tracer) TraceConnectStart

func (t *Tracer) TraceConnectStart(ctx context.Context, data pgx.TraceConnectStartData) context.Context

TraceConnectStart is called at the beginning of Connect and ConnectConfig calls. The returned context is used for the rest of the call and will be passed to TraceConnectEnd.

func (*Tracer) TraceCopyFromEnd

func (t *Tracer) TraceCopyFromEnd(ctx context.Context, _ *pgx.Conn, data pgx.TraceCopyFromEndData)

TraceCopyFromEnd is called at the end of CopyFrom calls.

func (*Tracer) TraceCopyFromStart

func (t *Tracer) TraceCopyFromStart(ctx context.Context, conn *pgx.Conn, data pgx.TraceCopyFromStartData) context.Context

TraceCopyFromStart is called at the beginning of CopyFrom calls. The returned context is used for the rest of the call and will be passed to TraceCopyFromEnd.

func (*Tracer) TracePrepareEnd

func (t *Tracer) TracePrepareEnd(ctx context.Context, _ *pgx.Conn, data pgx.TracePrepareEndData)

TracePrepareEnd is called at the end of Prepare calls.

func (*Tracer) TracePrepareStart

func (t *Tracer) TracePrepareStart(ctx context.Context, conn *pgx.Conn, data pgx.TracePrepareStartData) context.Context

TracePrepareStart is called at the beginning of Prepare calls. The returned context is used for the rest of the call and will be passed to TracePrepareEnd.

func (*Tracer) TraceQueryEnd

func (t *Tracer) TraceQueryEnd(ctx context.Context, _ *pgx.Conn, data pgx.TraceQueryEndData)

TraceQueryEnd is called at the end of Query, QueryRow, and Exec calls.

func (*Tracer) TraceQueryStart

func (t *Tracer) TraceQueryStart(ctx context.Context, conn *pgx.Conn, data pgx.TraceQueryStartData) context.Context

TraceQueryStart is called at the beginning of Query, QueryRow, and Exec calls. The returned context is used for the rest of the call and will be passed to TraceQueryEnd.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL