Skip to content

Commit cdb60e5

Browse files
authored
Merge pull request #105 from scribd/maksimt/SERF-2971/aws-sdk-go-v2
[SERF-2971] Instrument AWS clients using `aws-sdk-go` version 2
2 parents 8ad2626 + 4d2597a commit cdb60e5

File tree

6 files changed

+280
-51
lines changed

6 files changed

+280
-51
lines changed

README.md

Lines changed: 26 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ SDK, the Go version.
4141
- [Database instrumentation & ORM logging](#database-instrumentation---orm-logging)
4242
- [HTTP server middleware example](#http-server-middleware-example)
4343
- [gRPC server interceptors example](#grpc-server-interceptors-example)
44-
- [AWS Session instrumentation](#aws-session-instrumentation)
44+
- [AWS Clients instrumentation](#aws-clients-instrumentation)
4545
- [PubSub instrumentation and logging](#pubsub-instrumentation-and-logging)
4646
- [Kafka](#kafka)
4747
- [Cache instrumentation and logging](#cache-instrumentation-and-logging)
@@ -989,7 +989,7 @@ The `go-sdk` provides an easy way to add application performance monitoring
989989
(APM) & instrumentation to a service. It provides DataDog APM using the
990990
[`dd-trace-go`](https://github.com/DataDog/dd-trace-go) library. `dd-trace-go`
991991
provides gRPC server & client interceptors, HTTP router instrumentation, database connection & ORM instrumentation
992-
and AWS session instrumentation. All of the traces and data are opaquely sent
992+
and AWS clients instrumentation. All of the traces and data are opaquely sent
993993
to DataDog.
994994

995995
### Request ID middleware
@@ -1179,29 +1179,38 @@ func main() {
11791179
}
11801180
```
11811181

1182-
### AWS Session instrumentation
1182+
### AWS clients instrumentation
11831183

1184-
`go-sdk` instruments the AWS session by wrapping it with a DataDog trace and
1184+
`go-sdk` instruments the AWS clients by wrapping it with a DataDog trace and
11851185
tagging it with the service name. In addition, this registers AWS as a separate
11861186
service in DataDog.
11871187

11881188
Example usage of the instrumentation:
11891189

11901190
```go
1191+
import (
1192+
"context"
1193+
"log"
1194+
1195+
"github.com/aws/aws-sdk-go-v2/aws"
1196+
awscfg "github.com/aws/aws-sdk-go-v2/config"
1197+
"github.com/aws/aws-sdk-go-v2/service/s3"
1198+
1199+
instrumentation "github.com/scribd/go-sdk/pkg/instrumentation"
1200+
)
1201+
11911202
func main() {
1192-
s := session.NewSession(&aws.Config{
1193-
Endpoint: aws.String(config.GetString("s3_endpoint")),
1194-
Region: aws.String(config.GetString("default_region")),
1195-
Credentials: credentials.NewStaticCredentials(
1196-
config.GetString("access_key_id"),
1197-
config.GetString("secret_access_key"),
1198-
"",
1199-
),
1200-
})
1201-
1202-
session = instrumentation.InstrumentAWSSession(s, instrumentation.Settings{AppName: "MyServiceName"})
1203-
1204-
// Use the session...
1203+
cfg, err := awscfg.LoadDefaultConfig(context.Background, awscfg.WithRegion("us-west-2"))
1204+
if err != nil {
1205+
log.Fatalf("error: %v", err)
1206+
}
1207+
1208+
instrumentation.InstrumentAWSClient(cfg, instrumentation.Settings{
1209+
AppName: applicationName,
1210+
})
1211+
1212+
// Use the AWS configuration to create clients, such as AWS S3...
1213+
s3client := s3.NewFromConfig(cfg)
12051214
}
12061215
```
12071216

go.mod

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@ require (
77
github.com/DATA-DOG/go-txdb v0.1.3
88
github.com/DataDog/datadog-go v4.8.2+incompatible
99
github.com/aws/aws-sdk-go v1.44.327
10+
github.com/aws/aws-sdk-go-v2 v1.26.1
11+
github.com/aws/aws-sdk-go-v2/config v1.27.11
12+
github.com/aws/aws-sdk-go-v2/service/s3 v1.53.1
13+
github.com/aws/aws-sdk-go-v2/service/sts v1.28.6
1014
github.com/getsentry/sentry-go v0.12.0
1115
github.com/go-kit/kit v0.9.0
1216
github.com/google/uuid v1.6.0
@@ -38,6 +42,27 @@ require (
3842
github.com/DataDog/gostackparse v0.7.0 // indirect
3943
github.com/DataDog/sketches-go v1.4.2 // indirect
4044
github.com/Microsoft/go-winio v0.6.1 // indirect
45+
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.2 // indirect
46+
github.com/aws/aws-sdk-go-v2/credentials v1.17.11 // indirect
47+
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.1 // indirect
48+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.5 // indirect
49+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.5 // indirect
50+
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 // indirect
51+
github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.5 // indirect
52+
github.com/aws/aws-sdk-go-v2/service/dynamodb v1.21.4 // indirect
53+
github.com/aws/aws-sdk-go-v2/service/eventbridge v1.20.4 // indirect
54+
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.2 // indirect
55+
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.7 // indirect
56+
github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.7.34 // indirect
57+
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.7 // indirect
58+
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.5 // indirect
59+
github.com/aws/aws-sdk-go-v2/service/kinesis v1.18.4 // indirect
60+
github.com/aws/aws-sdk-go-v2/service/sfn v1.19.4 // indirect
61+
github.com/aws/aws-sdk-go-v2/service/sns v1.21.4 // indirect
62+
github.com/aws/aws-sdk-go-v2/service/sqs v1.24.4 // indirect
63+
github.com/aws/aws-sdk-go-v2/service/sso v1.20.5 // indirect
64+
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.23.4 // indirect
65+
github.com/aws/smithy-go v1.20.2 // indirect
4166
github.com/cespare/xxhash/v2 v2.2.0 // indirect
4267
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
4368
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect

go.sum

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,65 @@ github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY
3333
github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
3434
github.com/aws/aws-sdk-go v1.44.327 h1:ZS8oO4+7MOBLhkdwIhgtVeDzCeWOlTfKJS7EgggbIEY=
3535
github.com/aws/aws-sdk-go v1.44.327/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI=
36+
github.com/aws/aws-sdk-go-v2 v1.20.3/go.mod h1:/RfNgGmRxI+iFOB1OeJUyxiU+9s88k3pfHvDagGEp0M=
37+
github.com/aws/aws-sdk-go-v2 v1.26.1 h1:5554eUqIYVWpU0YmeeYZ0wU64H2VLBs8TlhRB2L+EkA=
38+
github.com/aws/aws-sdk-go-v2 v1.26.1/go.mod h1:ffIFB97e2yNsv4aTSGkqtHnppsIJzw7G7BReUZ3jCXM=
39+
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.13/go.mod h1:gpAbvyDGQFozTEmlTFO8XcQKHzubdq0LzRyJpG6MiXM=
40+
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.2 h1:x6xsQXGSmW6frevwDA+vi/wqhp1ct18mVXYN08/93to=
41+
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.2/go.mod h1:lPprDr1e6cJdyYeGXnRaJoP4Md+cDBvi2eOj00BlGmg=
42+
github.com/aws/aws-sdk-go-v2/config v1.27.11 h1:f47rANd2LQEYHda2ddSCKYId18/8BhSRM4BULGmfgNA=
43+
github.com/aws/aws-sdk-go-v2/config v1.27.11/go.mod h1:SMsV78RIOYdve1vf36z8LmnszlRWkwMQtomCAI0/mIE=
44+
github.com/aws/aws-sdk-go-v2/credentials v1.17.11 h1:YuIB1dJNf1Re822rriUOTxopaHHvIq0l/pX3fwO+Tzs=
45+
github.com/aws/aws-sdk-go-v2/credentials v1.17.11/go.mod h1:AQtFPsDH9bI2O+71anW6EKL+NcD7LG3dpKGMV4SShgo=
46+
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.1 h1:FVJ0r5XTHSmIHJV6KuDmdYhEpvlHpiSd38RQWhut5J4=
47+
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.1/go.mod h1:zusuAeqezXzAB24LGuzuekqMAEgWkVYukBec3kr3jUg=
48+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.40/go.mod h1:5kKmFhLeOVy6pwPDpDNA6/hK/d6URC98pqDDqHgdBx4=
49+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.5 h1:aw39xVGeRWlWx9EzGVnhOR4yOjQDHPQ6o6NmBlscyQg=
50+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.5/go.mod h1:FSaRudD0dXiMPK2UjknVwwTYyZMRsHv3TtkabsZih5I=
51+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.34/go.mod h1:RZP0scceAyhMIQ9JvFp7HvkpcgqjL4l/4C+7RAeGbuM=
52+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.5 h1:PG1F3OD1szkuQPzDw3CIQsRIrtTlUC3lP84taWzHlq0=
53+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.5/go.mod h1:jU1li6RFryMz+so64PpKtudI+QzbKoIEivqdf6LNpOc=
54+
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 h1:hT8rVHwugYE2lEfdFE0QWVo81lF7jMrYJVDWI+f+VxU=
55+
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0/go.mod h1:8tu/lYfQfFe6IGnaOdrpVgEL2IrrDOf6/m9RQum4NkY=
56+
github.com/aws/aws-sdk-go-v2/internal/v4a v1.1.3/go.mod h1:jYLMm3Dh0wbeV3lxth5ryks/O2M/omVXWyYm3YcEVqQ=
57+
github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.5 h1:81KE7vaZzrl7yHBYHVEzYB8sypz11NMOZ40YlWvPxsU=
58+
github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.5/go.mod h1:LIt2rg7Mcgn09Ygbdh/RdIm0rQ+3BNkbP1gyVMFtRK0=
59+
github.com/aws/aws-sdk-go-v2/service/dynamodb v1.21.4 h1:x3V1JRHq7q9RUbDpaeNpLH7QoipGpCo3fdnMMuSeABU=
60+
github.com/aws/aws-sdk-go-v2/service/dynamodb v1.21.4/go.mod h1:aryF4jxgjhbqpdhj8QybUZI3xYrX8MQIKm4WbOv8Whg=
61+
github.com/aws/aws-sdk-go-v2/service/ec2 v1.93.2 h1:c6a19AjfhEXKlEX63cnlWtSQ4nzENihHZOG0I3wH6BE=
62+
github.com/aws/aws-sdk-go-v2/service/ec2 v1.93.2/go.mod h1:VX22JN3HQXDtQ3uS4h4TtM+K11vydq58tpHTlsm8TL8=
63+
github.com/aws/aws-sdk-go-v2/service/eventbridge v1.20.4 h1:G18wotYZxZ0A5tkqKv6FHCjsF86UQrqNHy5LS+T7JWM=
64+
github.com/aws/aws-sdk-go-v2/service/eventbridge v1.20.4/go.mod h1:XlbY5AGZhlipCdhRorT18/HEThKAxo51hMmhixreJoM=
65+
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.14/go.mod h1:dDilntgHy9WnHXsh7dDtUPgHKEfTJIBUTHM8OWm0f/0=
66+
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.2 h1:Ji0DY1xUsUr3I8cHps0G+XM3WWU16lP6yG8qu1GAZAs=
67+
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.2/go.mod h1:5CsjAbs3NlGQyZNFACh+zztPDI7fU6eW9QsxjfnuBKg=
68+
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.7 h1:ZMeFZ5yk+Ek+jNr1+uwCd2tG89t6oTS5yVWpa6yy2es=
69+
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.7/go.mod h1:mxV05U+4JiHqIpGqqYXOHLPKUC6bDXC44bsUhNjOEwY=
70+
github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.7.34 h1:JlxVMFDHivlhNOIxd2O/9z4O0wC2zIC4lRB71lejVHU=
71+
github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.7.34/go.mod h1:CDPcT6pljRaqz1yLsOgPUvOPOczFvXuJxOKzDzAbF0c=
72+
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.7 h1:ogRAwT1/gxJBcSWDMZlgyFUM962F51A5CRhDLbxLdmo=
73+
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.7/go.mod h1:YCsIZhXfRPLFFCl5xxY+1T9RKzOKjCut+28JSX2DnAk=
74+
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.5 h1:f9RyWNtS8oH7cZlbn+/JNPpjUk5+5fLd5lM9M0i49Ys=
75+
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.5/go.mod h1:h5CoMZV2VF297/VLhRhO1WF+XYWOzXo+4HsObA4HjBQ=
76+
github.com/aws/aws-sdk-go-v2/service/kinesis v1.18.4 h1:UohaQds+Puk9BEbvncXkZduIGYImxohbFpVmSoymXck=
77+
github.com/aws/aws-sdk-go-v2/service/kinesis v1.18.4/go.mod h1:HnjgmL8TNmYtGcrA3N6EeCnDvlX6CteCdUbZ1wV8QWQ=
78+
github.com/aws/aws-sdk-go-v2/service/s3 v1.53.1 h1:6cnno47Me9bRykw9AEv9zkXE+5or7jz8TsskTTccbgc=
79+
github.com/aws/aws-sdk-go-v2/service/s3 v1.53.1/go.mod h1:qmdkIIAC+GCLASF7R2whgNrJADz0QZPX+Seiw/i4S3o=
80+
github.com/aws/aws-sdk-go-v2/service/sfn v1.19.4 h1:yIyFY2kbCOoHvuivf9minqnP2RLYJgmvQRYxakIb2oI=
81+
github.com/aws/aws-sdk-go-v2/service/sfn v1.19.4/go.mod h1:uWCH4ATwNrkRO40j8Dmy7u/Y1/BVWgCM+YjBNYZeOro=
82+
github.com/aws/aws-sdk-go-v2/service/sns v1.21.4 h1:Asj098jPfIZYzAbk4xVFwVBGij5hgMcli0d+5Pe4aZA=
83+
github.com/aws/aws-sdk-go-v2/service/sns v1.21.4/go.mod h1:bbB779DXXOnPXvB7F3dP7AjuV1Eyr7fNyrA058ExuzY=
84+
github.com/aws/aws-sdk-go-v2/service/sqs v1.24.4 h1:bp8KUUx15mnLMe8SSJqO/kYEn0C2kKfWq/M9SRK9i1E=
85+
github.com/aws/aws-sdk-go-v2/service/sqs v1.24.4/go.mod h1:c1AF/ac4k4xz32FprEk6AqqGFH/Fkub9VUPSrASlllA=
86+
github.com/aws/aws-sdk-go-v2/service/sso v1.20.5 h1:vN8hEbpRnL7+Hopy9dzmRle1xmDc7o8tmY0klsr175w=
87+
github.com/aws/aws-sdk-go-v2/service/sso v1.20.5/go.mod h1:qGzynb/msuZIE8I75DVRCUXw3o3ZyBmUvMwQ2t/BrGM=
88+
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.23.4 h1:Jux+gDDyi1Lruk+KHF91tK2KCuY61kzoCpvtvJJBtOE=
89+
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.23.4/go.mod h1:mUYPBhaF2lGiukDEjJX2BLRRKTmoUSitGDUgM4tRxak=
90+
github.com/aws/aws-sdk-go-v2/service/sts v1.28.6 h1:cwIxeBttqPN3qkaAjcEcsh8NYr8n2HZPkcKgPAi1phU=
91+
github.com/aws/aws-sdk-go-v2/service/sts v1.28.6/go.mod h1:FZf1/nKNEkHdGGJP/cI2MoIMquumuRK6ol3QQJNDxmw=
92+
github.com/aws/smithy-go v1.14.2/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA=
93+
github.com/aws/smithy-go v1.20.2 h1:tbp628ireGtzcHDDmLT/6ADHidqnwgF57XOXZe6tp4Q=
94+
github.com/aws/smithy-go v1.20.2/go.mod h1:krry+ya/rV9RDcV/Q16kpu6ypI4K2czasz0NC3qS14E=
3695
github.com/aymerick/raymond v2.0.3-0.20180322193309-b565731e1464+incompatible/go.mod h1:osfaiScAUVup+UC9Nfq76eWqDhXlp+4UYaA8uhTBO6g=
3796
github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs=
3897
github.com/bsm/ginkgo/v2 v2.12.0/go.mod h1:SwYbGRRDovPVboqFv0tPTcG1sN61LM1Z4ARdbAV9g4c=
@@ -99,6 +158,7 @@ github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg
99158
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
100159
github.com/gomodule/redigo v1.7.1-0.20190724094224-574c33c3df38/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4=
101160
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
161+
github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
102162
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
103163
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
104164
github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck=

pkg/instrumentation/aws.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@ package instrumentation
33
import (
44
"fmt"
55

6+
"github.com/aws/aws-sdk-go-v2/aws"
67
awssession "github.com/aws/aws-sdk-go/aws/session"
8+
9+
awstracev2 "gopkg.in/DataDog/dd-trace-go.v1/contrib/aws/aws-sdk-go-v2/aws"
710
awstrace "gopkg.in/DataDog/dd-trace-go.v1/contrib/aws/aws-sdk-go/aws"
811
)
912

@@ -15,6 +18,8 @@ type Settings struct {
1518
}
1619

1720
// InstrumentAWSSession configures DD tracing mode.
21+
//
22+
// Deprecated: Use InstrumentAWSClient instead.
1823
func InstrumentAWSSession(session *awssession.Session, settings Settings) *awssession.Session {
1924
return awstrace.WrapSession(
2025
session,
@@ -23,3 +28,13 @@ func InstrumentAWSSession(session *awssession.Session, settings Settings) *awsse
2328
awstrace.WithAnalyticsRate(settings.AnalyticsRate),
2429
)
2530
}
31+
32+
// InstrumentAWSClient configures DD tracing mode.
33+
func InstrumentAWSClient(cfg *aws.Config, settings Settings) {
34+
awstracev2.AppendMiddleware(
35+
cfg,
36+
awstracev2.WithServiceName(fmt.Sprintf("%s-aws", settings.AppName)),
37+
awstracev2.WithAnalytics(settings.Analytics),
38+
awstracev2.WithAnalyticsRate(settings.AnalyticsRate),
39+
)
40+
}

pkg/instrumentation/aws_test.go

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,14 @@ import (
88
"github.com/aws/aws-sdk-go/aws/credentials"
99
"github.com/aws/aws-sdk-go/aws/session"
1010
"github.com/aws/aws-sdk-go/service/s3"
11+
12+
awsv2 "github.com/aws/aws-sdk-go-v2/aws"
13+
awscfg "github.com/aws/aws-sdk-go-v2/config"
14+
awss3v2 "github.com/aws/aws-sdk-go-v2/service/s3"
15+
1116
"github.com/stretchr/testify/assert"
1217
"github.com/stretchr/testify/require"
18+
1319
"gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext"
1420
"gopkg.in/DataDog/dd-trace-go.v1/ddtrace/mocktracer"
1521
"gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer"
@@ -60,3 +66,64 @@ func TestInstrumentAWSSession(t *testing.T) {
6066
assert.Equal(t, "http://test-bucket-name.s3.us-west-2.amazonaws.com/test/file/name", s.Tag(ext.HTTPURL))
6167
})
6268
}
69+
70+
func TestInstrumentAWSClient(t *testing.T) {
71+
customResolver := awsv2.EndpointResolverWithOptionsFunc(
72+
func(service, region string, opts ...interface{}) (awsv2.Endpoint, error) {
73+
return awsv2.Endpoint{
74+
PartitionID: "aws",
75+
URL: "http://localhost:4566",
76+
SigningRegion: "us-east-2",
77+
}, nil
78+
})
79+
80+
cfg, err := awscfg.LoadDefaultConfig(
81+
context.Background(),
82+
awscfg.WithRegion("us-west-2"),
83+
awscfg.WithEndpointResolverWithOptions(customResolver),
84+
awscfg.WithCredentialsProvider(awsv2.AnonymousCredentials{}),
85+
)
86+
require.NoError(t, err)
87+
88+
InstrumentAWSClient(&cfg, Settings{AppName: "testApp"})
89+
90+
var (
91+
tagComponent = "component"
92+
tagAWSOperation = "aws.operation"
93+
tagAWSRegion = "aws.region"
94+
)
95+
96+
t.Run("s3", func(t *testing.T) {
97+
mt := mocktracer.Start()
98+
defer mt.Stop()
99+
100+
client := awss3v2.NewFromConfig(cfg)
101+
root, ctx := tracer.StartSpanFromContext(context.Background(), "test")
102+
103+
_, err := client.GetObject(ctx, &awss3v2.GetObjectInput{
104+
Bucket: aws.String("test-bucket-name"),
105+
Key: aws.String("//test//file//name"),
106+
})
107+
108+
require.NotNil(t, err)
109+
root.Finish()
110+
111+
spans := mt.FinishedSpans()
112+
assert.Len(t, spans, 2)
113+
assert.Equal(t, spans[1].TraceID(), spans[0].TraceID())
114+
115+
s := spans[0]
116+
assert.Equal(t, "S3.request", s.OperationName())
117+
assert.Contains(t, s.Tag(tagComponent), "aws/aws-sdk-go-v2/aws")
118+
assert.Equal(t, "GetObject", s.Tag(tagAWSOperation))
119+
assert.Equal(t, "us-west-2", s.Tag(tagAWSRegion))
120+
assert.Equal(t, "S3.GetObject", s.Tag(ext.ResourceName))
121+
assert.Equal(t, "testApp-aws", s.Tag(ext.ServiceName))
122+
assert.Equal(t, "GET", s.Tag(ext.HTTPMethod))
123+
assert.Equal(
124+
t,
125+
"http://test-bucket-name.localhost:4566///test//file//name?x-id=GetObject",
126+
s.Tag(ext.HTTPURL),
127+
)
128+
})
129+
}

0 commit comments

Comments
 (0)