Skip to content

Commit 7253c9b

Browse files
committed
Add telemetry for redis and gorm
1 parent 6dbb9e8 commit 7253c9b

3 files changed

Lines changed: 36 additions & 8 deletions

File tree

api/go.mod

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ require (
2828
github.com/nyaruka/phonenumbers v1.1.7
2929
github.com/palantir/stacktrace v0.0.0-20161112013806-78658fd2d177
3030
github.com/pkg/errors v0.9.1
31+
github.com/redis/go-redis/extra/redisotel/v9 v9.0.5
3132
github.com/redis/go-redis/v9 v9.0.5
3233
github.com/rs/zerolog v1.30.0
3334
github.com/sendgrid/sendgrid-go v3.12.0+incompatible
@@ -45,6 +46,7 @@ require (
4546
gorm.io/datatypes v1.2.0
4647
gorm.io/driver/postgres v1.5.2
4748
gorm.io/gorm v1.25.2
49+
gorm.io/plugin/opentelemetry v0.1.3
4850
)
4951

5052
require (
@@ -106,6 +108,7 @@ require (
106108
github.com/modern-go/reflect2 v1.0.2 // indirect
107109
github.com/olekukonko/tablewriter v0.0.5 // indirect
108110
github.com/pmezard/go-difflib v1.0.0 // indirect
111+
github.com/redis/go-redis/extra/rediscmd/v9 v9.0.5 // indirect
109112
github.com/rivo/uniseg v0.4.4 // indirect
110113
github.com/russross/blackfriday/v2 v2.1.0 // indirect
111114
github.com/sendgrid/rest v2.6.9+incompatible // indirect

api/go.sum

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,9 @@ github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kd
6565
github.com/aokoli/goutils v1.0.1/go.mod h1:SijmP0QR8LtwsmDs8Yii5Z/S4trXFGFC2oO5g9DP+DQ=
6666
github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8=
6767
github.com/bsm/ginkgo/v2 v2.7.0 h1:ItPMPH90RbmZJt5GtkcNvIRuGEdwlBItdNVoyzaNQao=
68+
github.com/bsm/ginkgo/v2 v2.7.0/go.mod h1:AiKlXPm7ItEHNc/2+OkrNG4E0ITzojb9/xWzvQ9XZ9w=
6869
github.com/bsm/gomega v1.26.0 h1:LhQm+AFcgV2M0WyKroMASzAzCAJVpAxQXv4SaI9a69Y=
70+
github.com/bsm/gomega v1.26.0/go.mod h1:JyEr/xRbxbtgWNi8tIEVPUYZ5Dzef52k01W3YH0H+O0=
6971
github.com/carlmjohnson/requests v0.23.4 h1:AxcvapfB9RPXLSyvAHk9YJoodQ43ZjzNHj6Ft3tQGdg=
7072
github.com/carlmjohnson/requests v0.23.4/go.mod h1:Qzp6tW4DQyainPP+tGwiJTzwxvElTIKm0B191TgTtOA=
7173
github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
@@ -283,13 +285,17 @@ github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE
283285
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
284286
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
285287
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
288+
github.com/redis/go-redis/extra/rediscmd/v9 v9.0.5 h1:EaDatTxkdHG+U3Bk4EUr+DZ7fOGwTfezUiUJMaIcaho=
289+
github.com/redis/go-redis/extra/rediscmd/v9 v9.0.5/go.mod h1:fyalQWdtzDBECAQFBJuQe5bzQ02jGd5Qcbgb97Flm7U=
290+
github.com/redis/go-redis/extra/redisotel/v9 v9.0.5 h1:EfpWLLCyXw8PSM2/XNJLjI3Pb27yVE+gIAfeqp8LUCc=
291+
github.com/redis/go-redis/extra/redisotel/v9 v9.0.5/go.mod h1:WZjPDy7VNzn77AAfnAfVjZNvfJTYfPetfZk5yoSTLaQ=
286292
github.com/redis/go-redis/v9 v9.0.5 h1:CuQcn5HIEeK7BgElubPP8CGtE0KakrnbBSTLjathl5o=
287293
github.com/redis/go-redis/v9 v9.0.5/go.mod h1:WqMKv5vnQbRuZstUwxQI195wHy+t4PuXDOjzMvcuQHk=
288294
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
289295
github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis=
290296
github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
291297
github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
292-
github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8=
298+
github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
293299
github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
294300
github.com/rs/zerolog v1.30.0 h1:SymVODrcRsaRaSInD9yQtKbtWqwsfoPcRff/oRXLj4c=
295301
github.com/rs/zerolog v1.30.0/go.mod h1:/tk+P47gFdPXq4QYjvCmT5/Gsug2nagsFWBWhAiSi1w=
@@ -563,11 +569,13 @@ gorm.io/driver/mysql v1.5.1 h1:WUEH5VF9obL/lTtzjmML/5e6VfFR/788coz2uaVCAZw=
563569
gorm.io/driver/mysql v1.5.1/go.mod h1:Jo3Xu7mMhCyj8dlrb3WoCaRd1FhsVh+yMXb1jUInf5o=
564570
gorm.io/driver/postgres v1.5.2 h1:ytTDxxEv+MplXOfFe3Lzm7SjG09fcdb3Z/c056DTBx0=
565571
gorm.io/driver/postgres v1.5.2/go.mod h1:fmpX0m2I1PKuR7mKZiEluwrP3hbs+ps7JIGMUBpCgl8=
566-
gorm.io/driver/sqlite v1.4.3 h1:HBBcZSDnWi5BW3B3rwvVTc510KGkBkexlOg0QrmLUuU=
572+
gorm.io/driver/sqlite v1.5.0 h1:zKYbzRCpBrT1bNijRnxLDJWPjVfImGEn0lSnUY5gZ+c=
567573
gorm.io/driver/sqlserver v1.4.1 h1:t4r4r6Jam5E6ejqP7N82qAJIJAht27EGT41HyPfXRw0=
568574
gorm.io/gorm v1.25.1/go.mod h1:L4uxeKpfBml98NYqVqwAdmV1a2nBtAec/cf3fpucW/k=
569575
gorm.io/gorm v1.25.2 h1:gs1o6Vsa+oVKG/a9ElL3XgyGfghFfkKA2SInQaCyMho=
570576
gorm.io/gorm v1.25.2/go.mod h1:L4uxeKpfBml98NYqVqwAdmV1a2nBtAec/cf3fpucW/k=
577+
gorm.io/plugin/opentelemetry v0.1.3 h1:z6QgEBef/+4S6D00+jUeRPreI0LAf7Idfqe3dz3TWKg=
578+
gorm.io/plugin/opentelemetry v0.1.3/go.mod h1:tndJHOdvPT0pyGhOb8E2209eXJCUxhC5UpKw7bGVWeI=
571579
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
572580
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
573581
sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=

api/pkg/di/container.go

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,20 +9,21 @@ import (
99
"strconv"
1010
"time"
1111

12+
"gorm.io/plugin/opentelemetry/tracing"
13+
1214
"github.com/NdoleStudio/httpsms/pkg/discord"
1315

1416
mexporter "github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric"
1517
cloudtrace "github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace"
16-
"go.opentelemetry.io/otel/sdk/metric"
17-
1818
"github.com/NdoleStudio/httpsms/pkg/cache"
19+
lemonsqueezy "github.com/NdoleStudio/lemonsqueezy-go"
20+
"github.com/hashicorp/go-retryablehttp"
21+
"github.com/redis/go-redis/extra/redisotel/v9"
1922
"github.com/redis/go-redis/v9"
23+
"go.opentelemetry.io/otel/sdk/metric"
2024

2125
"github.com/NdoleStudio/go-otelroundtripper"
2226

23-
lemonsqueezy "github.com/NdoleStudio/lemonsqueezy-go"
24-
"github.com/hashicorp/go-retryablehttp"
25-
2627
"github.com/jinzhu/now"
2728

2829
"github.com/uptrace/uptrace-go/uptrace"
@@ -199,6 +200,10 @@ func (container *Container) DB() (db *gorm.DB) {
199200
}
200201
container.db = db
201202

203+
if err = db.Use(tracing.NewPlugin()); err != nil {
204+
container.logger.Fatal(stacktrace.Propagate(err, "cannot use GORM tracing plugin"))
205+
}
206+
202207
container.logger.Debug(fmt.Sprintf("Running migrations for %T", db))
203208

204209
if err = db.AutoMigrate(&entities.Message{}); err != nil {
@@ -274,7 +279,19 @@ func (container *Container) Cache() cache.Cache {
274279
MinVersion: tls.VersionTLS12,
275280
}
276281

277-
return cache.NewRedisCache(container.Tracer(), redis.NewClient(opt))
282+
redisClient := redis.NewClient(opt)
283+
284+
// Enable tracing instrumentation.
285+
if err = redisotel.InstrumentTracing(redisClient); err != nil {
286+
container.logger.Error(stacktrace.Propagate(err, "cannot instrument redis tracing"))
287+
}
288+
289+
// Enable metrics instrumentation.
290+
if err = redisotel.InstrumentMetrics(redisClient); err != nil {
291+
container.logger.Fatal(stacktrace.Propagate(err, "cannot instrument redis metrics"))
292+
}
293+
294+
return cache.NewRedisCache(container.Tracer(), redisClient)
278295
}
279296

280297
// FirebaseAuthClient creates a new instance of auth.Client

0 commit comments

Comments
 (0)