From 074d3bd2bd001949587c444ea4a45462d5abc552 Mon Sep 17 00:00:00 2001 From: taddari Date: Tue, 25 Aug 2020 17:36:29 +0100 Subject: [PATCH 1/5] Add redis opencensus metrics to the server. --- go.mod | 4 ++-- go.sum | 4 ++++ pkg/ratelimit/config.go | 7 +++---- pkg/ratelimit/limitware/middleware.go | 5 +++++ 4 files changed, 14 insertions(+), 6 deletions(-) diff --git a/go.mod b/go.mod index 04e14aef8..5334c9742 100644 --- a/go.mod +++ b/go.mod @@ -19,7 +19,7 @@ require ( github.com/containerd/continuity v0.0.0-20200710164510-efbc4488d8fe // indirect github.com/denisenkom/go-mssqldb v0.0.0-20200620013148-b91950f658ec // indirect github.com/dgrijalva/jwt-go v3.2.0+incompatible - github.com/gomodule/redigo v1.8.2 + github.com/opencensus-integrations/redigo v2.0.1+incompatible github.com/google/exposure-notifications-server v0.5.0 github.com/google/go-cmp v0.5.1 github.com/google/uuid v1.1.1 // indirect @@ -44,7 +44,7 @@ require ( github.com/prometheus/statsd_exporter v0.17.0 // indirect github.com/sethvargo/go-envconfig v0.3.1 github.com/sethvargo/go-limiter v0.4.0 - github.com/sethvargo/go-redisstore v0.1.0 + github.com/sethvargo/go-redisstore v0.1.1-opencensus github.com/sethvargo/go-retry v0.1.0 github.com/sethvargo/go-signalcontext v0.1.0 github.com/stretchr/objx v0.3.0 // indirect diff --git a/go.sum b/go.sum index 31ad7e6ba..89037e8c9 100644 --- a/go.sum +++ b/go.sum @@ -1071,6 +1071,8 @@ github.com/onsi/gomega v1.9.0/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoT github.com/onsi/gomega v1.10.1 h1:o0+MgICZLuZ7xjH7Vx6zS/zcu93/BEp1VwkIW1mEXCE= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= +github.com/opencensus-integrations/redigo v2.0.1+incompatible h1:1EbXlxudNBcuUYZk5EMvSswbu8jwZbxLO241AThg8xk= +github.com/opencensus-integrations/redigo v2.0.1+incompatible/go.mod h1:iH5qq3BZppLeyPZP0Hy2qffpbcppAl58otmaERGeJaQ= github.com/opencontainers/go-digest v1.0.0-rc1 h1:WzifXhOVOEOuFYOJAW6aQqW0TooG2iki3E3Ii+WN7gQ= github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= @@ -1219,6 +1221,8 @@ github.com/sethvargo/go-limiter v0.4.0 h1:YrMxUpjFx3osTFT+8Yg7L7IVQJbUzHUorbEDkU github.com/sethvargo/go-limiter v0.4.0/go.mod h1:C0kbSFbiriE5k2FFOe18M1YZbAR2Fiwf72uGu0CXCcU= github.com/sethvargo/go-redisstore v0.1.0 h1:N5771Hwi6H2sPvxT/aBqF7wa3U32T0mRY985zCz+IUo= github.com/sethvargo/go-redisstore v0.1.0/go.mod h1:PQJ9OHIjpYQ/atam4JS0rFdd/8CjdBbW6F+mVhiLxXg= +github.com/sethvargo/go-redisstore v0.1.1-opencensus h1:MlYmIQpUIxcAD9SmOfrG0AwT4cZSZBXG1mXgwas4bUE= +github.com/sethvargo/go-redisstore v0.1.1-opencensus/go.mod h1:jHUXCIJOsmsGy4/xRg8DnZ5+0437NZ3X9bhYP8B/jGM= github.com/sethvargo/go-retry v0.1.0 h1:8sPqlWannzcReEcYjHSNw9becsiYudcwTD7CasGjQaI= github.com/sethvargo/go-retry v0.1.0/go.mod h1:JzIOdZqQDNpPkQDmcqgtteAcxFLtYpNF/zJCM1ysDg8= github.com/sethvargo/go-signalcontext v0.1.0 h1:3IU7HOlmRXF0PSDf85C4nJ/zjYDjF+DS+LufcKfLvyk= diff --git a/pkg/ratelimit/config.go b/pkg/ratelimit/config.go index ea1435313..9c760196b 100644 --- a/pkg/ratelimit/config.go +++ b/pkg/ratelimit/config.go @@ -20,7 +20,7 @@ import ( "fmt" "time" - "github.com/gomodule/redigo/redis" + "github.com/opencensus-integrations/redigo/redis" "github.com/sethvargo/go-limiter" "github.com/sethvargo/go-limiter/memorystore" "github.com/sethvargo/go-limiter/noopstore" @@ -71,9 +71,8 @@ func RateLimiterFor(ctx context.Context, c *Config) (limiter.Store, error) { } return redisstore.NewWithPool(config, &redis.Pool{ - DialContext: func(ctx context.Context) (redis.Conn, error) { - return redis.DialContext(ctx, "tcp", addr, - redis.DialUsername(c.RedisUsername), + Dial: func() (redis.Conn, error) { + return redis.Dial("tcp", addr, redis.DialPassword(c.RedisPassword), ) }, diff --git a/pkg/ratelimit/limitware/middleware.go b/pkg/ratelimit/limitware/middleware.go index a275a0baa..70bda1736 100644 --- a/pkg/ratelimit/limitware/middleware.go +++ b/pkg/ratelimit/limitware/middleware.go @@ -14,6 +14,7 @@ import ( "github.com/google/exposure-notifications-verification-server/pkg/controller" "github.com/google/exposure-notifications-verification-server/pkg/database" "github.com/google/exposure-notifications-verification-server/pkg/observability" + "github.com/opencensus-integrations/redigo/redis" "github.com/google/exposure-notifications-server/pkg/logging" @@ -110,6 +111,10 @@ func NewMiddleware(ctx context.Context, s limiter.Store, f httplimit.KeyFunc, op return nil, fmt.Errorf("stat view registration failure: %w", err) } + if err := view.Register(redis.ObservabilityMetricViews...); err != nil { + return nil, fmt.Errorf("redis view registration failure: %w", err) + } + m := &Middleware{ store: s, keyFunc: f, From 1d545e6cd905686b7b531d4c730167ef90383d3b Mon Sep 17 00:00:00 2001 From: taddari Date: Tue, 25 Aug 2020 17:50:01 +0100 Subject: [PATCH 2/5] Add redigo back --- go.mod | 1 + 1 file changed, 1 insertion(+) diff --git a/go.mod b/go.mod index 5334c9742..15528ecec 100644 --- a/go.mod +++ b/go.mod @@ -20,6 +20,7 @@ require ( github.com/denisenkom/go-mssqldb v0.0.0-20200620013148-b91950f658ec // indirect github.com/dgrijalva/jwt-go v3.2.0+incompatible github.com/opencensus-integrations/redigo v2.0.1+incompatible + github.com/gomodule/redigo v1.8.2 github.com/google/exposure-notifications-server v0.5.0 github.com/google/go-cmp v0.5.1 github.com/google/uuid v1.1.1 // indirect From 44659a1b962e3152b5898201ac9dec9929133ac6 Mon Sep 17 00:00:00 2001 From: taddari Date: Tue, 25 Aug 2020 20:48:31 +0100 Subject: [PATCH 3/5] Ran go mod tidy and use DialWithContext --- go.mod | 2 +- go.sum | 3 --- pkg/ratelimit/config.go | 2 +- 3 files changed, 2 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 15528ecec..33cde1a82 100644 --- a/go.mod +++ b/go.mod @@ -19,7 +19,6 @@ require ( github.com/containerd/continuity v0.0.0-20200710164510-efbc4488d8fe // indirect github.com/denisenkom/go-mssqldb v0.0.0-20200620013148-b91950f658ec // indirect github.com/dgrijalva/jwt-go v3.2.0+incompatible - github.com/opencensus-integrations/redigo v2.0.1+incompatible github.com/gomodule/redigo v1.8.2 github.com/google/exposure-notifications-server v0.5.0 github.com/google/go-cmp v0.5.1 @@ -39,6 +38,7 @@ require ( github.com/mikehelmick/go-chaff v0.3.0 github.com/mitchellh/mapstructure v1.3.3 // indirect github.com/onsi/ginkgo v1.13.0 // indirect + github.com/opencensus-integrations/redigo v2.0.1+incompatible github.com/opencontainers/go-digest v1.0.0 // indirect github.com/ory/dockertest v3.3.5+incompatible github.com/prometheus/common v0.12.0 // indirect diff --git a/go.sum b/go.sum index 89037e8c9..bb0d10e96 100644 --- a/go.sum +++ b/go.sum @@ -1216,11 +1216,8 @@ github.com/sethvargo/go-envconfig v0.3.1 h1:OUnL02SWTz+t8XtxTO6YQuLMi3StljJHzmtP github.com/sethvargo/go-envconfig v0.3.1/go.mod h1:XZ2JRR7vhlBEO5zMmOpLgUhgYltqYqq4d4tKagtPUv0= github.com/sethvargo/go-gcpkms v0.1.0 h1:pyjDLqLwpk9pMjDSTilPpaUjgP1AfSjX9WGzitZwGUY= github.com/sethvargo/go-gcpkms v0.1.0/go.mod h1:33BuvqUjsYk0bpMgn+WCclCYtMLOyaqtn5j0fCo4vvk= -github.com/sethvargo/go-limiter v0.3.2-0.20200818185929-f9ab9053588b/go.mod h1:C0kbSFbiriE5k2FFOe18M1YZbAR2Fiwf72uGu0CXCcU= github.com/sethvargo/go-limiter v0.4.0 h1:YrMxUpjFx3osTFT+8Yg7L7IVQJbUzHUorbEDkUO+JHE= github.com/sethvargo/go-limiter v0.4.0/go.mod h1:C0kbSFbiriE5k2FFOe18M1YZbAR2Fiwf72uGu0CXCcU= -github.com/sethvargo/go-redisstore v0.1.0 h1:N5771Hwi6H2sPvxT/aBqF7wa3U32T0mRY985zCz+IUo= -github.com/sethvargo/go-redisstore v0.1.0/go.mod h1:PQJ9OHIjpYQ/atam4JS0rFdd/8CjdBbW6F+mVhiLxXg= github.com/sethvargo/go-redisstore v0.1.1-opencensus h1:MlYmIQpUIxcAD9SmOfrG0AwT4cZSZBXG1mXgwas4bUE= github.com/sethvargo/go-redisstore v0.1.1-opencensus/go.mod h1:jHUXCIJOsmsGy4/xRg8DnZ5+0437NZ3X9bhYP8B/jGM= github.com/sethvargo/go-retry v0.1.0 h1:8sPqlWannzcReEcYjHSNw9becsiYudcwTD7CasGjQaI= diff --git a/pkg/ratelimit/config.go b/pkg/ratelimit/config.go index 9c760196b..4ada22d55 100644 --- a/pkg/ratelimit/config.go +++ b/pkg/ratelimit/config.go @@ -72,7 +72,7 @@ func RateLimiterFor(ctx context.Context, c *Config) (limiter.Store, error) { return redisstore.NewWithPool(config, &redis.Pool{ Dial: func() (redis.Conn, error) { - return redis.Dial("tcp", addr, + return redis.DialWithContext(ctx, "tcp", addr, redis.DialPassword(c.RedisPassword), ) }, From 5733f2cebaa0612248e2bc43cb219c4d40edec2c Mon Sep 17 00:00:00 2001 From: taddari Date: Tue, 25 Aug 2020 20:56:56 +0100 Subject: [PATCH 4/5] Configure default trace options --- pkg/ratelimit/config.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pkg/ratelimit/config.go b/pkg/ratelimit/config.go index 4ada22d55..771a012c6 100644 --- a/pkg/ratelimit/config.go +++ b/pkg/ratelimit/config.go @@ -25,6 +25,7 @@ import ( "github.com/sethvargo/go-limiter/memorystore" "github.com/sethvargo/go-limiter/noopstore" "github.com/sethvargo/go-redisstore" + "go.opencensus.io/trace" ) // RateLimitType represents a type of rate limiter. @@ -72,8 +73,13 @@ func RateLimiterFor(ctx context.Context, c *Config) (limiter.Store, error) { return redisstore.NewWithPool(config, &redis.Pool{ Dial: func() (redis.Conn, error) { + options := redis.TraceOptions{} + // set default attributes + redis.WithDefaultAttributes(trace.StringAttribute("span.type", "DB"))(&options) + return redis.DialWithContext(ctx, "tcp", addr, redis.DialPassword(c.RedisPassword), + redis.DialTraceOptions(options), ) }, TestOnBorrow: func(conn redis.Conn, _ time.Time) error { From 5e7644df8095c16c23aff1aaca1a609c8204e916 Mon Sep 17 00:00:00 2001 From: taddari Date: Tue, 25 Aug 2020 21:22:27 +0100 Subject: [PATCH 5/5] Optimize imports --- pkg/ratelimit/limitware/middleware.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/ratelimit/limitware/middleware.go b/pkg/ratelimit/limitware/middleware.go index 70bda1736..6c2d6205f 100644 --- a/pkg/ratelimit/limitware/middleware.go +++ b/pkg/ratelimit/limitware/middleware.go @@ -14,10 +14,10 @@ import ( "github.com/google/exposure-notifications-verification-server/pkg/controller" "github.com/google/exposure-notifications-verification-server/pkg/database" "github.com/google/exposure-notifications-verification-server/pkg/observability" - "github.com/opencensus-integrations/redigo/redis" "github.com/google/exposure-notifications-server/pkg/logging" + "github.com/opencensus-integrations/redigo/redis" "github.com/sethvargo/go-limiter" "github.com/sethvargo/go-limiter/httplimit" "go.opencensus.io/stats"