A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://github.com/XSAM/otelsql below:

XSAM/otelsql: OpenTelemetry instrumentation for database/sql

It is an OpenTelemetry instrumentation for Golang database/sql, a port from open-telemetry/opentelemetry-go-contrib#505.

It instruments traces and metrics.

$ go get github.com/XSAM/otelsql

This project provides four different ways to instrument database/sql:

otelsql.Open, otelsql.OpenDB, otesql.Register and otelsql.WrapDriver.

And then use otelsql.RegisterDBStatsMetrics to instrument sql.DBStats with metrics.

db, err := otelsql.Open("mysql", mysqlDSN, otelsql.WithAttributes(
	semconv.DBSystemMySQL,
))
if err != nil {
	panic(err)
}
defer db.Close()

err = otelsql.RegisterDBStatsMetrics(db, otelsql.WithAttributes(
	semconv.DBSystemMySQL,
))
if err != nil {
	panic(err)
}

Check Option for more features like adding context propagation to SQL queries when enabling WithSQLCommenter.

See godoc for details.

Getting started with otelsql, the OpenTelemetry instrumentation for Go SQL, is a blog post that explains how to use otelsql in miutes.

This project provides two docker-compose examples to show how to use it.

Semantic Convention Stability Migration

The environment variable OTEL_SEMCONV_STABILITY_OPT_IN will be supported for at least six months. After this period, support for legacy metrics and Semantic Conventions v1.24.0 may be removed in the next release.

Check the CHANGELOG.md for more details.

It creates spans on corresponding methods.

Use SpanOptions to adjust creation of spans.

Trace Semantic Convention Stability

The instrumentation supports different OpenTelemetry semantic convention stability levels, configured through the OTEL_SEMCONV_STABILITY_OPT_IN environment variable:

Setting Description empty (default) Only uses db.statement attribute. database/dup Uses both db.statement and db.query.text attributes. database Uses db.query.text attribute.

Two types of metrics are provided depending on the semantic convention stability setting:

OpenTelemetry Semantic Convention Metrics Connection Statistics Metrics (from Go's sql.DBStats) Metric Semantic Convention Stability

The instrumentation supports different OpenTelemetry semantic convention stability levels, configured through the OTEL_SEMCONV_STABILITY_OPT_IN environment variable:

Setting Metrics Emitted Description empty (default) db.sql.latency only Only uses legacy metric database/dup Both db.sql.latency and db.client.operation.duration Emits both legacy and new OTel metric formats database db.client.operation.duration only Only uses the new OTel semantic convention metric

Connection statistics metrics (db.sql.connection.*) are always emitted regardless of the stability setting.

This allows users to gradually migrate to the new OpenTelemetry semantic conventions while maintaining backward compatibility with existing dashboards and alerts.

When errors occur during database operations, the error.type attribute is automatically populated with the type of the error. This provides more detailed information for debugging and monitoring:

  1. For standard driver errors: Special handling for common driver errors:

  2. For custom errors: The fully qualified type name is used (e.g., github.com/your/package.CustomError).

  3. For built-in errors: The type name is used (e.g., *errors.errorString for errors created with errors.New()).

Note: The error.type attribute is only available when using the new stable OpenTelemetry semantic convention metrics. This requires setting OTEL_SEMCONV_STABILITY_OPT_IN to either database/dup or database. With the default setting (empty), which only uses legacy metrics, the error.type attribute will not be populated.

This project is tested on the following systems.

OS Go Version Architecture Ubuntu 1.24 amd64 Ubuntu 1.23 amd64 Ubuntu 1.24 386 Ubuntu 1.23 386 MacOS 1.24 amd64 MacOS 1.23 amd64 Windows 1.24 amd64 Windows 1.23 amd64 Windows 1.24 386 Windows 1.23 386

While this project should work for other systems, no compatibility guarantees are made for those systems currently.

The project follows the Release Policy to support major Go releases.

Based on this comment, OpenTelemetry SIG team like to see broader usage and community consensus on an approach before they commit to the level of support that would be required of a package in contrib. But it is painful for users without a stable version, and they have to use replacement in go.mod to use this instrumentation.

Therefore, I host this module independently for convenience and make improvements based on users' feedback.

I use GitHub discussions/issues for most communications. Feel free to contact me on CNCF slack.


RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4