mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Instrumentation: Add feature toggle for logging requests instrumented as unknown (#50566)
Signed-off-by: bergquist <carl.bergquist@gmail.com>
This commit is contained in:
parent
6a4906ef7e
commit
2d6e69226b
@ -58,4 +58,5 @@ export interface FeatureToggles {
|
|||||||
prometheusWideSeries?: boolean;
|
prometheusWideSeries?: boolean;
|
||||||
canvasPanelNesting?: boolean;
|
canvasPanelNesting?: boolean;
|
||||||
cloudMonitoringExperimentalUI?: boolean;
|
cloudMonitoringExperimentalUI?: boolean;
|
||||||
|
logRequestsInstrumentedAsUnknown?: boolean;
|
||||||
}
|
}
|
||||||
|
@ -6,6 +6,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/grafana/grafana/pkg/infra/log"
|
||||||
"github.com/grafana/grafana/pkg/infra/metrics"
|
"github.com/grafana/grafana/pkg/infra/metrics"
|
||||||
"github.com/grafana/grafana/pkg/infra/tracing"
|
"github.com/grafana/grafana/pkg/infra/tracing"
|
||||||
"github.com/grafana/grafana/pkg/services/featuremgmt"
|
"github.com/grafana/grafana/pkg/services/featuremgmt"
|
||||||
@ -46,6 +47,8 @@ func init() {
|
|||||||
|
|
||||||
// RequestMetrics is a middleware handler that instruments the request.
|
// RequestMetrics is a middleware handler that instruments the request.
|
||||||
func RequestMetrics(features featuremgmt.FeatureToggles) web.Handler {
|
func RequestMetrics(features featuremgmt.FeatureToggles) web.Handler {
|
||||||
|
log := log.New("middleware.request-metrics")
|
||||||
|
|
||||||
return func(res http.ResponseWriter, req *http.Request, c *web.Context) {
|
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" {
|
if strings.HasPrefix(c.Req.URL.Path, "/public/") || c.Req.URL.Path == "robots.txt" || c.Req.URL.Path == "/metrics" {
|
||||||
c.Next()
|
c.Next()
|
||||||
@ -58,15 +61,18 @@ func RequestMetrics(features featuremgmt.FeatureToggles) web.Handler {
|
|||||||
defer httpRequestsInFlight.Dec()
|
defer httpRequestsInFlight.Dec()
|
||||||
c.Next()
|
c.Next()
|
||||||
|
|
||||||
handler := "unknown"
|
|
||||||
|
|
||||||
if routeOperation, exists := RouteOperationNameFromContext(c.Req.Context()); exists {
|
|
||||||
handler = routeOperation
|
|
||||||
}
|
|
||||||
|
|
||||||
status := rw.Status()
|
status := rw.Status()
|
||||||
code := sanitizeCode(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
|
// avoiding the sanitize functions for in the new instrumentation
|
||||||
// since they dont make much sense. We should remove them later.
|
// since they dont make much sense. We should remove them later.
|
||||||
histogram := httpRequestDurationHistogram.
|
histogram := httpRequestDurationHistogram.
|
||||||
|
@ -237,5 +237,10 @@ var (
|
|||||||
State: FeatureStateAlpha,
|
State: FeatureStateAlpha,
|
||||||
FrontendOnly: true,
|
FrontendOnly: true,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
Name: "logRequestsInstrumentedAsUnknown",
|
||||||
|
Description: "Logs the path for requests that are instrumented as unknown",
|
||||||
|
State: FeatureStateAlpha,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
@ -174,4 +174,8 @@ const (
|
|||||||
// FlagCloudMonitoringExperimentalUI
|
// FlagCloudMonitoringExperimentalUI
|
||||||
// Use grafana-experimental UI in Cloud Monitoring
|
// Use grafana-experimental UI in Cloud Monitoring
|
||||||
FlagCloudMonitoringExperimentalUI = "cloudMonitoringExperimentalUI"
|
FlagCloudMonitoringExperimentalUI = "cloudMonitoringExperimentalUI"
|
||||||
|
|
||||||
|
// FlagLogRequestsInstrumentedAsUnknown
|
||||||
|
// Logs the path for requests that are instrumented as unknown
|
||||||
|
FlagLogRequestsInstrumentedAsUnknown = "logRequestsInstrumentedAsUnknown"
|
||||||
)
|
)
|
||||||
|
Loading…
Reference in New Issue
Block a user