瀏覽代碼

Metrics: Adds setting for turning off total stats metrics (#19142)

Don't update total stats metrics if reporting is disabled.
New setting disable_total_stats for turning off update 
of total stats (stat_totals_*) metrics.

Ref #19137
Marcus Efraimsson 6 年之前
父節點
當前提交
80592e3361

+ 4 - 2
conf/defaults.ini

@@ -593,8 +593,10 @@ enabled = true
 #################################### Internal Grafana Metrics ############
 # Metrics available at HTTP API Url /metrics
 [metrics]
-enabled           = true
-interval_seconds  = 10
+enabled              = true
+interval_seconds     = 10
+# Disable total stats (stat_totals_*) metrics to be generated
+disable_total_stats = false
 
 #If both are set, basic auth will be required for the metrics endpoint.
 basic_auth_username =

+ 2 - 0
conf/sample.ini

@@ -526,6 +526,8 @@
 [metrics]
 # Disable / Enable internal metrics
 ;enabled           = true
+# Disable total stats (stat_totals_*) metrics to be generated
+;disable_total_stats = false
 
 # Publish interval
 ;interval_seconds  = 10

+ 3 - 0
docs/sources/installation/configuration.md

@@ -548,6 +548,9 @@ If set configures the username to use for basic authentication on the metrics en
 ### basic_auth_password
 If set configures the password to use for basic authentication on the metrics endpoint.
 
+### disable_total_stats
+If set to `true`, then total stats generation (`stat_totals_*` metrics) is disabled. The default is `false`.
+
 ### interval_seconds
 
 Flush/Write interval when sending metrics to external TSDB. Defaults to 10s.

+ 4 - 0
pkg/infra/usagestats/usage_stats.go

@@ -155,6 +155,10 @@ func (uss *UsageStatsService) sendUsageStats(oauthProviders map[string]bool) {
 }
 
 func (uss *UsageStatsService) updateTotalStats() {
+	if !uss.Cfg.MetricsEndpointEnabled || uss.Cfg.MetricsEndpointDisableTotalStats {
+		return
+	}
+
 	statsQuery := models.GetSystemStatsQuery{}
 	if err := uss.Bus.Dispatch(&statsQuery); err != nil {
 		metricsLogger.Error("Failed to get system stats", "error", err)

+ 43 - 0
pkg/infra/usagestats/usage_stats_test.go

@@ -264,6 +264,49 @@ func TestMetrics(t *testing.T) {
 			ts.Close()
 		})
 	})
+
+	Convey("Test update total stats", t, func() {
+		uss := &UsageStatsService{
+			Bus: bus.New(),
+			Cfg: setting.NewCfg(),
+		}
+		uss.Cfg.MetricsEndpointEnabled = true
+		uss.Cfg.MetricsEndpointDisableTotalStats = false
+		getSystemStatsWasCalled := false
+		uss.Bus.AddHandler(func(query *models.GetSystemStatsQuery) error {
+			query.Result = &models.SystemStats{}
+			getSystemStatsWasCalled = true
+			return nil
+		})
+
+		Convey("should not update stats when metrics is disabled and total stats is disabled", func() {
+			uss.Cfg.MetricsEndpointEnabled = false
+			uss.Cfg.MetricsEndpointDisableTotalStats = true
+			uss.updateTotalStats()
+			So(getSystemStatsWasCalled, ShouldBeFalse)
+		})
+
+		Convey("should not update stats when metrics is disabled and total stats enabled", func() {
+			uss.Cfg.MetricsEndpointEnabled = false
+			uss.Cfg.MetricsEndpointDisableTotalStats = false
+			uss.updateTotalStats()
+			So(getSystemStatsWasCalled, ShouldBeFalse)
+		})
+
+		Convey("should not update stats when metrics is enabled and total stats disabled", func() {
+			uss.Cfg.MetricsEndpointEnabled = true
+			uss.Cfg.MetricsEndpointDisableTotalStats = true
+			uss.updateTotalStats()
+			So(getSystemStatsWasCalled, ShouldBeFalse)
+		})
+
+		Convey("should update stats when metrics is enabled and total stats enabled", func() {
+			uss.Cfg.MetricsEndpointEnabled = true
+			uss.Cfg.MetricsEndpointDisableTotalStats = false
+			uss.updateTotalStats()
+			So(getSystemStatsWasCalled, ShouldBeTrue)
+		})
+	})
 }
 
 func waitTimeout(wg *sync.WaitGroup, timeout time.Duration) bool {

+ 2 - 0
pkg/setting/setting.go

@@ -243,6 +243,7 @@ type Cfg struct {
 	MetricsEndpointEnabled           bool
 	MetricsEndpointBasicAuthUsername string
 	MetricsEndpointBasicAuthPassword string
+	MetricsEndpointDisableTotalStats bool
 	PluginsEnableAlpha               bool
 	PluginsAppsSkipVerifyTLS         bool
 	DisableSanitizeHtml              bool
@@ -907,6 +908,7 @@ func (cfg *Cfg) Load(args *CommandLineArgs) error {
 	if err != nil {
 		return err
 	}
+	cfg.MetricsEndpointDisableTotalStats = iniFile.Section("metrics").Key("disable_total_stats").MustBool(false)
 
 	analytics := iniFile.Section("analytics")
 	ReportingEnabled = analytics.Key("reporting_enabled").MustBool(true)