| // Copyright 2016 Michal Witkowski. All Rights Reserved. |
| // See LICENSE for licensing terms. |
| |
| // gRPC Prometheus monitoring interceptors for server-side gRPC. |
| |
| package grpc_prometheus |
| |
| import ( |
| prom "github.com/prometheus/client_golang/prometheus" |
| "google.golang.org/grpc" |
| ) |
| |
| var ( |
| // DefaultServerMetrics is the default instance of ServerMetrics. It is |
| // intended to be used in conjunction the default Prometheus metrics |
| // registry. |
| DefaultServerMetrics = NewServerMetrics() |
| |
| // UnaryServerInterceptor is a gRPC server-side interceptor that provides Prometheus monitoring for Unary RPCs. |
| UnaryServerInterceptor = DefaultServerMetrics.UnaryServerInterceptor() |
| |
| // StreamServerInterceptor is a gRPC server-side interceptor that provides Prometheus monitoring for Streaming RPCs. |
| StreamServerInterceptor = DefaultServerMetrics.StreamServerInterceptor() |
| ) |
| |
| func init() { |
| prom.MustRegister(DefaultServerMetrics.serverStartedCounter) |
| prom.MustRegister(DefaultServerMetrics.serverHandledCounter) |
| prom.MustRegister(DefaultServerMetrics.serverStreamMsgReceived) |
| prom.MustRegister(DefaultServerMetrics.serverStreamMsgSent) |
| } |
| |
| // Register takes a gRPC server and pre-initializes all counters to 0. This |
| // allows for easier monitoring in Prometheus (no missing metrics), and should |
| // be called *after* all services have been registered with the server. This |
| // function acts on the DefaultServerMetrics variable. |
| func Register(server *grpc.Server) { |
| DefaultServerMetrics.InitializeMetrics(server) |
| } |
| |
| // EnableHandlingTimeHistogram turns on recording of handling time |
| // of RPCs. Histogram metrics can be very expensive for Prometheus |
| // to retain and query. This function acts on the DefaultServerMetrics |
| // variable and the default Prometheus metrics registry. |
| func EnableHandlingTimeHistogram(opts ...HistogramOption) { |
| DefaultServerMetrics.EnableHandlingTimeHistogram(opts...) |
| prom.Register(DefaultServerMetrics.serverHandledHistogram) |
| } |