Forráskód Böngészése

Merge pull request #6930 from xiang90/grpc_metrics

grpcproxy: add cache related metrics
Xiang Li 9 éve
szülő
commit
d844440ffb
3 módosított fájl, 39 hozzáadás és 0 törlés
  1. 5 0
      proxy/grpcproxy/cache/store.go
  2. 13 0
      proxy/grpcproxy/kv.go
  3. 21 0
      proxy/grpcproxy/metrics.go

+ 5 - 0
proxy/grpcproxy/cache/store.go

@@ -34,6 +34,7 @@ type Cache interface {
 	Get(req *pb.RangeRequest) (*pb.RangeResponse, error)
 	Compact(revision int64)
 	Invalidate(key []byte, endkey []byte)
+	Size() int
 }
 
 // keyFunc returns the key of an request, which is used to look up in the cache for it's caching response.
@@ -154,3 +155,7 @@ func (c *cache) Compact(revision int64) {
 		c.compactedRev = revision
 	}
 }
+
+func (c *cache) Size() int {
+	return c.lru.Len()
+}

+ 13 - 0
proxy/grpcproxy/kv.go

@@ -39,11 +39,14 @@ func (p *kvProxy) Range(ctx context.Context, r *pb.RangeRequest) (*pb.RangeRespo
 		resp, err := p.cache.Get(r)
 		switch err {
 		case nil:
+			cacheHits.Inc()
 			return resp, nil
 		case cache.ErrCompacted:
+			cacheHits.Inc()
 			return nil, err
 		}
 	}
+	cachedMisses.Inc()
 
 	resp, err := p.kv.Do(ctx, RangeRequestToOp(r))
 	if err != nil {
@@ -55,18 +58,23 @@ func (p *kvProxy) Range(ctx context.Context, r *pb.RangeRequest) (*pb.RangeRespo
 	req.Serializable = true
 	gresp := (*pb.RangeResponse)(resp.Get())
 	p.cache.Add(&req, gresp)
+	cacheKeys.Set(float64(p.cache.Size()))
 
 	return gresp, nil
 }
 
 func (p *kvProxy) Put(ctx context.Context, r *pb.PutRequest) (*pb.PutResponse, error) {
 	p.cache.Invalidate(r.Key, nil)
+	cacheKeys.Set(float64(p.cache.Size()))
+
 	resp, err := p.kv.Do(ctx, PutRequestToOp(r))
 	return (*pb.PutResponse)(resp.Put()), err
 }
 
 func (p *kvProxy) DeleteRange(ctx context.Context, r *pb.DeleteRangeRequest) (*pb.DeleteRangeResponse, error) {
 	p.cache.Invalidate(r.Key, r.RangeEnd)
+	cacheKeys.Set(float64(p.cache.Size()))
+
 	resp, err := p.kv.Do(ctx, DelRequestToOp(r))
 	return (*pb.DeleteRangeResponse)(resp.Del()), err
 }
@@ -120,6 +128,9 @@ func (p *kvProxy) Txn(ctx context.Context, r *pb.TxnRequest) (*pb.TxnResponse, e
 	} else {
 		p.txnToCache(r.Failure, resp.Responses)
 	}
+
+	cacheKeys.Set(float64(p.cache.Size()))
+
 	return (*pb.TxnResponse)(resp), nil
 }
 
@@ -134,6 +145,8 @@ func (p *kvProxy) Compact(ctx context.Context, r *pb.CompactionRequest) (*pb.Com
 		p.cache.Compact(r.Revision)
 	}
 
+	cacheKeys.Set(float64(p.cache.Size()))
+
 	return (*pb.CompactionResponse)(resp), err
 }
 

+ 21 - 0
proxy/grpcproxy/metrics.go

@@ -29,9 +29,30 @@ var (
 		Name:      "events_coalescing_total",
 		Help:      "Total number of events coalescing",
 	})
+	cacheKeys = prometheus.NewGauge(prometheus.GaugeOpts{
+		Namespace: "etcd",
+		Subsystem: "grpc_proxy",
+		Name:      "cache_keys_total",
+		Help:      "Total number of keys/ranges cached",
+	})
+	cacheHits = prometheus.NewGauge(prometheus.GaugeOpts{
+		Namespace: "etcd",
+		Subsystem: "grpc_proxy",
+		Name:      "cache_hits_total",
+		Help:      "Total number of cache hits",
+	})
+	cachedMisses = prometheus.NewGauge(prometheus.GaugeOpts{
+		Namespace: "etcd",
+		Subsystem: "grpc_proxy",
+		Name:      "cache_misses_total",
+		Help:      "Total number of cache misses",
+	})
 )
 
 func init() {
 	prometheus.MustRegister(watchersCoalescing)
 	prometheus.MustRegister(eventsCoalescing)
+	prometheus.MustRegister(cacheKeys)
+	prometheus.MustRegister(cacheHits)
+	prometheus.MustRegister(cachedMisses)
 }