From 9288670c61546e39afb618dfbde745ac71c5e662 Mon Sep 17 00:00:00 2001 From: Alexander Matyushentsev Date: Sun, 12 Mar 2023 00:41:10 -0800 Subject: [PATCH] feat: expose unprotected metrics endpoint (#1614) Signed-off-by: Alexander Matyushentsev Co-authored-by: Lauris BH Co-authored-by: Anbraten --- cmd/server/flags.go | 6 ++++++ cmd/server/server.go | 9 +++++++++ docs/docs/30-administration/10-server-config.md | 6 ++++++ docs/docs/30-administration/90-prometheus.md | 4 ++++ 4 files changed, 25 insertions(+) diff --git a/cmd/server/flags.go b/cmd/server/flags.go index e447f5427..f61c960cd 100644 --- a/cmd/server/flags.go +++ b/cmd/server/flags.go @@ -77,6 +77,12 @@ var flags = []cli.Flag{ Usage: "grpc address", Value: ":9000", }, + &cli.StringFlag{ + EnvVars: []string{"WOODPECKER_METRICS_SERVER_ADDR"}, + Name: "metrics-server-addr", + Usage: "metrics server address", + Value: "", + }, &cli.StringSliceFlag{ EnvVars: []string{"WOODPECKER_ADMIN"}, Name: "admin", diff --git a/cmd/server/server.go b/cmd/server/server.go index c81a2cb66..236da57eb 100644 --- a/cmd/server/server.go +++ b/cmd/server/server.go @@ -27,6 +27,7 @@ import ( "github.com/caddyserver/certmagic" "github.com/gin-gonic/gin" + "github.com/prometheus/client_golang/prometheus/promhttp" "github.com/rs/zerolog" "github.com/rs/zerolog/log" "github.com/urfave/cli/v2" @@ -258,6 +259,14 @@ func run(c *cli.Context) error { }) } + if metricsServerAddr := c.String("metrics-server-addr"); metricsServerAddr != "" { + g.Go(func() error { + metricsRouter := gin.New() + metricsRouter.GET("/metrics", gin.WrapH(promhttp.Handler())) + return http.ListenAndServe(metricsServerAddr, metricsRouter) + }) + } + log.Info().Msgf("Starting Woodpecker server with version '%s'", version.String()) return g.Wait() diff --git a/docs/docs/30-administration/10-server-config.md b/docs/docs/30-administration/10-server-config.md index 62a183709..d849a5418 100644 --- a/docs/docs/30-administration/10-server-config.md +++ b/docs/docs/30-administration/10-server-config.md @@ -160,6 +160,12 @@ Automatically generates an SSL certificate using Let's Encrypt, and configures t Configures the gRPC listener port. +### `WOODPECKER_METRICS_SERVER_ADDR` +> Default: empty + +Configures an unprotected metrics endpoint. An empty value disables the metrics endpoint completely. + +Example: `:9001` ### `WOODPECKER_ADMIN` > Default: empty diff --git a/docs/docs/30-administration/90-prometheus.md b/docs/docs/30-administration/90-prometheus.md index 8e6e30342..78e009351 100644 --- a/docs/docs/30-administration/90-prometheus.md +++ b/docs/docs/30-administration/90-prometheus.md @@ -30,6 +30,10 @@ scrape_configs: - targets: ['woodpecker.domain.com'] ``` +## Unauthenticated Access + +Alternatively, the unprotected `/metrics` endpoint might be exposed on the internal port. (Port is configurable via the `WOODPECKER_METRICS_SERVER_ADDR` environment variable, e.g. `:9001`.) + ## Metric Reference List of Prometheus metrics specific to Woodpecker: