...

Source file src/github.com/grpc-ecosystem/go-grpc-prometheus/server.go

Documentation: github.com/grpc-ecosystem/go-grpc-prometheus

     1  // Copyright 2016 Michal Witkowski. All Rights Reserved.
     2  // See LICENSE for licensing terms.
     3  
     4  // gRPC Prometheus monitoring interceptors for server-side gRPC.
     5  
     6  package grpc_prometheus
     7  
     8  import (
     9  	prom "github.com/prometheus/client_golang/prometheus"
    10  	"google.golang.org/grpc"
    11  )
    12  
    13  var (
    14  	// DefaultServerMetrics is the default instance of ServerMetrics. It is
    15  	// intended to be used in conjunction the default Prometheus metrics
    16  	// registry.
    17  	DefaultServerMetrics = NewServerMetrics()
    18  
    19  	// UnaryServerInterceptor is a gRPC server-side interceptor that provides Prometheus monitoring for Unary RPCs.
    20  	UnaryServerInterceptor = DefaultServerMetrics.UnaryServerInterceptor()
    21  
    22  	// StreamServerInterceptor is a gRPC server-side interceptor that provides Prometheus monitoring for Streaming RPCs.
    23  	StreamServerInterceptor = DefaultServerMetrics.StreamServerInterceptor()
    24  )
    25  
    26  func init() {
    27  	prom.MustRegister(DefaultServerMetrics.serverStartedCounter)
    28  	prom.MustRegister(DefaultServerMetrics.serverHandledCounter)
    29  	prom.MustRegister(DefaultServerMetrics.serverStreamMsgReceived)
    30  	prom.MustRegister(DefaultServerMetrics.serverStreamMsgSent)
    31  }
    32  
    33  // Register takes a gRPC server and pre-initializes all counters to 0. This
    34  // allows for easier monitoring in Prometheus (no missing metrics), and should
    35  // be called *after* all services have been registered with the server. This
    36  // function acts on the DefaultServerMetrics variable.
    37  func Register(server *grpc.Server) {
    38  	DefaultServerMetrics.InitializeMetrics(server)
    39  }
    40  
    41  // EnableHandlingTimeHistogram turns on recording of handling time
    42  // of RPCs. Histogram metrics can be very expensive for Prometheus
    43  // to retain and query. This function acts on the DefaultServerMetrics
    44  // variable and the default Prometheus metrics registry.
    45  func EnableHandlingTimeHistogram(opts ...HistogramOption) {
    46  	DefaultServerMetrics.EnableHandlingTimeHistogram(opts...)
    47  	prom.Register(DefaultServerMetrics.serverHandledHistogram)
    48  }
    49  

View as plain text