Metrics: Add ability to disable classic histogram for HTTP metric (#88315)

metrics: Add ability to disable classic histogram for HTTP metric

Signed-off-by: Dave Henderson <dave.henderson@grafana.com>
pull/89382/head
Dave Henderson 1 year ago committed by GitHub
parent 9b7f9ae22e
commit 3bbc821131
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 1
      docs/sources/setup-grafana/configure-grafana/feature-toggles/index.md
  2. 1
      packages/grafana-data/src/types/featureToggles.gen.ts
  3. 11
      pkg/middleware/request_metrics.go
  4. 23
      pkg/services/featuremgmt/registry.go
  5. 3
      pkg/services/featuremgmt/toggles_gen.csv
  6. 4
      pkg/services/featuremgmt/toggles_gen.go
  7. 417
      pkg/services/featuremgmt/toggles_gen.json

@ -151,6 +151,7 @@ Experimental features might be changed or removed without prior notice.
| `pluginsAPIMetrics` | Sends metrics of public grafana packages usage by plugins | | `pluginsAPIMetrics` | Sends metrics of public grafana packages usage by plugins |
| `idForwarding` | Generate signed id token for identity that can be forwarded to plugins and external services | | `idForwarding` | Generate signed id token for identity that can be forwarded to plugins and external services |
| `enableNativeHTTPHistogram` | Enables native HTTP Histograms | | `enableNativeHTTPHistogram` | Enables native HTTP Histograms |
| `disableClassicHTTPHistogram` | Disables classic HTTP Histogram (use with enableNativeHTTPHistogram) |
| `kubernetesSnapshots` | Routes snapshot requests from /api to the /apis endpoint | | `kubernetesSnapshots` | Routes snapshot requests from /api to the /apis endpoint |
| `kubernetesDashboards` | Use the kubernetes API in the frontend for dashboards | | `kubernetesDashboards` | Use the kubernetes API in the frontend for dashboards |
| `datasourceQueryTypes` | Show query type endpoints in datasource API servers (currently hardcoded for testdata, expressions, and prometheus) | | `datasourceQueryTypes` | Show query type endpoints in datasource API servers (currently hardcoded for testdata, expressions, and prometheus) |

@ -112,6 +112,7 @@ export interface FeatureToggles {
externalServiceAccounts?: boolean; externalServiceAccounts?: boolean;
panelMonitoring?: boolean; panelMonitoring?: boolean;
enableNativeHTTPHistogram?: boolean; enableNativeHTTPHistogram?: boolean;
disableClassicHTTPHistogram?: boolean;
formatString?: boolean; formatString?: boolean;
transformationsVariableSupport?: boolean; transformationsVariableSupport?: boolean;
kubernetesPlaylists?: boolean; kubernetesPlaylists?: boolean;

@ -51,12 +51,19 @@ func RequestMetrics(features featuremgmt.FeatureToggles, cfg *setting.Cfg, promR
if features.IsEnabledGlobally(featuremgmt.FlagEnableNativeHTTPHistogram) { if features.IsEnabledGlobally(featuremgmt.FlagEnableNativeHTTPHistogram) {
// the recommended default value from the prom_client // the recommended default value from the prom_client
// https://github.com/prometheus/client_golang/blob/main/prometheus/histogram.go#L411 // https://github.com/prometheus/client_golang/blob/main/prometheus/histogram.go#L411
// Giving this variable an value means the client will expose the histograms as an // Giving this variable a value means the client will expose a native
// native histogram instead of normal a normal histogram. // histogram.
histogramOptions.NativeHistogramBucketFactor = 1.1 histogramOptions.NativeHistogramBucketFactor = 1.1
// The default value in OTel. It probably good enough for us as well. // The default value in OTel. It probably good enough for us as well.
histogramOptions.NativeHistogramMaxBucketNumber = 160 histogramOptions.NativeHistogramMaxBucketNumber = 160
histogramOptions.NativeHistogramMinResetDuration = time.Hour histogramOptions.NativeHistogramMinResetDuration = time.Hour
if features.IsEnabledGlobally(featuremgmt.FlagDisableClassicHTTPHistogram) {
// setting Buckets to nil with native options set means the classic
// histogram will no longer be exposed - this can be a good way to
// reduce cardinality in the exposed metrics
histogramOptions.Buckets = nil
}
} }
httpRequestDurationHistogram := prometheus.NewHistogramVec( httpRequestDurationHistogram := prometheus.NewHistogramVec(

@ -700,11 +700,24 @@ var (
FrontendOnly: true, FrontendOnly: true,
}, },
{ {
Name: "enableNativeHTTPHistogram", Name: "enableNativeHTTPHistogram",
Description: "Enables native HTTP Histograms", Description: "Enables native HTTP Histograms",
Stage: FeatureStageExperimental, Stage: FeatureStageExperimental,
FrontendOnly: false, FrontendOnly: false,
Owner: hostedGrafanaTeam, Owner: grafanaBackendServicesSquad,
HideFromAdminPage: true,
AllowSelfServe: false,
RequiresRestart: true,
},
FeatureFlag{
Name: "disableClassicHTTPHistogram",
Description: "Disables classic HTTP Histogram (use with enableNativeHTTPHistogram)",
Stage: FeatureStageExperimental,
FrontendOnly: false,
Owner: grafanaBackendServicesSquad,
HideFromAdminPage: true,
AllowSelfServe: false,
RequiresRestart: true,
}, },
{ {
Name: "formatString", Name: "formatString",

@ -92,7 +92,8 @@ pluginsAPIMetrics,experimental,@grafana/plugins-platform-backend,false,false,tru
idForwarding,experimental,@grafana/identity-access-team,false,false,false idForwarding,experimental,@grafana/identity-access-team,false,false,false
externalServiceAccounts,preview,@grafana/identity-access-team,false,false,false externalServiceAccounts,preview,@grafana/identity-access-team,false,false,false
panelMonitoring,GA,@grafana/dataviz-squad,false,false,true panelMonitoring,GA,@grafana/dataviz-squad,false,false,true
enableNativeHTTPHistogram,experimental,@grafana/hosted-grafana-team,false,false,false enableNativeHTTPHistogram,experimental,@grafana/grafana-backend-services-squad,false,true,false
disableClassicHTTPHistogram,experimental,@grafana/grafana-backend-services-squad,false,true,false
formatString,preview,@grafana/dataviz-squad,false,false,true formatString,preview,@grafana/dataviz-squad,false,false,true
transformationsVariableSupport,GA,@grafana/dataviz-squad,false,false,true transformationsVariableSupport,GA,@grafana/dataviz-squad,false,false,true
kubernetesPlaylists,GA,@grafana/grafana-app-platform-squad,false,true,false kubernetesPlaylists,GA,@grafana/grafana-app-platform-squad,false,true,false

1 Name Stage Owner requiresDevMode RequiresRestart FrontendOnly
92 idForwarding experimental @grafana/identity-access-team false false false
93 externalServiceAccounts preview @grafana/identity-access-team false false false
94 panelMonitoring GA @grafana/dataviz-squad false false true
95 enableNativeHTTPHistogram experimental @grafana/hosted-grafana-team @grafana/grafana-backend-services-squad false false true false
96 disableClassicHTTPHistogram experimental @grafana/grafana-backend-services-squad false true false
97 formatString preview @grafana/dataviz-squad false false true
98 transformationsVariableSupport GA @grafana/dataviz-squad false false true
99 kubernetesPlaylists GA @grafana/grafana-app-platform-squad false true false

@ -383,6 +383,10 @@ const (
// Enables native HTTP Histograms // Enables native HTTP Histograms
FlagEnableNativeHTTPHistogram = "enableNativeHTTPHistogram" FlagEnableNativeHTTPHistogram = "enableNativeHTTPHistogram"
// FlagDisableClassicHTTPHistogram
// Disables classic HTTP Histogram (use with enableNativeHTTPHistogram)
FlagDisableClassicHTTPHistogram = "disableClassicHTTPHistogram"
// FlagFormatString // FlagFormatString
// Enable format string transformer // Enable format string transformer
FlagFormatString = "formatString" FlagFormatString = "formatString"

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save