From d62ca995e61271da3f4ed60c25de646677610ea2 Mon Sep 17 00:00:00 2001 From: Saswata Mukherjee Date: Tue, 14 Oct 2025 09:29:13 +0100 Subject: [PATCH] metrics: Add route to expose AM UI Signed-off-by: Saswata Mukherjee --- api/metrics/v1/http.go | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/api/metrics/v1/http.go b/api/metrics/v1/http.go index 243a0fe5e..0a2b0b368 100644 --- a/api/metrics/v1/http.go +++ b/api/metrics/v1/http.go @@ -34,6 +34,7 @@ const ( RulesRoute = "/api/v1/rules" RulesRawRoute = "/api/v1/rules/raw" + AlertmanagerUIRoute = "/am" AlertmanagerAlertsRoute = "/am/api/v2/alerts" AlertmanagerSilencesRoute = "/am/api/v2/silences" ) @@ -478,6 +479,24 @@ func NewHandler(endpoints Endpoints, tlsOptions *tls.UpstreamOptions, opts ...Ha } } + var alertmanagerUIProxy http.Handler + { + middlewares := proxy.Middlewares( + proxy.MiddlewareSetUpstream(endpoints.AlertmanagerEndpoint), + proxy.MiddlewareSetPrefixHeader(), + proxy.MiddlewareLogger(c.logger), + proxy.MiddlewareMetrics(c.registry, prometheus.Labels{"proxy": "metricsv1-am-ui"}), + ) + + t := http.DefaultTransport.(*http.Transport) + t.TLSClientConfig = tlsOptions.NewClientConfig() + + alertmanagerUIProxy = &httputil.ReverseProxy{ + Director: middlewares, + Transport: otelhttp.NewTransport(http.DefaultTransport), + } + } + r.Group(func(r chi.Router) { r.Use(func(handler http.Handler) http.Handler { return server.InjectLabelsCtx( @@ -510,6 +529,22 @@ func NewHandler(endpoints Endpoints, tlsOptions *tls.UpstreamOptions, opts ...Ha )) }) + r.Group(func(r chi.Router) { + r.Use(func(handler http.Handler) http.Handler { + return server.InjectLabelsCtx( + prometheus.Labels{"group": "metricsv1", "handler": "am-ui"}, + handler, + ) + }) + r.Use(c.alertmanagerMiddleware.silenceReadMiddlewares...) + r.Use(server.StripTenantPrefixWithSubRoute("/api/metrics/v1", "/am")) + + r.Method(http.MethodGet, AlertmanagerUIRoute, otelhttp.WithRouteTag( + c.spanRoutePrefix+AlertmanagerUIRoute, + alertmanagerUIProxy, + )) + }) + r.Group(func(r chi.Router) { r.Use(func(handler http.Handler) http.Handler { return server.InjectLabelsCtx(