mirror of https://github.com/milvus-io/milvus.git
enhance: add metrics for restful apis (#34969)
issue: #34968 Signed-off-by: PowderLi <min.li@zilliz.com>pull/35050/head
parent
497afcb897
commit
5584ae2e14
|
@ -66,6 +66,7 @@ import (
|
||||||
"github.com/milvus-io/milvus/internal/util/dependency"
|
"github.com/milvus-io/milvus/internal/util/dependency"
|
||||||
_ "github.com/milvus-io/milvus/internal/util/grpcclient"
|
_ "github.com/milvus-io/milvus/internal/util/grpcclient"
|
||||||
"github.com/milvus-io/milvus/pkg/log"
|
"github.com/milvus-io/milvus/pkg/log"
|
||||||
|
"github.com/milvus-io/milvus/pkg/metrics"
|
||||||
"github.com/milvus-io/milvus/pkg/tracer"
|
"github.com/milvus-io/milvus/pkg/tracer"
|
||||||
"github.com/milvus-io/milvus/pkg/util"
|
"github.com/milvus-io/milvus/pkg/util"
|
||||||
"github.com/milvus-io/milvus/pkg/util/etcd"
|
"github.com/milvus-io/milvus/pkg/util/etcd"
|
||||||
|
@ -172,8 +173,31 @@ func (s *Server) registerHTTPServer() {
|
||||||
func (s *Server) startHTTPServer(errChan chan error) {
|
func (s *Server) startHTTPServer(errChan chan error) {
|
||||||
defer s.wg.Done()
|
defer s.wg.Done()
|
||||||
ginHandler := gin.New()
|
ginHandler := gin.New()
|
||||||
ginHandler.Use(accesslog.AccessLogMiddleware)
|
ginHandler.Use(func(c *gin.Context) {
|
||||||
|
path := c.Request.URL.Path
|
||||||
|
metrics.RestfulFunctionCall.WithLabelValues(
|
||||||
|
strconv.FormatInt(paramtable.GetNodeID(), 10), path,
|
||||||
|
).Inc()
|
||||||
|
if c.Request.ContentLength >= 0 {
|
||||||
|
metrics.RestfulReceiveBytes.WithLabelValues(
|
||||||
|
strconv.FormatInt(paramtable.GetNodeID(), 10), path,
|
||||||
|
).Add(float64(c.Request.ContentLength))
|
||||||
|
}
|
||||||
|
start := time.Now()
|
||||||
|
|
||||||
|
// Process request
|
||||||
|
c.Next()
|
||||||
|
|
||||||
|
latency := time.Now().Sub(start)
|
||||||
|
metrics.RestfulReqLatency.WithLabelValues(
|
||||||
|
strconv.FormatInt(paramtable.GetNodeID(), 10), path,
|
||||||
|
).Observe(float64(latency.Milliseconds()))
|
||||||
|
metrics.RestfulSendBytes.WithLabelValues(
|
||||||
|
strconv.FormatInt(paramtable.GetNodeID(), 10), path,
|
||||||
|
).Add(float64(c.Writer.Size()))
|
||||||
|
})
|
||||||
|
|
||||||
|
ginHandler.Use(accesslog.AccessLogMiddleware)
|
||||||
ginLogger := gin.LoggerWithConfig(gin.LoggerConfig{
|
ginLogger := gin.LoggerWithConfig(gin.LoggerConfig{
|
||||||
SkipPaths: proxy.Params.ProxyCfg.GinLogSkipPaths.GetAsStrings(),
|
SkipPaths: proxy.Params.ProxyCfg.GinLogSkipPaths.GetAsStrings(),
|
||||||
Formatter: func(param gin.LogFormatterParams) string {
|
Formatter: func(param gin.LogFormatterParams) string {
|
||||||
|
|
|
@ -110,6 +110,7 @@ const (
|
||||||
lockType = "lock_type"
|
lockType = "lock_type"
|
||||||
lockOp = "lock_op"
|
lockOp = "lock_op"
|
||||||
loadTypeName = "load_type"
|
loadTypeName = "load_type"
|
||||||
|
pathLabelName = "path"
|
||||||
|
|
||||||
// entities label
|
// entities label
|
||||||
LoadedLabel = "loaded"
|
LoadedLabel = "loaded"
|
||||||
|
|
|
@ -263,6 +263,43 @@ var (
|
||||||
Help: "count of bytes sent back to sdk",
|
Help: "count of bytes sent back to sdk",
|
||||||
}, []string{nodeIDLabelName})
|
}, []string{nodeIDLabelName})
|
||||||
|
|
||||||
|
// RestfulFunctionCall records the number of times the restful apis was called.
|
||||||
|
RestfulFunctionCall = prometheus.NewCounterVec(
|
||||||
|
prometheus.CounterOpts{
|
||||||
|
Namespace: milvusNamespace,
|
||||||
|
Subsystem: typeutil.ProxyRole,
|
||||||
|
Name: "restful_api_req_count",
|
||||||
|
Help: "count of operation executed",
|
||||||
|
}, []string{nodeIDLabelName, pathLabelName})
|
||||||
|
|
||||||
|
// RestfulReqLatency records the latency that for all requests.
|
||||||
|
RestfulReqLatency = prometheus.NewHistogramVec(
|
||||||
|
prometheus.HistogramOpts{
|
||||||
|
Namespace: milvusNamespace,
|
||||||
|
Subsystem: typeutil.ProxyRole,
|
||||||
|
Name: "restful_api_req_latency",
|
||||||
|
Help: "latency of each request",
|
||||||
|
Buckets: buckets, // unit: ms
|
||||||
|
}, []string{nodeIDLabelName, pathLabelName})
|
||||||
|
|
||||||
|
// RestfulReceiveBytes record the received bytes of messages in Proxy
|
||||||
|
RestfulReceiveBytes = prometheus.NewCounterVec(
|
||||||
|
prometheus.CounterOpts{
|
||||||
|
Namespace: milvusNamespace,
|
||||||
|
Subsystem: typeutil.ProxyRole,
|
||||||
|
Name: "restful_api_receive_bytes_count",
|
||||||
|
Help: "count of bytes received from sdk",
|
||||||
|
}, []string{nodeIDLabelName, pathLabelName})
|
||||||
|
|
||||||
|
// RestfulSendBytes record the bytes sent back to client by Proxy
|
||||||
|
RestfulSendBytes = prometheus.NewCounterVec(
|
||||||
|
prometheus.CounterOpts{
|
||||||
|
Namespace: milvusNamespace,
|
||||||
|
Subsystem: typeutil.ProxyRole,
|
||||||
|
Name: "restful_api_send_bytes_count",
|
||||||
|
Help: "count of bytes sent back to sdk",
|
||||||
|
}, []string{nodeIDLabelName, pathLabelName})
|
||||||
|
|
||||||
// ProxyReportValue records value about the request
|
// ProxyReportValue records value about the request
|
||||||
ProxyReportValue = prometheus.NewCounterVec(
|
ProxyReportValue = prometheus.NewCounterVec(
|
||||||
prometheus.CounterOpts{
|
prometheus.CounterOpts{
|
||||||
|
@ -383,6 +420,12 @@ func RegisterProxy(registry *prometheus.Registry) {
|
||||||
registry.MustRegister(ProxyReceiveBytes)
|
registry.MustRegister(ProxyReceiveBytes)
|
||||||
registry.MustRegister(ProxyReadReqSendBytes)
|
registry.MustRegister(ProxyReadReqSendBytes)
|
||||||
|
|
||||||
|
registry.MustRegister(RestfulFunctionCall)
|
||||||
|
registry.MustRegister(RestfulReqLatency)
|
||||||
|
|
||||||
|
registry.MustRegister(RestfulReceiveBytes)
|
||||||
|
registry.MustRegister(RestfulSendBytes)
|
||||||
|
|
||||||
registry.MustRegister(ProxyLimiterRate)
|
registry.MustRegister(ProxyLimiterRate)
|
||||||
registry.MustRegister(ProxyHookFunc)
|
registry.MustRegister(ProxyHookFunc)
|
||||||
registry.MustRegister(UserRPCCounter)
|
registry.MustRegister(UserRPCCounter)
|
||||||
|
|
Loading…
Reference in New Issue