reverse_proxy: re-add healthy upstreams metric (#6806)
Some checks failed
Tests / test (./cmd/caddy/caddy, ~1.22.3, ubuntu-latest, 0, 1.22, linux) (push) Failing after 1m36s
Tests / test (./cmd/caddy/caddy, ~1.23.0, ubuntu-latest, 0, 1.23, linux) (push) Failing after 1m21s
Tests / test (s390x on IBM Z) (push) Has been skipped
Tests / goreleaser-check (push) Has been skipped
Cross-Build / build (~1.22.3, 1.22, aix) (push) Successful in 1m39s
Cross-Build / build (~1.22.3, 1.22, darwin) (push) Successful in 1m24s
Cross-Build / build (~1.22.3, 1.22, dragonfly) (push) Successful in 1m36s
Cross-Build / build (~1.22.3, 1.22, freebsd) (push) Successful in 1m33s
Cross-Build / build (~1.22.3, 1.22, illumos) (push) Successful in 1m28s
Cross-Build / build (~1.22.3, 1.22, linux) (push) Successful in 1m21s
Cross-Build / build (~1.22.3, 1.22, netbsd) (push) Successful in 1m32s
Cross-Build / build (~1.22.3, 1.22, openbsd) (push) Successful in 1m23s
Cross-Build / build (~1.22.3, 1.22, solaris) (push) Successful in 1m46s
Cross-Build / build (~1.22.3, 1.22, windows) (push) Successful in 1m35s
Cross-Build / build (~1.23.0, 1.23, aix) (push) Successful in 1m14s
Cross-Build / build (~1.23.0, 1.23, darwin) (push) Successful in 1m33s
Cross-Build / build (~1.23.0, 1.23, dragonfly) (push) Successful in 1m15s
Cross-Build / build (~1.23.0, 1.23, freebsd) (push) Successful in 1m21s
Cross-Build / build (~1.23.0, 1.23, illumos) (push) Successful in 1m14s
Cross-Build / build (~1.23.0, 1.23, linux) (push) Successful in 1m20s
Cross-Build / build (~1.23.0, 1.23, netbsd) (push) Successful in 1m16s
Cross-Build / build (~1.23.0, 1.23, openbsd) (push) Successful in 1m32s
Cross-Build / build (~1.23.0, 1.23, solaris) (push) Successful in 1m31s
Cross-Build / build (~1.23.0, 1.23, windows) (push) Successful in 1m30s
Lint / lint (ubuntu-latest, linux) (push) Successful in 2m3s
Lint / govulncheck (push) Failing after 1m17s
Tests / test (./cmd/caddy/caddy, ~1.22.3, macos-14, 0, 1.22, mac) (push) Has been cancelled
Tests / test (./cmd/caddy/caddy, ~1.23.0, macos-14, 0, 1.23, mac) (push) Has been cancelled
Tests / test (./cmd/caddy/caddy.exe, ~1.22.3, windows-latest, True, 1.22, windows) (push) Has been cancelled
Tests / test (./cmd/caddy/caddy.exe, ~1.23.0, windows-latest, True, 1.23, windows) (push) Has been cancelled
Lint / lint (macos-14, mac) (push) Has been cancelled
Lint / lint (windows-latest, windows) (push) Has been cancelled

* reverse_proxy: re-add healthy upstreams metric

Signed-off-by: Mohammed Al Sahaf <msaa1990@gmail.com>

* lint

Signed-off-by: Mohammed Al Sahaf <msaa1990@gmail.com>

---------

Signed-off-by: Mohammed Al Sahaf <msaa1990@gmail.com>
This commit is contained in:
Mohammed Al Sahaf 2025-01-28 00:30:54 +03:00 committed by GitHub
parent d7872c3bfa
commit 904a0fa368
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 13 additions and 11 deletions

View File

@ -2,26 +2,26 @@ package reverseproxy
import ( import (
"runtime/debug" "runtime/debug"
"sync"
"time" "time"
"github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promauto" "github.com/prometheus/client_golang/prometheus/promauto"
"go.uber.org/zap" "go.uber.org/zap"
"go.uber.org/zap/zapcore" "go.uber.org/zap/zapcore"
"github.com/caddyserver/caddy/v2"
) )
var reverseProxyMetrics = struct { var reverseProxyMetrics = struct {
init sync.Once
upstreamsHealthy *prometheus.GaugeVec upstreamsHealthy *prometheus.GaugeVec
logger *zap.Logger logger *zap.Logger
}{} }{}
func initReverseProxyMetrics(handler *Handler) { func initReverseProxyMetrics(handler *Handler, registry *prometheus.Registry) {
const ns, sub = "caddy", "reverse_proxy" const ns, sub = "caddy", "reverse_proxy"
upstreamsLabels := []string{"upstream"} upstreamsLabels := []string{"upstream"}
reverseProxyMetrics.upstreamsHealthy = promauto.NewGaugeVec(prometheus.GaugeOpts{ reverseProxyMetrics.upstreamsHealthy = promauto.With(registry).NewGaugeVec(prometheus.GaugeOpts{
Namespace: ns, Namespace: ns,
Subsystem: sub, Subsystem: sub,
Name: "upstreams_healthy", Name: "upstreams_healthy",
@ -35,17 +35,19 @@ type metricsUpstreamsHealthyUpdater struct {
handler *Handler handler *Handler
} }
func newMetricsUpstreamsHealthyUpdater(handler *Handler) *metricsUpstreamsHealthyUpdater { const upstreamsHealthyMetrics caddy.CtxKey = "reverse_proxy_upstreams_healthy"
reverseProxyMetrics.init.Do(func() {
initReverseProxyMetrics(handler)
})
func newMetricsUpstreamsHealthyUpdater(handler *Handler, ctx caddy.Context) *metricsUpstreamsHealthyUpdater {
if set := ctx.Value(upstreamsHealthyMetrics); set == nil {
initReverseProxyMetrics(handler, ctx.GetMetricsRegistry())
ctx = ctx.WithValue(upstreamsHealthyMetrics, true)
}
reverseProxyMetrics.upstreamsHealthy.Reset() reverseProxyMetrics.upstreamsHealthy.Reset()
return &metricsUpstreamsHealthyUpdater{handler} return &metricsUpstreamsHealthyUpdater{handler}
} }
func (m *metricsUpstreamsHealthyUpdater) Init() { func (m *metricsUpstreamsHealthyUpdater) init() {
go func() { go func() {
defer func() { defer func() {
if err := recover(); err != nil { if err := recover(); err != nil {

View File

@ -382,8 +382,8 @@ func (h *Handler) Provision(ctx caddy.Context) error {
} }
} }
upstreamHealthyUpdater := newMetricsUpstreamsHealthyUpdater(h) upstreamHealthyUpdater := newMetricsUpstreamsHealthyUpdater(h, ctx)
upstreamHealthyUpdater.Init() upstreamHealthyUpdater.init()
return nil return nil
} }