From bed1e36dcc5015deda3d8537ef968e48db6c2119 Mon Sep 17 00:00:00 2001 From: "Grot (@grafanabot)" <43478413+grafanabot@users.noreply.github.com> Date: Thu, 19 Jan 2023 08:46:40 +0000 Subject: [PATCH] [v9.3.x] Auth: Fix disable/remove duplicate user entries metrics for performance reasons (#61692) Auth: Fix disable/remove duplicate user entries metrics for performance reasons (#61675) * fix: remove metrics from duplicate user entries * fix: disable metrics collection for authinfo * fix: initifine goroutine loop that happened * removed: metrics (cherry picked from commit bedd2304d1bbc5e65512a7938ac1a231bb6b3f14) Co-authored-by: Eric Leijonmarck --- .../login/authinfoservice/database/database.go | 4 +++- .../login/authinfoservice/database/stats.go | 17 ++++++++++------- pkg/services/login/authinfoservice/service.go | 4 +++- 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/pkg/services/login/authinfoservice/database/database.go b/pkg/services/login/authinfoservice/database/database.go index 395818e662e..798b4155639 100644 --- a/pkg/services/login/authinfoservice/database/database.go +++ b/pkg/services/login/authinfoservice/database/database.go @@ -29,7 +29,9 @@ func ProvideAuthInfoStore(sqlStore db.DB, secretsService secrets.Service, userSe logger: log.New("login.authinfo.store"), userService: userService, } - InitMetrics() + // FIXME: disabled the metric collection for duplicate user entries + // due to query performance issues that is clogging the users Grafana instance + // InitDuplicateUserMetrics() return store } diff --git a/pkg/services/login/authinfoservice/database/stats.go b/pkg/services/login/authinfoservice/database/stats.go index 38e17b44798..c50c2eb79e5 100644 --- a/pkg/services/login/authinfoservice/database/stats.go +++ b/pkg/services/login/authinfoservice/database/stats.go @@ -10,7 +10,10 @@ import ( "github.com/grafana/grafana/pkg/services/login" ) -func InitMetrics() { +// Should be in use in ProvideAuthInfoStore +// due to query performance for big user tables +// we have disabled these metrics from Grafana for now +func InitDuplicateUserMetrics() { login.Once.Do(func() { login.MStatDuplicateUserEntries = prometheus.NewGauge(prometheus.GaugeOpts{ Name: "stat_users_total_duplicate_user_entries", @@ -39,18 +42,18 @@ func InitMetrics() { } func (s *AuthInfoStore) RunMetricsCollection(ctx context.Context) error { - if _, err := s.GetLoginStats(ctx); err != nil { - s.logger.Warn("Failed to get authinfo metrics", "error", err.Error()) - } + // if _, err := s.GetLoginStats(ctx); err != nil { + // s.logger.Warn("Failed to get authinfo metrics", "error", err.Error()) + // } updateStatsTicker := time.NewTicker(login.MetricsCollectionInterval) defer updateStatsTicker.Stop() for { select { case <-updateStatsTicker.C: - if _, err := s.GetLoginStats(ctx); err != nil { - s.logger.Warn("Failed to get authinfo metrics", "error", err.Error()) - } + // if _, err := s.GetLoginStats(ctx); err != nil { + // s.logger.Warn("Failed to get authinfo metrics", "error", nil) + // } case <-ctx.Done(): return ctx.Err() } diff --git a/pkg/services/login/authinfoservice/service.go b/pkg/services/login/authinfoservice/service.go index ac713a7345b..5a2981d5907 100644 --- a/pkg/services/login/authinfoservice/service.go +++ b/pkg/services/login/authinfoservice/service.go @@ -25,7 +25,9 @@ func ProvideAuthInfoService(userProtectionService login.UserProtectionService, a authInfoStore: authInfoStore, logger: log.New("login.authinfo"), } - usageStats.RegisterMetricsFunc(authInfoStore.CollectLoginStats) + // FIXME: disabled metrics until further notice + // query performance is slow for more than 20000 users + // usageStats.RegisterMetricsFunc(authInfoStore.CollectLoginStats) return s }