Browse Source

etcdserver: add "etcd_server_slow_read_indexes_total"

Signed-off-by: Gyuho Lee <gyuhox@gmail.com>
Gyuho Lee 7 years ago
parent
commit
4481238224
2 changed files with 9 additions and 0 deletions
  1. 7 0
      etcdserver/metrics.go
  2. 2 0
      etcdserver/v3_server.go

+ 7 - 0
etcdserver/metrics.go

@@ -71,6 +71,12 @@ var (
 		Name:      "lease_expired_total",
 		Name:      "lease_expired_total",
 		Help:      "The total number of expired leases.",
 		Help:      "The total number of expired leases.",
 	})
 	})
+	slowReadIndex = prometheus.NewCounter(prometheus.CounterOpts{
+		Namespace: "etcd",
+		Subsystem: "server",
+		Name:      "slow_read_indexes_total",
+		Help:      "The total number of pending read indexes not in sync with leader's or timed out read index requests.",
+	})
 	currentVersion = prometheus.NewGaugeVec(prometheus.GaugeOpts{
 	currentVersion = prometheus.NewGaugeVec(prometheus.GaugeOpts{
 		Namespace: "etcd",
 		Namespace: "etcd",
 		Subsystem: "server",
 		Subsystem: "server",
@@ -89,6 +95,7 @@ func init() {
 	prometheus.MustRegister(proposalsPending)
 	prometheus.MustRegister(proposalsPending)
 	prometheus.MustRegister(proposalsFailed)
 	prometheus.MustRegister(proposalsFailed)
 	prometheus.MustRegister(leaseExpired)
 	prometheus.MustRegister(leaseExpired)
+	prometheus.MustRegister(slowReadIndex)
 	prometheus.MustRegister(currentVersion)
 	prometheus.MustRegister(currentVersion)
 
 
 	currentVersion.With(prometheus.Labels{
 	currentVersion.With(prometheus.Labels{

+ 2 - 0
etcdserver/v3_server.go

@@ -655,12 +655,14 @@ func (s *EtcdServer) linearizableReadLoop() {
 						id2 = binary.BigEndian.Uint64(rs.RequestCtx)
 						id2 = binary.BigEndian.Uint64(rs.RequestCtx)
 					}
 					}
 					plog.Warningf("ignored out-of-date read index response; local node read indexes queueing up and waiting to be in sync with leader (request ID want %d, got %d)", id1, id2)
 					plog.Warningf("ignored out-of-date read index response; local node read indexes queueing up and waiting to be in sync with leader (request ID want %d, got %d)", id1, id2)
+					slowReadIndex.Inc()
 				}
 				}
 
 
 			case <-time.After(s.Cfg.ReqTimeout()):
 			case <-time.After(s.Cfg.ReqTimeout()):
 				plog.Warningf("timed out waiting for read index response")
 				plog.Warningf("timed out waiting for read index response")
 				nr.notify(ErrTimeout)
 				nr.notify(ErrTimeout)
 				timeout = true
 				timeout = true
+				slowReadIndex.Inc()
 
 
 			case <-s.stopping:
 			case <-s.stopping:
 				return
 				return