Skip to content

Commit 92615d9

Browse files
dmathieuMrAlias
andauthored
otelmongo: default to stable semconv (#8230)
Co-authored-by: Tyler Yahn <[email protected]>
1 parent 09c71d1 commit 92615d9

File tree

4 files changed

+24
-50
lines changed

4 files changed

+24
-50
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
2727

2828
- Improve performance by reducing allocations in the gRPC stats handler in `go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc`. (#8035)
2929
- Export the `ReadEvents` and `WriteEvents` constants in `go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp` so they can be used in `WithMessageEvents`. (#8153)
30+
- Switched the default for `OTEL_SEMCONV_STABILITY_OPT_IN` to emit the v1.37.0 semantic conventions by default in `go.opentelemetry.io/contrib/instrumentation/go.mongodb.org/mongo-driver/mongo/otelmongo`.
31+
Use the environment variable `OTEL_SEMCONV_STABILITY_OPT_IN` to configure duplication with old semantic conventions if needed (i.e. `OTEL_SEMCONV_STABILITY_OPT_IN="database/dup"`). (#8230)
3032

3133
### Deprecated
3234

instrumentation/go.mongodb.org/mongo-driver/mongo/otelmongo/internal/semconv/event_monitor.go

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,8 @@ import (
1919

2020
// Constants for environment variable keys and versions.
2121
const (
22-
semconvOptIn = "OTEL_SEMCONV_STABILITY_OPT_IN"
23-
semconvOptInDup = "database/dup"
24-
semconvOptIn1260 = "database"
22+
semconvOptIn = "OTEL_SEMCONV_STABILITY_OPT_IN"
23+
semconvOptInDup = "database/dup"
2524
)
2625

2726
// EventMonitor is responsible for monitoring events with a specified semantic
@@ -88,13 +87,7 @@ func (m EventMonitor) CommandStartedTraceAttrs(
8887
)
8988
}
9089

91-
// Check for the 1.26.0 opt-in
92-
if hasOptIn(m.version, semconvOptIn1260) {
93-
return commandStartedTraceAttrs(evt, opts...)
94-
}
95-
96-
// Fallback to v1.21.0
97-
return commandStartedTraceAttrsV1210(evt, opts...)
90+
return commandStartedTraceAttrs(evt, opts...)
9891
}
9992

10093
// peerInfo extracts the hostname and port from a CommandStartedEvent.

instrumentation/go.mongodb.org/mongo-driver/mongo/otelmongo/internal/semconv/event_monitor_test.go

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,6 @@ func TestNewEventMonitor(t *testing.T) {
2727
version: "",
2828
want: "",
2929
},
30-
{
31-
name: "Version 1260",
32-
version: semconvOptIn1260,
33-
want: "database",
34-
},
3530
{
3631
name: "Duplicate Version",
3732
version: semconvOptInDup,
@@ -114,18 +109,12 @@ func TestCommandStartedTraceAttrs(t *testing.T) {
114109
name: "no version",
115110
initAttrs: []attribute.KeyValue{},
116111
version: "",
117-
want: v1210,
112+
want: v1260,
118113
},
119114
{
120115
name: "unsupported version",
121116
initAttrs: []attribute.KeyValue{},
122117
version: "database/foo",
123-
want: v1210,
124-
},
125-
{
126-
name: "database",
127-
initAttrs: []attribute.KeyValue{},
128-
version: "database",
129118
want: v1260,
130119
},
131120
{

instrumentation/go.mongodb.org/mongo-driver/mongo/otelmongo/test/mongo_test.go

Lines changed: 18 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,10 @@ func TestDBCrudOperation(t *testing.T) {
3030
return assert.Equal(t, "test-collection.insert", s.Name(), "expected %s", s.Name())
3131
},
3232
func(s sdktrace.ReadOnlySpan) bool {
33-
return assert.Contains(t, s.Attributes(), attribute.String("db.operation", "insert"))
33+
return assert.Contains(t, s.Attributes(), attribute.String("db.operation.name", "insert"))
3434
},
3535
func(s sdktrace.ReadOnlySpan) bool {
36-
return assert.Contains(t, s.Attributes(), attribute.String("db.mongodb.collection", "test-collection"))
36+
return assert.Contains(t, s.Attributes(), attribute.String("db.collection.name", "test-collection"))
3737
},
3838
func(s sdktrace.ReadOnlySpan) bool {
3939
return assert.Equal(t, codes.Unset, s.Status().Code)
@@ -56,7 +56,7 @@ func TestDBCrudOperation(t *testing.T) {
5656
excludeCommand: false,
5757
validators: append(commonValidators, func(s sdktrace.ReadOnlySpan) bool {
5858
for _, attr := range s.Attributes() {
59-
if attr.Key == "db.statement" {
59+
if attr.Key == "db.query.text" {
6060
return assert.Contains(t, attr.Value.AsString(), `"test-item":"test-value"`)
6161
}
6262
}
@@ -72,7 +72,7 @@ func TestDBCrudOperation(t *testing.T) {
7272
excludeCommand: true,
7373
validators: append(commonValidators, func(s sdktrace.ReadOnlySpan) bool {
7474
for _, attr := range s.Attributes() {
75-
if attr.Key == "db.statement" {
75+
if attr.Key == "db.query.text" {
7676
return false
7777
}
7878
}
@@ -128,11 +128,11 @@ func TestDBCrudOperation(t *testing.T) {
128128
s := spans[0]
129129
assert.Equal(mt, trace.SpanKindClient, s.SpanKind())
130130
attrs := s.Attributes()
131-
assert.Contains(mt, attrs, attribute.String("db.system", "mongodb"))
132-
assert.Contains(mt, attrs, attribute.String("net.peer.name", "<mock_connection>"))
133-
assert.Contains(mt, attrs, attribute.Int64("net.peer.port", int64(27017)))
134-
assert.Contains(mt, attrs, attribute.String("net.transport", "ip_tcp"))
135-
assert.Contains(mt, attrs, attribute.String("db.name", "test-database"))
131+
assert.Contains(mt, attrs, attribute.String("db.system.name", "mongodb"))
132+
assert.Contains(mt, attrs, attribute.String("network.peer.address", "<mock_connection>:27017"))
133+
assert.Contains(mt, attrs, attribute.Int64("network.peer.port", int64(27017)))
134+
assert.Contains(mt, attrs, attribute.String("network.transport", "tcp"))
135+
assert.Contains(mt, attrs, attribute.String("db.namespace", "test-database"))
136136
for _, v := range tc.validators {
137137
assert.True(mt, v(s))
138138
}
@@ -158,10 +158,10 @@ func TestDBCollectionAttribute(t *testing.T) {
158158
return assert.Equal(t, "test-collection.delete", s.Name())
159159
},
160160
func(s sdktrace.ReadOnlySpan) bool {
161-
return assert.Contains(t, s.Attributes(), attribute.String("db.operation", "delete"))
161+
return assert.Contains(t, s.Attributes(), attribute.String("db.operation.name", "delete"))
162162
},
163163
func(s sdktrace.ReadOnlySpan) bool {
164-
return assert.Contains(t, s.Attributes(), attribute.String("db.mongodb.collection", "test-collection"))
164+
return assert.Contains(t, s.Attributes(), attribute.String("db.collection.name", "test-collection"))
165165
},
166166
func(s sdktrace.ReadOnlySpan) bool {
167167
return assert.Equal(t, codes.Unset, s.Status().Code)
@@ -184,7 +184,7 @@ func TestDBCollectionAttribute(t *testing.T) {
184184
return assert.Equal(t, "listCollections", s.Name())
185185
},
186186
func(s sdktrace.ReadOnlySpan) bool {
187-
return assert.Contains(t, s.Attributes(), attribute.String("db.operation", "listCollections"))
187+
return assert.Contains(t, s.Attributes(), attribute.String("db.operation.name", "listCollections"))
188188
},
189189
func(s sdktrace.ReadOnlySpan) bool {
190190
return assert.Equal(t, codes.Unset, s.Status().Code)
@@ -233,28 +233,18 @@ func TestDBCollectionAttribute(t *testing.T) {
233233
s := spans[0]
234234
assert.Equal(mt, trace.SpanKindClient, s.SpanKind())
235235
attrs := s.Attributes()
236-
assert.Contains(mt, attrs, attribute.String("db.system", "mongodb"))
237-
assert.Contains(mt, attrs, attribute.String("net.peer.name", "<mock_connection>"))
238-
assert.Contains(mt, attrs, attribute.Int64("net.peer.port", int64(27017)))
239-
assert.Contains(mt, attrs, attribute.String("net.transport", "ip_tcp"))
240-
assert.Contains(mt, attrs, attribute.String("db.name", "test-database"))
236+
assert.Contains(mt, attrs, attribute.String("db.system.name", "mongodb"))
237+
assert.Contains(mt, attrs, attribute.String("network.peer.address", "<mock_connection>:27017"))
238+
assert.Contains(mt, attrs, attribute.Int64("network.peer.port", int64(27017)))
239+
assert.Contains(mt, attrs, attribute.String("network.transport", "tcp"))
240+
assert.Contains(mt, attrs, attribute.String("db.namespace", "test-database"))
241241
for _, v := range tc.validators {
242242
assert.True(mt, v(s))
243243
}
244244
})
245245
}
246246
}
247247

248-
func assertSemconv1170(mt *mtest.T, attrs []attribute.KeyValue) {
249-
mt.Helper()
250-
251-
assert.Contains(mt, attrs, attribute.String("db.system", "mongodb"))
252-
assert.Contains(mt, attrs, attribute.String("net.peer.name", "<mock_connection>"))
253-
assert.Contains(mt, attrs, attribute.Int64("net.peer.port", int64(27017)))
254-
assert.Contains(mt, attrs, attribute.String("net.transport", "ip_tcp"))
255-
assert.Contains(mt, attrs, attribute.String("db.name", "test-database"))
256-
}
257-
258248
func assertSemconv(mt *mtest.T, attrs []attribute.KeyValue) {
259249
mt.Helper()
260250

@@ -274,7 +264,7 @@ func TestSemanticConventionOptIn(t *testing.T) {
274264
{
275265
name: "default",
276266
semconvOptIn: "",
277-
assert: assertSemconv1170,
267+
assert: assertSemconv,
278268
},
279269
{
280270
name: "database",

0 commit comments

Comments
 (0)