diff --git a/etcdserver/metrics.go b/etcdserver/metrics.go index 06e0ce9f8..88ff158b7 100644 --- a/etcdserver/metrics.go +++ b/etcdserver/metrics.go @@ -71,6 +71,12 @@ var ( 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.", }) + quotaBackendBytes = prometheus.NewGauge(prometheus.GaugeOpts{ + Namespace: "etcd", + Subsystem: "server", + Name: "quota_backend_bytes", + Help: "Current backend storage quota size in bytes.", + }) currentVersion = prometheus.NewGaugeVec(prometheus.GaugeOpts{ Namespace: "etcd", Subsystem: "server", @@ -89,6 +95,7 @@ func init() { prometheus.MustRegister(proposalsPending) prometheus.MustRegister(proposalsFailed) prometheus.MustRegister(slowReadIndex) + prometheus.MustRegister(quotaBackendBytes) prometheus.MustRegister(currentVersion) currentVersion.With(prometheus.Labels{ diff --git a/etcdserver/quota.go b/etcdserver/quota.go index 088a46962..9e19fc71c 100644 --- a/etcdserver/quota.go +++ b/etcdserver/quota.go @@ -50,15 +50,20 @@ const ( ) func NewBackendQuota(s *EtcdServer) Quota { + quotaBackendBytes.Set(float64(s.Cfg.QuotaBackendBytes)) + if s.Cfg.QuotaBackendBytes < 0 { // disable quotas if negative plog.Warningf("disabling backend quota") return &passthroughQuota{} } + if s.Cfg.QuotaBackendBytes == 0 { + quotaBackendBytes.Set(float64(backend.DefaultQuotaBytes)) // use default size if no quota size given return &backendQuota{s, backend.DefaultQuotaBytes} } + if s.Cfg.QuotaBackendBytes > backend.MaxQuotaBytes { plog.Warningf("backend quota %v exceeds maximum quota %v; using maximum", s.Cfg.QuotaBackendBytes, backend.MaxQuotaBytes) return &backendQuota{s, backend.MaxQuotaBytes}