From f14d2a087f7b0fd6f7980b95b5e0b945109c95f3 Mon Sep 17 00:00:00 2001 From: shawwang Date: Mon, 24 Feb 2020 15:47:45 +0800 Subject: [PATCH] auth: add new metric 'etcd_debugging_auth_revision' --- auth/metrics.go | 42 ++++++++++++++++++++++++++++++++++++++++++ auth/store.go | 10 ++++++++++ 2 files changed, 52 insertions(+) create mode 100644 auth/metrics.go diff --git a/auth/metrics.go b/auth/metrics.go new file mode 100644 index 00000000000..fe0d28e22d5 --- /dev/null +++ b/auth/metrics.go @@ -0,0 +1,42 @@ +// Copyright 2015 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package auth + +import ( + "github.com/prometheus/client_golang/prometheus" + "sync" +) + +var ( + currentAuthRevision = prometheus.NewGaugeFunc(prometheus.GaugeOpts{ + Namespace: "etcd_debugging", + Subsystem: "auth", + Name: "revision", + Help: "The current revision of auth store.", + }, + func() float64 { + reportCurrentAuthRevMu.RLock() + defer reportCurrentAuthRevMu.RUnlock() + return reportCurrentAuthRev() + }, + ) + // overridden by auth store initialization + reportCurrentAuthRevMu sync.RWMutex + reportCurrentAuthRev = func() float64 { return 0 } +) + +func init() { + prometheus.MustRegister(currentAuthRevision) +} diff --git a/auth/store.go b/auth/store.go index 5c6d37dbe0a..5672a9440e1 100644 --- a/auth/store.go +++ b/auth/store.go @@ -1068,6 +1068,8 @@ func NewAuthStore(lg *zap.Logger, be backend.Backend, tp TokenProvider, bcryptCo as.saveConsistentIndex(tx) } + as.setupMetricsReporter() + tx.Unlock() be.ForceCommit() @@ -1318,3 +1320,11 @@ func (as *authStore) saveConsistentIndex(tx backend.BatchTx) { as.lg.Error("failed to save consistentIndex,syncConsistentIndex is nil") } } + +func (as *authStore) setupMetricsReporter() { + reportCurrentAuthRevMu.Lock() + reportCurrentAuthRev = func() float64 { + return float64(as.Revision()) + } + reportCurrentAuthRevMu.Unlock() +}