Skip to content

Commit b6ee1ad

Browse files
authored
Merge pull request containerd#9845 from dcantah/prometheus-middleware-deprecated
Replace go-grpc-prometheus with go-grpc-middleware/providers/prometheus
2 parents b93409c + 6a21c96 commit b6ee1ad

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+1224
-2348
lines changed

cmd/containerd/server/server.go

Lines changed: 31 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,9 @@ import (
3737
"github.com/containerd/log"
3838
"github.com/containerd/ttrpc"
3939
"github.com/docker/go-metrics"
40-
grpc_middleware "github.com/grpc-ecosystem/go-grpc-middleware"
41-
grpc_prometheus "github.com/grpc-ecosystem/go-grpc-prometheus"
40+
grpc_prometheus "github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus"
4241
v1 "github.com/opencontainers/image-spec/specs-go/v1"
42+
"github.com/prometheus/client_golang/prometheus"
4343
"go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc"
4444
"google.golang.org/grpc"
4545
"google.golang.org/grpc/backoff"
@@ -144,16 +144,25 @@ func New(ctx context.Context, config *srvconfig.Config) (*Server, error) {
144144
diff.RegisterProcessor(diff.BinaryHandler(id, p.Returns, p.Accepts, p.Path, p.Args, p.Env))
145145
}
146146

147+
var prometheusServerMetricsOpts []grpc_prometheus.ServerMetricsOption
148+
if config.Metrics.GRPCHistogram {
149+
// Enable grpc time histograms to measure rpc latencies
150+
prometheusServerMetricsOpts = append(prometheusServerMetricsOpts, grpc_prometheus.WithServerHandlingTimeHistogram())
151+
}
152+
153+
prometheusServerMetrics := grpc_prometheus.NewServerMetrics(prometheusServerMetricsOpts...)
154+
prometheus.MustRegister(prometheusServerMetrics)
155+
147156
serverOpts := []grpc.ServerOption{
148157
grpc.StatsHandler(otelgrpc.NewServerHandler()),
149-
grpc.StreamInterceptor(grpc_middleware.ChainStreamServer(
150-
grpc_prometheus.StreamServerInterceptor,
158+
grpc.ChainStreamInterceptor(
151159
streamNamespaceInterceptor,
152-
)),
153-
grpc.UnaryInterceptor(grpc_middleware.ChainUnaryServer(
154-
grpc_prometheus.UnaryServerInterceptor,
160+
prometheusServerMetrics.StreamServerInterceptor(),
161+
),
162+
grpc.ChainUnaryInterceptor(
155163
unaryNamespaceInterceptor,
156-
)),
164+
prometheusServerMetrics.UnaryServerInterceptor(),
165+
),
157166
}
158167
if config.GRPC.MaxRecvMsgSize > 0 {
159168
serverOpts = append(serverOpts, grpc.MaxRecvMsgSize(config.GRPC.MaxRecvMsgSize))
@@ -213,10 +222,11 @@ func New(ctx context.Context, config *srvconfig.Config) (*Server, error) {
213222
ttrpcServices []ttrpcService
214223

215224
s = &Server{
216-
grpcServer: grpcServer,
217-
tcpServer: tcpServer,
218-
ttrpcServer: ttrpcServer,
219-
config: config,
225+
prometheusServerMetrics: prometheusServerMetrics,
226+
grpcServer: grpcServer,
227+
tcpServer: tcpServer,
228+
ttrpcServer: ttrpcServer,
229+
config: config,
220230
}
221231
initialized = plugin.NewPluginSet()
222232
required = make(map[string]struct{})
@@ -364,24 +374,18 @@ func recordConfigDeprecations(ctx context.Context, config *srvconfig.Config, set
364374

365375
// Server is the containerd main daemon
366376
type Server struct {
367-
grpcServer *grpc.Server
368-
ttrpcServer *ttrpc.Server
369-
tcpServer *grpc.Server
370-
config *srvconfig.Config
371-
plugins []*plugin.Plugin
372-
ready sync.WaitGroup
377+
prometheusServerMetrics *grpc_prometheus.ServerMetrics
378+
grpcServer *grpc.Server
379+
ttrpcServer *ttrpc.Server
380+
tcpServer *grpc.Server
381+
config *srvconfig.Config
382+
plugins []*plugin.Plugin
383+
ready sync.WaitGroup
373384
}
374385

375386
// ServeGRPC provides the containerd grpc APIs on the provided listener
376387
func (s *Server) ServeGRPC(l net.Listener) error {
377-
if s.config.Metrics.GRPCHistogram {
378-
// enable grpc time histograms to measure rpc latencies
379-
grpc_prometheus.EnableHandlingTimeHistogram()
380-
}
381-
// before we start serving the grpc API register the grpc_prometheus metrics
382-
// handler. This needs to be the last service registered so that it can collect
383-
// metrics for every other service
384-
grpc_prometheus.Register(s.grpcServer)
388+
s.prometheusServerMetrics.InitializeMetrics(s.grpcServer)
385389
return trapClosedConnErr(s.grpcServer.Serve(l))
386390
}
387391

@@ -403,7 +407,7 @@ func (s *Server) ServeMetrics(l net.Listener) error {
403407

404408
// ServeTCP allows services to serve over tcp
405409
func (s *Server) ServeTCP(l net.Listener) error {
406-
grpc_prometheus.Register(s.tcpServer)
410+
s.prometheusServerMetrics.InitializeMetrics(s.tcpServer)
407411
return trapClosedConnErr(s.tcpServer.Serve(l))
408412
}
409413

go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,7 @@ require (
3333
github.com/fsnotify/fsnotify v1.7.0
3434
github.com/google/go-cmp v0.6.0
3535
github.com/google/uuid v1.6.0
36-
github.com/grpc-ecosystem/go-grpc-middleware v1.4.0
37-
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0
36+
github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.0
3837
github.com/intel/goresctrl v0.6.0
3938
github.com/klauspost/compress v1.17.6
4039
github.com/minio/sha256-simd v1.0.1
@@ -98,6 +97,7 @@ require (
9897
github.com/golang/protobuf v1.5.3 // indirect
9998
github.com/google/gofuzz v1.2.0 // indirect
10099
github.com/gorilla/websocket v1.5.0 // indirect
100+
github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.0.0-rc.3 // indirect
101101
github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.0 // indirect
102102
github.com/hashicorp/errwrap v1.1.0 // indirect
103103
github.com/json-iterator/go v1.1.12 // indirect

0 commit comments

Comments
 (0)