diff --git a/packages/grafana-data/src/types/featureToggles.gen.ts b/packages/grafana-data/src/types/featureToggles.gen.ts index 50fd56fa9ff..217ff17ceb9 100644 --- a/packages/grafana-data/src/types/featureToggles.gen.ts +++ b/packages/grafana-data/src/types/featureToggles.gen.ts @@ -58,4 +58,5 @@ export interface FeatureToggles { prometheusStreamingJSONParser?: boolean; validateDashboardsOnSave?: boolean; prometheusWideSeries?: boolean; + logRequestsInstrumentedAsUnknown?: boolean; } diff --git a/pkg/middleware/request_metrics.go b/pkg/middleware/request_metrics.go index a91b6849f1b..b60d9c75868 100644 --- a/pkg/middleware/request_metrics.go +++ b/pkg/middleware/request_metrics.go @@ -6,6 +6,7 @@ import ( "strings" "time" + "github.com/grafana/grafana/pkg/infra/log" "github.com/grafana/grafana/pkg/infra/metrics" "github.com/grafana/grafana/pkg/infra/tracing" "github.com/grafana/grafana/pkg/services/featuremgmt" @@ -46,6 +47,8 @@ func init() { // RequestMetrics is a middleware handler that instruments the request. func RequestMetrics(features featuremgmt.FeatureToggles) web.Handler { + log := log.New("middleware.request-metrics") + return func(res http.ResponseWriter, req *http.Request, c *web.Context) { if strings.HasPrefix(c.Req.URL.Path, "/public/") || c.Req.URL.Path == "robots.txt" || c.Req.URL.Path == "/metrics" { c.Next() @@ -59,15 +62,18 @@ func RequestMetrics(features featuremgmt.FeatureToggles) web.Handler { c.Map(c.Req) c.Next() - handler := "unknown" - - if routeOperation, exists := RouteOperationNameFromContext(c.Req.Context()); exists { - handler = routeOperation - } - status := rw.Status() code := sanitizeCode(status) + handler := "unknown" + if routeOperation, exists := RouteOperationNameFromContext(c.Req.Context()); exists { + handler = routeOperation + } else { + if features.IsEnabled(featuremgmt.FlagLogRequestsInstrumentedAsUnknown) { + log.Warn("request instrumented as unknown", "path", c.Req.URL.Path, "status_code", status) + } + } + // avoiding the sanitize functions for in the new instrumentation // since they dont make much sense. We should remove them later. histogram := httpRequestDurationHistogram. diff --git a/pkg/services/featuremgmt/registry.go b/pkg/services/featuremgmt/registry.go index 69506473013..8ff5c56bb49 100644 --- a/pkg/services/featuremgmt/registry.go +++ b/pkg/services/featuremgmt/registry.go @@ -237,5 +237,10 @@ var ( Description: "Enable wide series responses in the Prometheus datasource", State: FeatureStateAlpha, }, + { + Name: "logRequestsInstrumentedAsUnknown", + Description: "Logs the path for requests that are instrumented as unknown", + State: FeatureStateAlpha, + }, } ) diff --git a/pkg/services/featuremgmt/toggles_gen.go b/pkg/services/featuremgmt/toggles_gen.go index 95d0cc121fe..0bdbedddfa9 100644 --- a/pkg/services/featuremgmt/toggles_gen.go +++ b/pkg/services/featuremgmt/toggles_gen.go @@ -174,4 +174,8 @@ const ( // FlagPrometheusWideSeries // Enable wide series responses in the Prometheus datasource FlagPrometheusWideSeries = "prometheusWideSeries" + + // FlagLogRequestsInstrumentedAsUnknown + // Logs the path for requests that are instrumented as unknown + FlagLogRequestsInstrumentedAsUnknown = "logRequestsInstrumentedAsUnknown" )