1// Copyright 2016 Michal Witkowski. All Rights Reserved. 2// See LICENSE for licensing terms. 3 4// gRPC Prometheus monitoring interceptors for client-side gRPC. 5 6package grpc_prometheus 7 8import ( 9 prom "github.com/prometheus/client_golang/prometheus" 10) 11 12var ( 13 // DefaultClientMetrics is the default instance of ClientMetrics. It is 14 // intended to be used in conjunction the default Prometheus metrics 15 // registry. 16 DefaultClientMetrics = NewClientMetrics() 17 18 // UnaryClientInterceptor is a gRPC client-side interceptor that provides Prometheus monitoring for Unary RPCs. 19 UnaryClientInterceptor = DefaultClientMetrics.UnaryClientInterceptor() 20 21 // StreamClientInterceptor is a gRPC client-side interceptor that provides Prometheus monitoring for Streaming RPCs. 22 StreamClientInterceptor = DefaultClientMetrics.StreamClientInterceptor() 23) 24 25func init() { 26 prom.MustRegister(DefaultClientMetrics.clientStartedCounter) 27 prom.MustRegister(DefaultClientMetrics.clientHandledCounter) 28 prom.MustRegister(DefaultClientMetrics.clientStreamMsgReceived) 29 prom.MustRegister(DefaultClientMetrics.clientStreamMsgSent) 30} 31 32// EnableClientHandlingTimeHistogram turns on recording of handling time of 33// RPCs. Histogram metrics can be very expensive for Prometheus to retain and 34// query. This function acts on the DefaultClientMetrics variable and the 35// default Prometheus metrics registry. 36func EnableClientHandlingTimeHistogram(opts ...HistogramOption) { 37 DefaultClientMetrics.EnableClientHandlingTimeHistogram(opts...) 38 prom.Register(DefaultClientMetrics.clientHandledHistogram) 39} 40