Browse Source

etcdserver: add "etcd_server_slow_apply_total"

{"level":"warn","ts":1527101858.6985068,"caller":"etcdserver/util.go:115","msg":"apply request took too long","took":0.114101529,"expected-duration":0.1,"prefix":"","request":"header:<ID:1029181977902852337> put:<key:\"\\000\\000...

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

+ 7 - 0
etcdserver/metrics.go

@@ -47,6 +47,12 @@ var (
 		Name:      "heartbeat_failures_total",
 		Name:      "heartbeat_failures_total",
 		Help:      "The total number of heartbeat send failures (likely overloaded from slow disk).",
 		Help:      "The total number of heartbeat send failures (likely overloaded from slow disk).",
 	})
 	})
+	slowApplies = prometheus.NewCounter(prometheus.CounterOpts{
+		Namespace: "etcd",
+		Subsystem: "server",
+		Name:      "slow_apply_total",
+		Help:      "The total number of slow apply requests (likely overloaded from slow disk).",
+	})
 	proposalsCommitted = prometheus.NewGauge(prometheus.GaugeOpts{
 	proposalsCommitted = prometheus.NewGauge(prometheus.GaugeOpts{
 		Namespace: "etcd",
 		Namespace: "etcd",
 		Subsystem: "server",
 		Subsystem: "server",
@@ -103,6 +109,7 @@ func init() {
 	prometheus.MustRegister(isLeader)
 	prometheus.MustRegister(isLeader)
 	prometheus.MustRegister(leaderChanges)
 	prometheus.MustRegister(leaderChanges)
 	prometheus.MustRegister(heartbeatFailures)
 	prometheus.MustRegister(heartbeatFailures)
+	prometheus.MustRegister(slowApplies)
 	prometheus.MustRegister(proposalsCommitted)
 	prometheus.MustRegister(proposalsCommitted)
 	prometheus.MustRegister(proposalsApplied)
 	prometheus.MustRegister(proposalsApplied)
 	prometheus.MustRegister(proposalsPending)
 	prometheus.MustRegister(proposalsPending)

+ 2 - 0
etcdserver/util.go

@@ -25,6 +25,7 @@ import (
 	"github.com/coreos/etcd/pkg/types"
 	"github.com/coreos/etcd/pkg/types"
 	"github.com/coreos/etcd/rafthttp"
 	"github.com/coreos/etcd/rafthttp"
 	"github.com/golang/protobuf/proto"
 	"github.com/golang/protobuf/proto"
+	"github.com/gogo/protobuf/plugin/stringer"
 )
 )
 
 
 // isConnectedToQuorumSince checks whether the local member is connected to the
 // isConnectedToQuorumSince checks whether the local member is connected to the
@@ -146,6 +147,7 @@ func warnOfExpensiveGenericRequest(now time.Time, reqStringer fmt.Stringer, pref
 			result = resp
 			result = resp
 		}
 		}
 		plog.Warningf("%srequest %q with result %q took too long (%v) to execute", prefix, reqStringer.String(), result, d)
 		plog.Warningf("%srequest %q with result %q took too long (%v) to execute", prefix, reqStringer.String(), result, d)
+		slowApplies.Inc()
 	}
 	}
 }
 }