Skip to content

Commit d515e84

Browse files
committed
feat: grpc gateway support openTelemetry
1 parent 0dd2a53 commit d515e84

File tree

4 files changed

+28
-12
lines changed

4 files changed

+28
-12
lines changed

api/grpc_gateway/mux.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ package grpcgateway
33
import (
44
"context"
55
"fmt"
6+
"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"
7+
"go.opentelemetry.io/otel"
68
"log"
79
"net"
810
"net/http"
@@ -57,7 +59,7 @@ func GRPCServerListener(mux cmux.CMux) net.Listener {
5759
}
5860

5961
func DefaultHTTPServer(handler http.Handler) *http.Server {
60-
return HTTPServer(handler, WithLogger, WithResponseWriter)
62+
return HTTPServer(handler, WithLogger, WithResponseWriter, WithOpenTelemetry)
6163
}
6264

6365
func HTTPServer(handler http.Handler, warps ...func(http.Handler) http.Handler) *http.Server {
@@ -73,3 +75,7 @@ func WithLogger(handler http.Handler) http.Handler {
7375
log.Printf("http[%d]-- %s -- %s\n", m.Code, m.Duration, request.URL.Path)
7476
})
7577
}
78+
79+
func WithOpenTelemetry(handler http.Handler) http.Handler {
80+
return otelhttp.NewHandler(handler, "grpc-gateway-server", otelhttp.WithTracerProvider(otel.GetTracerProvider()))
81+
}

api/grpc_server/options.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,12 @@ package grpcserver
33
import (
44
"context"
55
"errors"
6-
6+
"go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc"
77
"google.golang.org/grpc"
88
"google.golang.org/grpc/codes"
99
"google.golang.org/grpc/metadata"
1010
"google.golang.org/grpc/status"
1111

12-
grpc_middleware "github.com/grpc-ecosystem/go-grpc-middleware"
1312
grpc_auth "github.com/grpc-ecosystem/go-grpc-middleware/auth"
1413
grpc_recovery "github.com/grpc-ecosystem/go-grpc-middleware/recovery"
1514
grpc_ctxtags "github.com/grpc-ecosystem/go-grpc-middleware/tags"
@@ -28,16 +27,18 @@ var DefaultCtxTagsOptions = []grpc_ctxtags.Option{
2827
}
2928

3029
var DefaultServerOptions = []grpc.ServerOption{
31-
grpc_middleware.WithStreamServerChain(
30+
grpc.ChainStreamInterceptor(
3231
grpc_recovery.StreamServerInterceptor(DefaultRecoveryOptions...),
3332
grpc_ctxtags.StreamServerInterceptor(DefaultCtxTagsOptions...),
3433
grpc_prometheus.StreamServerInterceptor,
34+
otelgrpc.StreamServerInterceptor(),
3535
grpc_auth.StreamServerInterceptor(GrpcSignCheckFunc),
3636
),
37-
grpc_middleware.WithUnaryServerChain(
37+
grpc.ChainUnaryInterceptor(
3838
grpc_recovery.UnaryServerInterceptor(DefaultRecoveryOptions...),
3939
grpc_ctxtags.UnaryServerInterceptor(DefaultCtxTagsOptions...),
4040
grpc_prometheus.UnaryServerInterceptor,
41+
otelgrpc.UnaryServerInterceptor(),
4142
grpc_auth.UnaryServerInterceptor(GrpcSignCheckFunc),
4243
),
4344
}

go.mod

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,14 @@ require (
1919
github.com/satori/go.uuid v1.2.0
2020
github.com/sethvargo/go-envconfig v0.9.0
2121
github.com/soheilhy/cmux v0.1.5
22-
go.opentelemetry.io/otel v1.15.1
22+
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.42.0
23+
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.42.0
24+
go.opentelemetry.io/otel v1.16.0
2325
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.15.1
2426
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.15.1
2527
go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.15.1
2628
go.opentelemetry.io/otel/sdk v1.15.1
27-
go.opentelemetry.io/otel/trace v1.15.1
29+
go.opentelemetry.io/otel/trace v1.16.0
2830
go.uber.org/zap v1.24.0
2931
google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1
3032
google.golang.org/grpc v1.55.0
@@ -105,6 +107,7 @@ require (
105107
github.com/vbatts/tar-split v0.11.3 // indirect
106108
github.com/vmihailenco/msgpack v4.0.4+incompatible // indirect
107109
go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.15.1 // indirect
110+
go.opentelemetry.io/otel/metric v1.16.0 // indirect
108111
go.opentelemetry.io/proto/otlp v0.19.0 // indirect
109112
go.uber.org/atomic v1.11.0 // indirect
110113
go.uber.org/multierr v1.11.0 // indirect

go.sum

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -474,7 +474,7 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
474474
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
475475
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
476476
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
477-
github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8=
477+
github.com/stretchr/testify v1.8.3 h1:RP3t2pwF7cMEbC1dqtB6poj3niw/9gnV4Cjg5oW5gtY=
478478
github.com/tetratelabs/wazero v1.1.0 h1:EByoAhC+QcYpwSZJSs/aV0uokxPwBgKxfiokSUwAknQ=
479479
github.com/tetratelabs/wazero v1.1.0/go.mod h1:wYx2gNRg8/WihJfSDxA1TIL8H+GkfLYm+bIfbblu9VQ=
480480
github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI=
@@ -496,8 +496,12 @@ go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
496496
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
497497
go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
498498
go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
499-
go.opentelemetry.io/otel v1.15.1 h1:3Iwq3lfRByPaws0f6bU3naAqOR1n5IeDWd9390kWHa8=
500-
go.opentelemetry.io/otel v1.15.1/go.mod h1:mHHGEHVDLal6YrKMmk9LqC4a3sF5g+fHfrttQIB1NTc=
499+
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.42.0 h1:ZOLJc06r4CB42laIXg/7udr0pbZyuAihN10A/XuiQRY=
500+
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.42.0/go.mod h1:5z+/ZWJQKXa9YT34fQNx5K8Hd1EoIhvtUygUQPqEOgQ=
501+
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.42.0 h1:pginetY7+onl4qN1vl0xW/V/v6OBZ0vVdH+esuJgvmM=
502+
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.42.0/go.mod h1:XiYsayHc36K3EByOO6nbAXnAWbrUxdjUROCEeeROOH8=
503+
go.opentelemetry.io/otel v1.16.0 h1:Z7GVAX/UkAXPKsy94IU+i6thsQS4nb7LviLpnaNeW8s=
504+
go.opentelemetry.io/otel v1.16.0/go.mod h1:vl0h9NUa1D5s1nv3A5vZOYWn8av4K8Ml6JDeHrT/bx4=
501505
go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.15.1 h1:XYDQtNzdb2T4uM1pku2m76eSMDJgqhJ+6KzkqgQBALc=
502506
go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.15.1/go.mod h1:uOTV75+LOzV+ODmL8ahRLWkFA3eQcSC2aAsbxIu4duk=
503507
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.15.1 h1:tyoeaUh8REKay72DVYsSEBYV18+fGONe+YYPaOxgLoE=
@@ -506,10 +510,12 @@ go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.15.1 h1:pIfoG
506510
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.15.1/go.mod h1:poNKBqF5+nR/6ke2oGTDjHfksrsHDOHXAl2g4+9ONsY=
507511
go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.15.1 h1:2PunuO5SbkN5MhCbuHCd3tC6qrcaj+uDAkX/qBU5BAs=
508512
go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.15.1/go.mod h1:q8+Tha+5LThjeSU8BW93uUC5w5/+DnYHMKBMpRCsui0=
513+
go.opentelemetry.io/otel/metric v1.16.0 h1:RbrpwVG1Hfv85LgnZ7+txXioPDoh6EdbZHo26Q3hqOo=
514+
go.opentelemetry.io/otel/metric v1.16.0/go.mod h1:QE47cpOmkwipPiefDwo2wDzwJrlfxxNYodqc4xnGCo4=
509515
go.opentelemetry.io/otel/sdk v1.15.1 h1:5FKR+skgpzvhPQHIEfcwMYjCBr14LWzs3uSqKiQzETI=
510516
go.opentelemetry.io/otel/sdk v1.15.1/go.mod h1:8rVtxQfrbmbHKfqzpQkT5EzZMcbMBwTzNAggbEAM0KA=
511-
go.opentelemetry.io/otel/trace v1.15.1 h1:uXLo6iHJEzDfrNC0L0mNjItIp06SyaBQxu5t3xMlngY=
512-
go.opentelemetry.io/otel/trace v1.15.1/go.mod h1:IWdQG/5N1x7f6YUlmdLeJvH9yxtuJAfc4VW5Agv9r/8=
517+
go.opentelemetry.io/otel/trace v1.16.0 h1:8JRpaObFoW0pxuVPapkgH8UhHQj+bJW8jJsCZEu5MQs=
518+
go.opentelemetry.io/otel/trace v1.16.0/go.mod h1:Yt9vYq1SdNz3xdjZZK7wcXv1qv2pwLkqr2QVwea0ef0=
513519
go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=
514520
go.opentelemetry.io/proto/otlp v0.19.0 h1:IVN6GR+mhC4s5yfcTbmzHYODqvWAp3ZedA2SJPI1Nnw=
515521
go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U=

0 commit comments

Comments
 (0)