From 69e4b4667b0c066b6b266dc6e15d4df55cc6dac4 Mon Sep 17 00:00:00 2001 From: Josh Hunt Date: Tue, 4 Nov 2025 13:28:33 +0000 Subject: [PATCH] Backend: Add logs and metric for when host is redirected (#112373) --- pkg/middleware/validate_host.go | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/pkg/middleware/validate_host.go b/pkg/middleware/validate_host.go index 3b75552cd58..eb077b8e06c 100644 --- a/pkg/middleware/validate_host.go +++ b/pkg/middleware/validate_host.go @@ -3,11 +3,22 @@ package middleware import ( "strings" + "github.com/prometheus/client_golang/prometheus" + "github.com/prometheus/client_golang/prometheus/promauto" + contextmodel "github.com/grafana/grafana/pkg/services/contexthandler/model" "github.com/grafana/grafana/pkg/setting" "github.com/grafana/grafana/pkg/web" ) +var ( + hostRedirectCounter = promauto.NewCounter(prometheus.CounterOpts{ + Name: "host_redirect_total", + Help: "Number of requests redirected due to host header mismatch", + Namespace: "grafana", + }) +) + func ValidateHostHeader(cfg *setting.Cfg) web.Handler { return func(c *contextmodel.ReqContext) { // ignore local render calls @@ -21,6 +32,8 @@ func ValidateHostHeader(cfg *setting.Cfg) web.Handler { } if !strings.EqualFold(h, cfg.Domain) { + hostRedirectCounter.Inc() + c.Logger.Info("Enforcing Host header", "hosted", c.Req.Host, "expected", cfg.Domain) c.Redirect(strings.TrimSuffix(cfg.AppURL, "/")+c.Req.RequestURI, 301) return }