Skip to content

Commit

Permalink
Expose instrumentation scope name (#4448)
Browse files Browse the repository at this point in the history
Co-authored-by: Robert Pająk <pellared@hotmail.com>
Co-authored-by: David Ashpole <dashpole@google.com>
  • Loading branch information
3 people committed Nov 8, 2023
1 parent 2b69029 commit a3b16ae
Show file tree
Hide file tree
Showing 19 changed files with 58 additions and 42 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Expand Up @@ -18,6 +18,7 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
- Add support for `console` span exporter and metrics exporter in `go.opentelemetry.io/contrib/exporters/autoexport`. (#4486)
- Set unit and description on all instruments in `go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp`. (#4500)
- Add metric support for `grpc.StatsHandler` in `go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc`. (#4356)
- Expose the name of the scopes in all instrumentation libraries as `ScopeName`. (#4448)

### Changed

Expand Down
4 changes: 2 additions & 2 deletions instrumentation/README.md
Expand Up @@ -92,5 +92,5 @@ Additionally the following guidelines for package composition need to be followe
- All instrumentation packages MUST provide an option to accept a `TracerProvider` if it uses a Tracer, a `MeterProvider` if it uses a Meter, and `Propagators` if it handles any context propagation.
Also, packages MUST use the default `TracerProvider`, `MeterProvider`, and `Propagators` supplied by the `global` package if no optional one is provided.
- All instrumentation packages MUST NOT provide an option to accept a `Tracer` or `Meter`.
- All instrumentation packages MUST create any used `Tracer` or `Meter` with a name matching the instrumentation package name.
- All instrumentation packages MUST create any used `Tracer` or `Meter` with a semantic version corresponding to the version of the module containing the instrumentation.
- All instrumentation packages MUST define a `ScopeName` constant with a value matching the instrumentation package and use it when creating a `Tracer` or `Meter`.
- All instrumentation packages MUST define a `Version` function returning the version of the module containing the instrumentation and use it when creating a `Tracer` or `Meter`.
Expand Up @@ -29,7 +29,8 @@ import (
)

const (
tracerName = "go.opentelemetry.io/contrib/instrumentation/github.com/aws/aws-lambda-go/otellambda"
// ScopeName is the instrumentation scope name.
ScopeName = "go.opentelemetry.io/contrib/instrumentation/github.com/aws/aws-lambda-go/otellambda"
)

var errorLogger = log.New(log.Writer(), "OTel Lambda Error: ", 0)
Expand All @@ -53,7 +54,7 @@ func newInstrumentor(opts ...Option) instrumentor {

return instrumentor{
configuration: cfg,
tracer: cfg.TracerProvider.Tracer(tracerName, trace.WithInstrumentationVersion(Version())),
tracer: cfg.TracerProvider.Tracer(ScopeName, trace.WithInstrumentationVersion(Version())),
resAttrs: []attribute.KeyValue{},
}
}
Expand Down
5 changes: 3 additions & 2 deletions instrumentation/github.com/aws/aws-sdk-go-v2/otelaws/aws.go
Expand Up @@ -31,7 +31,8 @@ import (
)

const (
tracerName = "go.opentelemetry.io/contrib/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws"
// ScopeName is the instrumentation scope name.
ScopeName = "go.opentelemetry.io/contrib/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws"
)

type spanTimestampKey struct{}
Expand Down Expand Up @@ -160,7 +161,7 @@ func AppendMiddlewares(apiOptions *[]func(*middleware.Stack) error, opts ...Opti
}

m := otelMiddlewares{
tracer: cfg.TracerProvider.Tracer(tracerName,
tracer: cfg.TracerProvider.Tracer(ScopeName,
trace.WithInstrumentationVersion(Version())),
propagator: cfg.TextMapPropagator,
attributeSetter: cfg.AttributeSetter,
Expand Down
Expand Up @@ -24,7 +24,8 @@ import (
oteltrace "go.opentelemetry.io/otel/trace"
)

const tracerName = "go.opentelemetry.io/contrib/instrumentation/github.com/emicklei/go-restful/otelrestful"
// ScopeName is the instrumentation scope name.
const ScopeName = "go.opentelemetry.io/contrib/instrumentation/github.com/emicklei/go-restful/otelrestful"

// OTelFilter returns a restful.FilterFunction which will trace an incoming request.
//
Expand All @@ -40,7 +41,7 @@ func OTelFilter(service string, opts ...Option) restful.FilterFunction {
cfg.TracerProvider = otel.GetTracerProvider()
}
tracer := cfg.TracerProvider.Tracer(
tracerName,
ScopeName,
oteltrace.WithInstrumentationVersion(Version()),
)
if cfg.Propagators == nil {
Expand Down
9 changes: 5 additions & 4 deletions instrumentation/github.com/gin-gonic/gin/otelgin/gintrace.go
Expand Up @@ -31,8 +31,9 @@ import (
)

const (
tracerKey = "otel-go-contrib-tracer"
tracerName = "go.opentelemetry.io/contrib/instrumentation/github.com/gin-gonic/gin/otelgin"
tracerKey = "otel-go-contrib-tracer"
// ScopeName is the instrumentation scope name.
ScopeName = "go.opentelemetry.io/contrib/instrumentation/github.com/gin-gonic/gin/otelgin"
)

// Middleware returns middleware that will trace incoming requests.
Expand All @@ -47,7 +48,7 @@ func Middleware(service string, opts ...Option) gin.HandlerFunc {
cfg.TracerProvider = otel.GetTracerProvider()
}
tracer := cfg.TracerProvider.Tracer(
tracerName,
ScopeName,
oteltrace.WithInstrumentationVersion(Version()),
)
if cfg.Propagators == nil {
Expand Down Expand Up @@ -116,7 +117,7 @@ func HTML(c *gin.Context, code int, name string, obj interface{}) {
}
if !ok {
tracer = otel.GetTracerProvider().Tracer(
tracerName,
ScopeName,
oteltrace.WithInstrumentationVersion(Version()),
)
}
Expand Down
Expand Up @@ -65,7 +65,7 @@ func TestPropagationWithGlobalPropagators(t *testing.T) {
SpanID: trace.SpanID{0x01},
})
ctx = trace.ContextWithRemoteSpanContext(ctx, sc)
ctx, _ = provider.Tracer(tracerName).Start(ctx, "test")
ctx, _ = provider.Tracer(ScopeName).Start(ctx, "test")
otel.GetTextMapPropagator().Inject(ctx, propagation.HeaderCarrier(r.Header))

router := gin.New()
Expand All @@ -92,7 +92,7 @@ func TestPropagationWithCustomPropagators(t *testing.T) {
SpanID: trace.SpanID{0x01},
})
ctx = trace.ContextWithRemoteSpanContext(ctx, sc)
ctx, _ = provider.Tracer(tracerName).Start(ctx, "test")
ctx, _ = provider.Tracer(ScopeName).Start(ctx, "test")
b3.Inject(ctx, propagation.HeaderCarrier(r.Header))

router := gin.New()
Expand Down
5 changes: 3 additions & 2 deletions instrumentation/github.com/gorilla/mux/otelmux/mux.go
Expand Up @@ -30,7 +30,8 @@ import (
)

const (
tracerName = "go.opentelemetry.io/contrib/instrumentation/github.com/gorilla/mux/otelmux"
// ScopeName is the instrumentation scope name.
ScopeName = "go.opentelemetry.io/contrib/instrumentation/github.com/gorilla/mux/otelmux"
)

// Middleware sets up a handler to start tracing the incoming
Expand All @@ -45,7 +46,7 @@ func Middleware(service string, opts ...Option) mux.MiddlewareFunc {
cfg.TracerProvider = otel.GetTracerProvider()
}
tracer := cfg.TracerProvider.Tracer(
tracerName,
ScopeName,
trace.WithInstrumentationVersion(Version()),
)
if cfg.Propagators == nil {
Expand Down
7 changes: 4 additions & 3 deletions instrumentation/github.com/labstack/echo/otelecho/echo.go
Expand Up @@ -30,8 +30,9 @@ import (
)

const (
tracerKey = "otel-go-contrib-tracer-labstack-echo"
tracerName = "go.opentelemetry.io/contrib/instrumentation/github.com/labstack/echo/otelecho"
tracerKey = "otel-go-contrib-tracer-labstack-echo"
// ScopeName is the instrumentation scope name.
ScopeName = "go.opentelemetry.io/contrib/instrumentation/github.com/labstack/echo/otelecho"
)

// Middleware returns echo middleware which will trace incoming requests.
Expand All @@ -44,7 +45,7 @@ func Middleware(service string, opts ...Option) echo.MiddlewareFunc {
cfg.TracerProvider = otel.GetTracerProvider()
}
tracer := cfg.TracerProvider.Tracer(
tracerName,
ScopeName,
oteltrace.WithInstrumentationVersion(Version()),
)
if cfg.Propagators == nil {
Expand Down
Expand Up @@ -61,7 +61,7 @@ func TestPropagationWithGlobalPropagators(t *testing.T) {
SpanID: trace.SpanID{0x01},
})
ctx = trace.ContextWithRemoteSpanContext(ctx, sc)
ctx, _ = provider.Tracer(tracerName).Start(ctx, "test")
ctx, _ = provider.Tracer(ScopeName).Start(ctx, "test")
otel.GetTextMapPropagator().Inject(ctx, propagation.HeaderCarrier(r.Header))

router := echo.New()
Expand Down Expand Up @@ -92,7 +92,7 @@ func TestPropagationWithCustomPropagators(t *testing.T) {
SpanID: trace.SpanID{0x01},
})
ctx = trace.ContextWithRemoteSpanContext(ctx, sc)
ctx, _ = provider.Tracer(tracerName).Start(ctx, "test")
ctx, _ = provider.Tracer(ScopeName).Start(ctx, "test")
b3.Inject(ctx, propagation.HeaderCarrier(r.Header))

router := echo.New()
Expand Down
Expand Up @@ -19,7 +19,8 @@ import (
"go.opentelemetry.io/otel/trace"
)

const defaultTracerName = "go.opentelemetry.io/contrib/instrumentation/go.mongodb.org/mongo-driver/mongo/otelmongo"
// ScopeName is the instrumentation scope name.
const ScopeName = "go.opentelemetry.io/contrib/instrumentation/go.mongodb.org/mongo-driver/mongo/otelmongo"

// config is used to configure the mongo tracer.
type config struct {
Expand All @@ -41,7 +42,7 @@ func newConfig(opts ...Option) config {
}

cfg.Tracer = cfg.TracerProvider.Tracer(
defaultTracerName,
ScopeName,
trace.WithInstrumentationVersion(Version()),
)
return cfg
Expand Down
8 changes: 4 additions & 4 deletions instrumentation/google.golang.org/grpc/otelgrpc/config.go
Expand Up @@ -24,8 +24,8 @@ import (
)

const (
// instrumentationName is the name of this instrumentation package.
instrumentationName = "go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc"
// ScopeName is the instrumentation scope name.
ScopeName = "go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc"
// GRPCStatusCodeKey is convention for numeric status code of a gRPC request.
GRPCStatusCodeKey = attribute.Key("rpc.grpc.status_code")
)
Expand Down Expand Up @@ -73,12 +73,12 @@ func newConfig(opts []Option, role string) *config {
}

c.tracer = c.TracerProvider.Tracer(
instrumentationName,
ScopeName,
trace.WithInstrumentationVersion(SemVersion()),
)

c.meter = c.MeterProvider.Meter(
instrumentationName,
ScopeName,
metric.WithInstrumentationVersion(Version()),
metric.WithSchemaURL(semconv.SchemaURL),
)
Expand Down
Expand Up @@ -63,7 +63,7 @@ var (
func UnaryClientInterceptor(opts ...Option) grpc.UnaryClientInterceptor {
cfg := newConfig(opts, "client")
tracer := cfg.TracerProvider.Tracer(
instrumentationName,
ScopeName,
trace.WithInstrumentationVersion(Version()),
)

Expand Down Expand Up @@ -257,7 +257,7 @@ func (w *clientStream) sendStreamEvent(eventType streamEventType, err error) {
func StreamClientInterceptor(opts ...Option) grpc.StreamClientInterceptor {
cfg := newConfig(opts, "client")
tracer := cfg.TracerProvider.Tracer(
instrumentationName,
ScopeName,
trace.WithInstrumentationVersion(Version()),
)

Expand Down Expand Up @@ -327,7 +327,7 @@ func StreamClientInterceptor(opts ...Option) grpc.StreamClientInterceptor {
func UnaryServerInterceptor(opts ...Option) grpc.UnaryServerInterceptor {
cfg := newConfig(opts, "server")
tracer := cfg.TracerProvider.Tracer(
instrumentationName,
ScopeName,
trace.WithInstrumentationVersion(Version()),
)

Expand Down Expand Up @@ -448,7 +448,7 @@ func wrapServerStream(ctx context.Context, ss grpc.ServerStream, cfg *config) *s
func StreamServerInterceptor(opts ...Option) grpc.StreamServerInterceptor {
cfg := newConfig(opts, "server")
tracer := cfg.TracerProvider.Tracer(
instrumentationName,
ScopeName,
trace.WithInstrumentationVersion(Version()),
)

Expand Down
6 changes: 3 additions & 3 deletions instrumentation/gopkg.in/macaron.v1/otelmacaron/macaron.go
Expand Up @@ -26,14 +26,14 @@ import (
oteltrace "go.opentelemetry.io/otel/trace"
)

// instrumentationName is the name of this instrumentation package.
const instrumentationName = "go.opentelemetry.io/contrib/instrumentation/gopkg.in/macaron.v1/otelmacaron"
// ScopeName is the instrumentation scope name.
const ScopeName = "go.opentelemetry.io/contrib/instrumentation/gopkg.in/macaron.v1/otelmacaron"

// Middleware returns a macaron Handler to trace requests to the server.
func Middleware(service string, opts ...Option) macaron.Handler {
cfg := newConfig(opts)
tracer := cfg.TracerProvider.Tracer(
instrumentationName,
ScopeName,
oteltrace.WithInstrumentationVersion(Version()),
)
return func(res http.ResponseWriter, req *http.Request, c *macaron.Context) {
Expand Down
5 changes: 4 additions & 1 deletion instrumentation/host/host.go
Expand Up @@ -30,6 +30,9 @@ import (
"go.opentelemetry.io/otel/metric"
)

// ScopeName is the instrumentation scope name.
const ScopeName = "go.opentelemetry.io/contrib/instrumentation/host"

// Host reports the work-in-progress conventional host metrics specified by OpenTelemetry.
type host struct {
config config
Expand Down Expand Up @@ -102,7 +105,7 @@ func Start(opts ...Option) error {
}
h := &host{
meter: c.MeterProvider.Meter(
"go.opentelemetry.io/contrib/instrumentation/host",
ScopeName,
metric.WithInstrumentationVersion(Version()),
),
config: c,
Expand Down
Expand Up @@ -29,6 +29,9 @@ import (
"go.opentelemetry.io/otel/trace"
)

// ScopeName is the instrumentation scope name.
const ScopeName = "go.opentelemetry.io/otel/instrumentation/httptrace"

// HTTP attributes.
var (
HTTPStatus = attribute.Key("http.status")
Expand Down Expand Up @@ -169,7 +172,7 @@ func NewClientTrace(ctx context.Context, opts ...ClientTraceOption) *httptrace.C
}

ct.tr = ct.tracerProvider.Tracer(
"go.opentelemetry.io/otel/instrumentation/httptrace",
ScopeName,
trace.WithInstrumentationVersion(Version()),
)

Expand Down
2 changes: 1 addition & 1 deletion instrumentation/net/http/otelhttp/common.go
Expand Up @@ -42,5 +42,5 @@ const (
type Filter func(*http.Request) bool

func newTracer(tp trace.TracerProvider) trace.Tracer {
return tp.Tracer(instrumentationName, trace.WithInstrumentationVersion(Version()))
return tp.Tracer(ScopeName, trace.WithInstrumentationVersion(Version()))
}
7 changes: 3 additions & 4 deletions instrumentation/net/http/otelhttp/config.go
Expand Up @@ -25,9 +25,8 @@ import (
"go.opentelemetry.io/otel/trace"
)

const (
instrumentationName = "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"
)
// ScopeName is the instrumentation scope name.
const ScopeName = "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"

// config represents the configuration options available for the http.Handler
// and http.Transport types.
Expand Down Expand Up @@ -76,7 +75,7 @@ func newConfig(opts ...Option) *config {
}

c.Meter = c.MeterProvider.Meter(
instrumentationName,
ScopeName,
metric.WithInstrumentationVersion(Version()),
)

Expand Down
5 changes: 4 additions & 1 deletion instrumentation/runtime/runtime.go
Expand Up @@ -24,6 +24,9 @@ import (
"go.opentelemetry.io/otel/metric"
)

// ScopeName is the instrumentation scope name.
const ScopeName = "go.opentelemetry.io/contrib/instrumentation/runtime"

// Runtime reports the work-in-progress conventional runtime metrics specified by OpenTelemetry.
type runtime struct {
config config
Expand Down Expand Up @@ -106,7 +109,7 @@ func Start(opts ...Option) error {
}
r := &runtime{
meter: c.MeterProvider.Meter(
"go.opentelemetry.io/contrib/instrumentation/runtime",
ScopeName,
metric.WithInstrumentationVersion(Version()),
),
config: c,
Expand Down

0 comments on commit a3b16ae

Please sign in to comment.