v3rpc: replace grpc metrics w/ go-grpc-prometheus
And disable histogram
This commit is contained in:
@ -25,6 +25,7 @@ import (
|
|||||||
"github.com/coreos/etcd/pkg/types"
|
"github.com/coreos/etcd/pkg/types"
|
||||||
"github.com/coreos/etcd/raft"
|
"github.com/coreos/etcd/raft"
|
||||||
|
|
||||||
|
prometheus "github.com/grpc-ecosystem/go-grpc-prometheus"
|
||||||
"golang.org/x/net/context"
|
"golang.org/x/net/context"
|
||||||
"google.golang.org/grpc"
|
"google.golang.org/grpc"
|
||||||
"google.golang.org/grpc/metadata"
|
"google.golang.org/grpc/metadata"
|
||||||
@ -53,7 +54,8 @@ func newUnaryInterceptor(s *etcdserver.EtcdServer) grpc.UnaryServerInterceptor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return metricsUnaryInterceptor(ctx, req, info, handler)
|
|
||||||
|
return prometheus.UnaryServerInterceptor(ctx, req, info, handler)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -88,38 +90,11 @@ func newStreamInterceptor(s *etcdserver.EtcdServer) grpc.StreamServerInterceptor
|
|||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return metricsStreamInterceptor(srv, ss, info, handler)
|
|
||||||
|
return prometheus.StreamServerInterceptor(srv, ss, info, handler)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func metricsUnaryInterceptor(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (resp interface{}, err error) {
|
|
||||||
service, method := splitMethodName(info.FullMethod)
|
|
||||||
receivedCounter.WithLabelValues(service, method).Inc()
|
|
||||||
|
|
||||||
start := time.Now()
|
|
||||||
resp, err = handler(ctx, req)
|
|
||||||
if err != nil {
|
|
||||||
failedCounter.WithLabelValues(service, method, grpc.Code(err).String()).Inc()
|
|
||||||
}
|
|
||||||
handlingDuration.WithLabelValues(service, method).Observe(time.Since(start).Seconds())
|
|
||||||
|
|
||||||
return resp, err
|
|
||||||
}
|
|
||||||
|
|
||||||
func metricsStreamInterceptor(srv interface{}, ss grpc.ServerStream, info *grpc.StreamServerInfo, handler grpc.StreamHandler) error {
|
|
||||||
service, method := splitMethodName(info.FullMethod)
|
|
||||||
receivedCounter.WithLabelValues(service, method).Inc()
|
|
||||||
|
|
||||||
streamsGauage.WithLabelValues(service, method).Inc()
|
|
||||||
err := handler(srv, ss)
|
|
||||||
streamsGauage.WithLabelValues(service, method).Dec()
|
|
||||||
if err != nil {
|
|
||||||
failedCounter.WithLabelValues(service, method, grpc.Code(err).String()).Inc()
|
|
||||||
}
|
|
||||||
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
func splitMethodName(fullMethodName string) (string, string) {
|
func splitMethodName(fullMethodName string) (string, string) {
|
||||||
fullMethodName = strings.TrimPrefix(fullMethodName, "/") // remove leading slash
|
fullMethodName = strings.TrimPrefix(fullMethodName, "/") // remove leading slash
|
||||||
if i := strings.Index(fullMethodName, "/"); i >= 0 {
|
if i := strings.Index(fullMethodName, "/"); i >= 0 {
|
||||||
|
@ -17,39 +17,6 @@ package v3rpc
|
|||||||
import "github.com/prometheus/client_golang/prometheus"
|
import "github.com/prometheus/client_golang/prometheus"
|
||||||
|
|
||||||
var (
|
var (
|
||||||
receivedCounter = prometheus.NewCounterVec(
|
|
||||||
prometheus.CounterOpts{
|
|
||||||
Namespace: "etcd",
|
|
||||||
Subsystem: "grpc",
|
|
||||||
Name: "requests_total",
|
|
||||||
Help: "Counter of received requests.",
|
|
||||||
}, []string{"grpc_service", "grpc_method"})
|
|
||||||
|
|
||||||
failedCounter = prometheus.NewCounterVec(
|
|
||||||
prometheus.CounterOpts{
|
|
||||||
Namespace: "etcd",
|
|
||||||
Subsystem: "grpc",
|
|
||||||
Name: "requests_failed_total",
|
|
||||||
Help: "Counter of failed requests.",
|
|
||||||
}, []string{"grpc_service", "grpc_method", "grpc_code"})
|
|
||||||
|
|
||||||
streamsGauage = prometheus.NewGaugeVec(
|
|
||||||
prometheus.GaugeOpts{
|
|
||||||
Namespace: "etcd",
|
|
||||||
Subsystem: "grpc",
|
|
||||||
Name: "active_streams",
|
|
||||||
Help: "Number of active streams.",
|
|
||||||
}, []string{"grpc_service", "grpc_method"})
|
|
||||||
|
|
||||||
handlingDuration = prometheus.NewHistogramVec(
|
|
||||||
prometheus.HistogramOpts{
|
|
||||||
Namespace: "etcd",
|
|
||||||
Subsystem: "grpc",
|
|
||||||
Name: "unary_requests_duration_seconds",
|
|
||||||
Help: "Bucketed histogram of processing time (s) of handled unary (non-stream) requests.",
|
|
||||||
Buckets: prometheus.ExponentialBuckets(0.0005, 2, 13),
|
|
||||||
}, []string{"grpc_service", "grpc_method"})
|
|
||||||
|
|
||||||
sentBytes = prometheus.NewCounter(prometheus.CounterOpts{
|
sentBytes = prometheus.NewCounter(prometheus.CounterOpts{
|
||||||
Namespace: "etcd",
|
Namespace: "etcd",
|
||||||
Subsystem: "network",
|
Subsystem: "network",
|
||||||
@ -66,11 +33,6 @@ var (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
prometheus.MustRegister(receivedCounter)
|
|
||||||
prometheus.MustRegister(failedCounter)
|
|
||||||
prometheus.MustRegister(streamsGauage)
|
|
||||||
prometheus.MustRegister(handlingDuration)
|
|
||||||
|
|
||||||
prometheus.MustRegister(sentBytes)
|
prometheus.MustRegister(sentBytes)
|
||||||
prometheus.MustRegister(receivedBytes)
|
prometheus.MustRegister(receivedBytes)
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user