From c54932640bcdd4dd7aeeb9ca6f4f41106974beb5 Mon Sep 17 00:00:00 2001 From: Iosmanthus Teng Date: Wed, 27 Jan 2021 18:08:31 +0800 Subject: [PATCH] server: add token usage gauge for tidb (#22511) Signed-off-by: iosmanthus --- metrics/metrics.go | 2 ++ metrics/server.go | 18 ++++++++++++++++++ server/server.go | 8 ++++++++ 3 files changed, 28 insertions(+) diff --git a/metrics/metrics.go b/metrics/metrics.go index 7d6ec2b466..58d47b29b6 100644 --- a/metrics/metrics.go +++ b/metrics/metrics.go @@ -175,4 +175,6 @@ func RegisterMetrics() { prometheus.MustRegister(GOGC) prometheus.MustRegister(ConnIdleDurationHistogram) prometheus.MustRegister(ServerInfo) + prometheus.MustRegister(TokenGauge) + prometheus.MustRegister(TokenLimitGauge) } diff --git a/metrics/server.go b/metrics/server.go index a37129c639..020bef24d0 100644 --- a/metrics/server.go +++ b/metrics/server.go @@ -203,6 +203,24 @@ var ( Name: "info", Help: "Indicate the tidb server info, and the value is the start timestamp (s).", }, []string{LblVersion, LblHash}) + + TokenGauge = prometheus.NewGauge( + prometheus.GaugeOpts{ + Namespace: "tidb", + Subsystem: "server", + Name: "tokens", + Help: "The number of concurrent executing session", + }, + ) + + TokenLimitGauge = prometheus.NewGauge( + prometheus.GaugeOpts{ + Namespace: "tidb", + Subsystem: "server", + Name: "token_limit", + Help: "The maximum number of concurrent executing session", + }, + ) ) // ExecuteErrorToLabel converts an execute error to label. diff --git a/server/server.go b/server/server.go index 8c12205dd9..a5c8d29676 100644 --- a/server/server.go +++ b/server/server.go @@ -141,6 +141,7 @@ func (s *Server) ConnectionCount() int { func (s *Server) getToken() *Token { start := time.Now() tok := s.concurrentLimiter.Get() + metrics.TokenGauge.Inc() // Note that data smaller than one microsecond is ignored, because that case can be viewed as non-block. metrics.GetTokenDurationHistogram.Observe(float64(time.Since(start).Nanoseconds() / 1e3)) return tok @@ -148,6 +149,7 @@ func (s *Server) getToken() *Token { func (s *Server) releaseToken(token *Token) { s.concurrentLimiter.Put(token) + metrics.TokenGauge.Dec() } // SetDomain use to set the server domain. @@ -304,9 +306,15 @@ func setTxnScope() { variable.SetSysVar("txn_scope", config.GetGlobalConfig().TxnScope) } +// Export config-related metrics +func (s *Server) reportConfig() { + metrics.TokenLimitGauge.Set(float64(s.cfg.TokenLimit)) +} + // Run runs the server. func (s *Server) Run() error { metrics.ServerEventCounter.WithLabelValues(metrics.EventStart).Inc() + s.reportConfig() // Start HTTP API to report tidb info such as TPS. if s.cfg.Status.ReportStatus {