Skip to content

Commit 78d106e

Browse files
authored
Sync aws sdk attributes with semantic conventions (#3617)
* sync aws attr with sencov * lint fixes * Add CHANGELOG entry * use semconv consts, fix changelog entry. * import fix * changelog fix * add path to CHANGELOG entry * const system rpc attribute
1 parent 7f84500 commit 78d106e

File tree

6 files changed

+28
-12
lines changed

6 files changed

+28
-12
lines changed

CHANGELOG.md

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

1111
### Added
1212

13+
- AWS SDK add `rpc.system` attribute in `go.opentelemetry.io/contrib/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws`. (#3582, #3617)
1314
- Add the new `go.opentelemetry.io/contrib/instrgen` package to provide auto-generated source code instrumentation. (#3068, #3108)
1415

1516
## [1.16.0-rc.2/0.41.0-rc.2/0.10.0-rc.2] - 2023-03-23
@@ -20,6 +21,7 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
2021

2122
### Fixed
2223

24+
- AWS SDK rename attributes `aws.operation`, `aws.service` to `rpc.method`,`rpc.service` in `go.opentelemetry.io/contrib/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws`. (#3582, #3617)
2325
- AWS SDK span name to be of the format `Service.Operation` in `go.opentelemetry.io/contrib/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws`. (#3582, #3521)
2426
- Prevent sampler configuration reset from erroneously sampling first span in `go.opentelemetry.io/contrib/samplers/jaegerremote`. (#3603, #3604)
2527

instrumentation/github.com/aws/aws-sdk-go-v2/otelaws/attributes.go

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,24 +23,29 @@ import (
2323
"github.com/aws/smithy-go/middleware"
2424

2525
"go.opentelemetry.io/otel/attribute"
26+
semconv "go.opentelemetry.io/otel/semconv/v1.17.0"
2627
)
2728

2829
// AWS attributes.
2930
const (
30-
OperationKey attribute.Key = "aws.operation"
3131
RegionKey attribute.Key = "aws.region"
32-
ServiceKey attribute.Key = "aws.service"
3332
RequestIDKey attribute.Key = "aws.request_id"
33+
AWSSystemVal string = "aws-api"
3434
)
3535

3636
var servicemap = map[string]AttributeSetter{
3737
dynamodb.ServiceID: DynamoDBAttributeSetter,
3838
sqs.ServiceID: SQSAttributeSetter,
3939
}
4040

41+
// SystemAttr return the AWS RPC system attribute.
42+
func SystemAttr() attribute.KeyValue {
43+
return semconv.RPCSystemKey.String(AWSSystemVal)
44+
}
45+
4146
// OperationAttr returns the AWS operation attribute.
4247
func OperationAttr(operation string) attribute.KeyValue {
43-
return OperationKey.String(operation)
48+
return semconv.RPCMethod(operation)
4449
}
4550

4651
// RegionAttr returns the AWS region attribute.
@@ -50,7 +55,7 @@ func RegionAttr(region string) attribute.KeyValue {
5055

5156
// ServiceAttr returns the AWS service attribute.
5257
func ServiceAttr(service string) attribute.KeyValue {
53-
return ServiceKey.String(service)
58+
return semconv.RPCService(service)
5459
}
5560

5661
// RequestIDAttr returns the AWS request ID attribute.

instrumentation/github.com/aws/aws-sdk-go-v2/otelaws/attributes_test.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,13 @@ import (
2020
"github.com/stretchr/testify/assert"
2121

2222
"go.opentelemetry.io/otel/attribute"
23+
semconv "go.opentelemetry.io/otel/semconv/v1.17.0"
2324
)
2425

2526
func TestOperationAttr(t *testing.T) {
2627
operation := "test-operation"
2728
attr := OperationAttr(operation)
28-
assert.Equal(t, attribute.String("aws.operation", operation), attr)
29+
assert.Equal(t, attribute.String("rpc.method", operation), attr)
2930
}
3031

3132
func TestRegionAttr(t *testing.T) {
@@ -37,11 +38,16 @@ func TestRegionAttr(t *testing.T) {
3738
func TestServiceAttr(t *testing.T) {
3839
service := "test-service"
3940
attr := ServiceAttr(service)
40-
assert.Equal(t, attribute.String("aws.service", service), attr)
41+
assert.Equal(t, semconv.RPCService(service), attr)
4142
}
4243

4344
func TestRequestIDAttr(t *testing.T) {
4445
requestID := "test-request-id"
4546
attr := RequestIDAttr(requestID)
4647
assert.Equal(t, attribute.String("aws.request_id", requestID), attr)
4748
}
49+
50+
func TestSystemAttribute(t *testing.T) {
51+
attr := SystemAttr()
52+
assert.Equal(t, semconv.RPCSystemKey.String("aws-api"), attr)
53+
}

instrumentation/github.com/aws/aws-sdk-go-v2/otelaws/aws.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ func (m otelMiddlewares) initializeMiddlewareAfter(stack *middleware.Stack) erro
6464
region := v2Middleware.GetRegion(ctx)
6565

6666
attributes := []attribute.KeyValue{
67+
SystemAttr(),
6768
ServiceAttr(serviceID),
6869
RegionAttr(region),
6970
OperationAttr(operation),

instrumentation/github.com/aws/aws-sdk-go-v2/otelaws/test/aws_test.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -146,9 +146,10 @@ func TestAppendMiddlewares(t *testing.T) {
146146
if c.expectedRequestID != "" {
147147
assert.Contains(t, attrs, attribute.String("aws.request_id", c.expectedRequestID))
148148
}
149-
assert.Contains(t, attrs, attribute.String("aws.service", "Route 53"))
149+
assert.Contains(t, attrs, attribute.String("rpc.system", "aws-api"))
150+
assert.Contains(t, attrs, attribute.String("rpc.service", "Route 53"))
150151
assert.Contains(t, attrs, attribute.String("aws.region", c.expectedRegion))
151-
assert.Contains(t, attrs, attribute.String("aws.operation", "ChangeResourceRecordSets"))
152+
assert.Contains(t, attrs, attribute.String("rpc.method", "ChangeResourceRecordSets"))
152153
})
153154

154155
srv.Close()

instrumentation/github.com/aws/aws-sdk-go-v2/otelaws/test/dynamodbattributes_test.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -97,9 +97,10 @@ func TestDynamodbTags(t *testing.T) {
9797
assert.Equal(t, trace.SpanKindClient, span.SpanKind())
9898
attrs := span.Attributes()
9999
assert.Contains(t, attrs, attribute.Int("http.status_code", cases.expectedStatusCode))
100-
assert.Contains(t, attrs, attribute.String("aws.service", "DynamoDB"))
100+
assert.Contains(t, attrs, attribute.String("rpc.service", "DynamoDB"))
101101
assert.Contains(t, attrs, attribute.String("aws.region", cases.expectedRegion))
102-
assert.Contains(t, attrs, attribute.String("aws.operation", "GetItem"))
102+
assert.Contains(t, attrs, attribute.String("rpc.method", "GetItem"))
103+
assert.Contains(t, attrs, attribute.String("rpc.system", "aws-api"))
103104
assert.Contains(t, attrs, attribute.StringSlice(
104105
"aws.dynamodb.table_names", []string{"table1"},
105106
))
@@ -186,9 +187,9 @@ func TestDynamodbTagsCustomSetter(t *testing.T) {
186187
assert.Equal(t, trace.SpanKindClient, span.SpanKind())
187188
attrs := span.Attributes()
188189
assert.Contains(t, attrs, attribute.Int("http.status_code", cases.expectedStatusCode))
189-
assert.Contains(t, attrs, attribute.String("aws.service", "DynamoDB"))
190+
assert.Contains(t, attrs, attribute.String("rpc.service", "DynamoDB"))
190191
assert.Contains(t, attrs, attribute.String("aws.region", cases.expectedRegion))
191-
assert.Contains(t, attrs, attribute.String("aws.operation", "GetItem"))
192+
assert.Contains(t, attrs, attribute.String("rpc.method", "GetItem"))
192193
assert.Contains(t, attrs, attribute.StringSlice(
193194
"aws.dynamodb.table_names", []string{"table1"},
194195
))

0 commit comments

Comments
 (0)