From f588ec69d4fa03f602d3cbb20abd4188195a7375 Mon Sep 17 00:00:00 2001 From: seremenko-wish <60801091+seremenko-wish@users.noreply.github.com> Date: Wed, 19 May 2021 10:48:14 -0700 Subject: [PATCH] fix: prometheus URL label (#2503) Fixes #2502 --- cmd/server/handler.go | 9 +++- contrib/quickstart/5-min/hydra.yml | 1 - driver/registry.go | 2 +- driver/registry_base.go | 5 ++- go.mod | 2 +- go.sum | 2 + metrics/prometheus/doc.go | 26 ------------ metrics/prometheus/metrics.go | 68 ------------------------------ metrics/prometheus/middleware.go | 31 -------------- x/tls_termination.go | 2 +- 10 files changed, 16 insertions(+), 132 deletions(-) delete mode 100644 metrics/prometheus/doc.go delete mode 100644 metrics/prometheus/metrics.go delete mode 100644 metrics/prometheus/middleware.go diff --git a/cmd/server/handler.go b/cmd/server/handler.go index c7da7e26991..5b5cf093cc1 100644 --- a/cmd/server/handler.go +++ b/cmd/server/handler.go @@ -50,9 +50,9 @@ import ( "github.com/ory/hydra/driver" "github.com/ory/hydra/driver/config" "github.com/ory/hydra/jwk" - "github.com/ory/hydra/metrics/prometheus" "github.com/ory/hydra/oauth2" "github.com/ory/hydra/x" + prometheus "github.com/ory/x/prometheusx" ) var _ = &consent.Handler{} @@ -94,6 +94,8 @@ func RunServeAdmin(cmd *cobra.Command, args []string) { admin, _, adminmw, _ := setup(d, cmd) cert := GetOrCreateTLSCertificate(cmd, d, config.AdminInterface) // we do not want to run this concurrently. + d.PrometheusManager().RegisterRouter(admin.Router) + var wg sync.WaitGroup wg.Add(1) @@ -118,6 +120,8 @@ func RunServePublic(cmd *cobra.Command, args []string) { _, public, _, publicmw := setup(d, cmd) cert := GetOrCreateTLSCertificate(cmd, d, config.PublicInterface) // we do not want to run this concurrently. + d.PrometheusManager().RegisterRouter(public.Router) + var wg sync.WaitGroup wg.Add(1) @@ -140,6 +144,9 @@ func RunServeAll(cmd *cobra.Command, args []string) { admin, public, adminmw, publicmw := setup(d, cmd) + d.PrometheusManager().RegisterRouter(admin.Router) + d.PrometheusManager().RegisterRouter(public.Router) + var wg sync.WaitGroup wg.Add(2) diff --git a/contrib/quickstart/5-min/hydra.yml b/contrib/quickstart/5-min/hydra.yml index df60e1f355e..8d69cc1d243 100644 --- a/contrib/quickstart/5-min/hydra.yml +++ b/contrib/quickstart/5-min/hydra.yml @@ -20,4 +20,3 @@ oidc: - public pairwise: salt: youReallyNeedToChangeThis - diff --git a/driver/registry.go b/driver/registry.go index a5b5ba2a3b1..e27e05ae11a 100644 --- a/driver/registry.go +++ b/driver/registry.go @@ -14,7 +14,7 @@ import ( "github.com/ory/hydra/persistence" - "github.com/ory/hydra/metrics/prometheus" + prometheus "github.com/ory/x/prometheusx" "github.com/ory/x/dbal" "github.com/ory/x/healthx" diff --git a/driver/registry_base.go b/driver/registry_base.go index 8f412b033d8..e1013c76729 100644 --- a/driver/registry_base.go +++ b/driver/registry_base.go @@ -8,6 +8,8 @@ import ( "strings" "time" + prometheus "github.com/ory/x/prometheusx" + "github.com/pkg/errors" "github.com/ory/hydra/x/oauth2cors" @@ -16,7 +18,6 @@ import ( "github.com/prometheus/client_golang/prometheus/promhttp" - "github.com/ory/hydra/metrics/prometheus" "github.com/ory/x/logrusx" "github.com/gorilla/sessions" @@ -442,7 +443,7 @@ func (m *RegistryBase) Tracer(ctx context.Context) *tracing.Tracer { func (m *RegistryBase) PrometheusManager() *prometheus.MetricsManager { if m.pmm == nil { - m.pmm = prometheus.NewMetricsManager(m.buildVersion, m.buildHash, m.buildDate) + m.pmm = prometheus.NewMetricsManager("hydra", m.buildVersion, m.buildHash, m.buildDate) } return m.pmm } diff --git a/go.mod b/go.mod index e2c32cccef3..09423890825 100644 --- a/go.mod +++ b/go.mod @@ -52,7 +52,7 @@ require ( github.com/ory/go-acc v0.2.6 github.com/ory/graceful v0.1.1 github.com/ory/herodot v0.9.3 - github.com/ory/x v0.0.233 + github.com/ory/x v0.0.237 github.com/pborman/uuid v1.2.1 github.com/phayes/freeport v0.0.0-20180830031419-95f893ade6f2 github.com/philhofer/fwd v1.1.1 // indirect diff --git a/go.sum b/go.sum index 5fd6e757159..9f4bc4d5872 100644 --- a/go.sum +++ b/go.sum @@ -1210,6 +1210,8 @@ github.com/ory/x v0.0.205/go.mod h1:A1s4iwmFIppRXZLF3J9GGWeY/HpREVm0Dk5z/787iek= github.com/ory/x v0.0.207/go.mod h1:sBgvUAcmc2lmtOBe5VMcV2vNAlADT4bkFHomG29y7N4= github.com/ory/x v0.0.233 h1:AiBvucFkE054XJ04OnUziM9Ect5nR/NbMe5101EBjVE= github.com/ory/x v0.0.233/go.mod h1:0mSGWLFgcqckIvgexka1GJK/sshYrFFkU7lPajzGTFw= +github.com/ory/x v0.0.237 h1:sFcWr8EcOYrPb30tsWk3BZM7jdzHeBAqaOSHveizmfs= +github.com/ory/x v0.0.237/go.mod h1:KPgNsUzpztH15EZdw5HjurtTe+mXQ34yqMCCTb5BZAc= github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= github.com/parnurzeal/gorequest v0.2.15/go.mod h1:3Kh2QUMJoqw3icWAecsyzkpY7UzRfDhbRdTjtNwNiUE= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= diff --git a/metrics/prometheus/doc.go b/metrics/prometheus/doc.go deleted file mode 100644 index dbdf42d3d3d..00000000000 --- a/metrics/prometheus/doc.go +++ /dev/null @@ -1,26 +0,0 @@ -package prometheus - -// Outputs Prometheus metrics -// -// swagger:route GET /metrics/prometheus admin prometheus -// -// Get Snapshot Metrics from the Hydra Service. -// -// If you're using k8s, you can then add annotations to your deployment like so: -// -// ``` -// metadata: -// annotations: -// prometheus.io/port: "4445" -// prometheus.io/path: "/metrics/prometheus" -// ``` -// -// If the service supports TLS Edge Termination, this endpoint does not require the -// `X-Forwarded-Proto` header to be set. -// -// Produces: -// - plain/text -// -// Responses: -// 200: emptyResponse -func swaggerPublicPrometheus() {} diff --git a/metrics/prometheus/metrics.go b/metrics/prometheus/metrics.go deleted file mode 100644 index 23a4d71f87c..00000000000 --- a/metrics/prometheus/metrics.go +++ /dev/null @@ -1,68 +0,0 @@ -package prometheus - -import "github.com/prometheus/client_golang/prometheus" - -const ( - MetricsPrometheusPath = "/metrics/prometheus" -) - -// Metrics prototypes -// Example: -// Counter *prometheus.CounterVec -// ResponseTime *prometheus.HistogramVec -type Metrics struct { - ResponseTime *prometheus.HistogramVec -} - -// Method for creation new custom Prometheus metrics -// Example: -// pm := &Metrics{ -// Counter: prometheus.NewCounterVec( -// prometheus.CounterOpts{ -// Name: "servicename_requests_total", -// Help: "Description", -// ConstLabels: map[string]string{ -// "version": version, -// "hash": hash, -// "buildTime": buildTime, -// }, -// }, -// []string{"endpoint"}, -// ), -// ResponseTime: prometheus.NewHistogramVec( -// prometheus.HistogramOpts{ -// Name: "servicename_response_time_seconds", -// Help: "Description", -// ConstLabels: map[string]string{ -// "version": version, -// "hash": hash, -// "buildTime": buildTime, -// }, -// }, -// []string{"endpoint"}, -// ), -// } -// prometheus.Register(pm.Counter) -// prometheus.Register(pm.ResponseTime) -func NewMetrics(version, hash, date string) *Metrics { - pm := &Metrics{ - ResponseTime: prometheus.NewHistogramVec( - prometheus.HistogramOpts{ - Name: "hydra_response_time_seconds", - Help: "Description", - ConstLabels: map[string]string{ - "version": version, - "hash": hash, - "buildTime": date, - }, - }, - []string{"endpoint"}, - ), - } - err := prometheus.Register(pm.ResponseTime) - - if err != nil { - panic(err) - } - return pm -} diff --git a/metrics/prometheus/middleware.go b/metrics/prometheus/middleware.go deleted file mode 100644 index 8973dc7cb4a..00000000000 --- a/metrics/prometheus/middleware.go +++ /dev/null @@ -1,31 +0,0 @@ -package prometheus - -import ( - "net/http" - "time" -) - -type MetricsManager struct { - prometheusMetrics *Metrics -} - -func NewMetricsManager(version, hash, buildTime string) *MetricsManager { - return &MetricsManager{ - prometheusMetrics: NewMetrics(version, hash, buildTime), - } -} - -// Main middleware method to collect metrics for Prometheus. -// Example: -// start := time.Now() -// next(rw, r) -// Request counter metric -// pmm.prometheusMetrics.Counter.WithLabelValues(r.URL.Path).Inc() -// Response time metric -// pmm.prometheusMetrics.ResponseTime.WithLabelValues(r.URL.Path).Observe(time.Since(start).Seconds()) -func (pmm *MetricsManager) ServeHTTP(rw http.ResponseWriter, r *http.Request, next http.HandlerFunc) { - start := time.Now() - next(rw, r) - - pmm.prometheusMetrics.ResponseTime.WithLabelValues(r.URL.Path).Observe(time.Since(start).Seconds()) -} diff --git a/x/tls_termination.go b/x/tls_termination.go index 7eb72d428a3..c9ba18b8281 100644 --- a/x/tls_termination.go +++ b/x/tls_termination.go @@ -10,8 +10,8 @@ import ( "github.com/pkg/errors" "github.com/urfave/negroni" - "github.com/ory/hydra/metrics/prometheus" "github.com/ory/x/healthx" + prometheus "github.com/ory/x/prometheusx" "github.com/ory/x/stringsx" )