diff --git a/cmd/pprof_production.go b/cmd/pprof_production.go index 493fd06..8dbf53a 100644 --- a/cmd/pprof_production.go +++ b/cmd/pprof_production.go @@ -1,4 +1,4 @@ -//go:build production +//go:build !pprof package main diff --git a/go.mod b/go.mod index 75b50ff..729ba4b 100644 --- a/go.mod +++ b/go.mod @@ -13,7 +13,6 @@ require ( github.com/gobwas/glob v0.2.3 // glob matcher for route rules github.com/gotify/server/v2 v2.6.1 // reference the Message struct for json response github.com/lithammer/fuzzysearch v1.1.8 // fuzzy search for searching icons and filtering metrics - github.com/prometheus/client_golang v1.22.0 // metrics github.com/puzpuzpuz/xsync/v3 v3.5.1 // lock free map for concurrent operations github.com/rs/zerolog v1.34.0 // logging github.com/shirou/gopsutil/v4 v4.25.3 // system info metrics @@ -45,11 +44,9 @@ replace github.com/docker/docker => github.com/godoxy-app/docker v0.0.0-20250418 require ( github.com/Microsoft/go-winio v0.6.2 // indirect github.com/andybalholm/cascadia v1.3.3 // indirect - github.com/beorn7/perks v1.0.1 // indirect github.com/buger/goterm v1.0.4 // indirect github.com/bytedance/sonic/loader v0.2.4 // indirect github.com/cenkalti/backoff/v4 v4.3.0 // indirect - github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/cloudflare/cloudflare-go v0.115.0 // indirect github.com/cloudwego/base64x v0.1.5 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect @@ -72,6 +69,7 @@ require ( github.com/gorilla/websocket v1.5.3 // indirect github.com/jinzhu/copier v0.4.0 // indirect github.com/klauspost/cpuid/v2 v2.2.10 // indirect + github.com/kr/pretty v0.3.1 // indirect github.com/leodido/go-urn v1.4.0 // indirect github.com/lufia/plan9stats v0.0.0-20250317134145-8bc96cf8fc35 // indirect github.com/magefile/mage v1.15.0 // indirect @@ -79,7 +77,6 @@ require ( github.com/mattn/go-isatty v0.0.20 // indirect github.com/miekg/dns v1.1.65 // indirect github.com/moby/docker-image-spec v1.3.1 // indirect - github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/nrdcg/porkbun v0.4.0 // indirect github.com/onsi/ginkgo/v2 v2.23.4 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect @@ -88,9 +85,6 @@ require ( github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 // indirect - github.com/prometheus/client_model v0.6.2 // indirect - github.com/prometheus/common v0.63.0 // indirect - github.com/prometheus/procfs v0.16.1 // indirect github.com/quic-go/qpack v0.5.1 // indirect github.com/rogpeppe/go-internal v1.14.1 // indirect github.com/samber/lo v1.49.1 // indirect diff --git a/go.sum b/go.sum index 2480704..19743af 100644 --- a/go.sum +++ b/go.sum @@ -6,8 +6,6 @@ github.com/PuerkitoBio/goquery v1.10.3 h1:pFYcNSqHxBD06Fpj/KsbStFRsgRATgnf3LeXiU github.com/PuerkitoBio/goquery v1.10.3/go.mod h1:tMUX0zDMHXYlAQk6p35XxQMqMweEKB7iK7iLNd4RH4Y= github.com/andybalholm/cascadia v1.3.3 h1:AG2YHrzJIm4BZ19iwJ/DAua6Btl3IwJX+VI4kktS1LM= github.com/andybalholm/cascadia v1.3.3/go.mod h1:xNd9bqTn98Ln4DwST8/nG+H0yuB8Hmgu1YHNnWw0GeA= -github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= -github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/buger/goterm v1.0.4 h1:Z9YvGmOih81P0FbVtEYTFF6YsSgxSUKEhf/f9bTMXbY= github.com/buger/goterm v1.0.4/go.mod h1:HiFWV3xnkolgrBV3mY8m0X0Pumt4zg4QhbdOzQtB8tE= github.com/bytedance/sonic v1.13.2 h1:8/H1FempDZqC4VqjptGo14QQlJx8VdZJegxs6wwfqpQ= @@ -17,8 +15,6 @@ github.com/bytedance/sonic/loader v0.2.4 h1:ZWCw4stuXUsn1/+zQDqeE7JKP+QO47tz7QCN github.com/bytedance/sonic/loader v0.2.4/go.mod h1:N8A3vUdtUebEY2/VQC0MyhYeKUFosQU6FxH2JmUe6VI= github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= -github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= -github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cloudflare/cloudflare-go v0.115.0 h1:84/dxeeXweCc0PN5Cto44iTA8AkG1fyT11yPO5ZB7sM= github.com/cloudflare/cloudflare-go v0.115.0/go.mod h1:Ds6urDwn/TF2uIU24mu7H91xkKP8gSAHxQ44DSZgVmU= github.com/cloudwego/base64x v0.1.5 h1:XPciSp1xaq2VCSt6lF0phncD4koWyULpl5bUxbfCyP4= @@ -29,6 +25,7 @@ github.com/coder/websocket v1.8.13/go.mod h1:LNVeNrXQZfe5qhS9ALED3uA+l5pPqvwXg3C github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I= github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= @@ -72,7 +69,6 @@ github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJn github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= github.com/go-playground/validator/v10 v10.26.0 h1:SP05Nqhjcvz81uJaRfEV0YBSSSGMc/iMaVtFbr3Sw2k= github.com/go-playground/validator/v10 v10.26.0/go.mod h1:I5QpIEbmr8On7W0TktmJAumgzX4CA1XNl4ZmDuVHKKo= -github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= github.com/go-test/deep v1.0.8 h1:TDsG77qcSprGbC6vTN8OuXp5g+J+b5Pcguhf7Zt61VM= @@ -126,8 +122,6 @@ github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= -github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ= github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI= github.com/lithammer/fuzzysearch v1.1.8 h1:/HIuJnjHuXS8bKaiTMeeDlW2/AyIWk2brx1V8LFgLN4= @@ -159,8 +153,6 @@ github.com/moby/term v0.5.2 h1:6qk3FJAFDs6i/q3W/pQ97SX192qKfZgGjCQqfCJkgzQ= github.com/moby/term v0.5.2/go.mod h1:d3djjFCrjnB+fl8NJux+EJzu0msscUP+f8it8hPkFLc= github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= -github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= -github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/nrdcg/porkbun v0.4.0 h1:rWweKlwo1PToQ3H+tEO9gPRW0wzzgmI/Ob3n2Guticw= github.com/nrdcg/porkbun v0.4.0/go.mod h1:/QMskrHEIM0IhC/wY7iTCUgINsxdT2WcOphktJ9+Q54= github.com/onsi/ginkgo/v2 v2.23.4 h1:ktYTpKJAVZnDT4VjxSbiBenUjmlL/5QkBEocaWXiQus= @@ -175,6 +167,7 @@ github.com/ovh/go-ovh v1.7.0 h1:V14nF7FwDjQrZt9g7jzcvAAQ3HN6DNShRFRMC3jLoPw= github.com/ovh/go-ovh v1.7.0/go.mod h1:cTVDnl94z4tl8pP1uZ/8jlVxntjSIf09bNcQ5TJSC7c= github.com/pierrec/lz4/v4 v4.1.17 h1:kV4Ip+/hUBC+8T6+2EgburRtkE9ef4nbY3f4dFhGjMc= github.com/pierrec/lz4/v4 v4.1.17/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/xattr v0.4.9 h1:5883YPCtkSd8LFbs13nXplj9g9tlrwoJRjgpgMu1/fE= @@ -186,22 +179,13 @@ github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 h1:o4JXh1EVt github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= github.com/prashantv/gostub v1.1.0 h1:BTyx3RfQjRHnUWaGF9oQos79AlQ5k8WNktv7VGvVH4g= github.com/prashantv/gostub v1.1.0/go.mod h1:A5zLQHz7ieHGG7is6LLXLz7I8+3LZzsrV0P1IAHhP5U= -github.com/prometheus/client_golang v1.22.0 h1:rb93p9lokFEsctTys46VnV1kLCDpVZ0a/Y92Vm0Zc6Q= -github.com/prometheus/client_golang v1.22.0/go.mod h1:R7ljNsLXhuQXYZYtw6GAE9AZg8Y7vEW5scdCXrWRXC0= -github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk= -github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE= -github.com/prometheus/common v0.63.0 h1:YR/EIY1o3mEFP/kZCD7iDMnLPlGyuU2Gb3HIcXnA98k= -github.com/prometheus/common v0.63.0/go.mod h1:VVFF/fBIoToEnWRVkYoXEkq3R3paCoxG9PXP74SnV18= -github.com/prometheus/procfs v0.16.1 h1:hZ15bTNuirocR6u0JZ6BAHHmwS1p8B4P6MRqxtzMyRg= -github.com/prometheus/procfs v0.16.1/go.mod h1:teAbpZRB1iIAJYREa1LsoWUXykVXA1KlTmWl8x/U+Is= github.com/puzpuzpuz/xsync/v3 v3.5.1 h1:GJYJZwO6IdxN/IKbneznS6yPkVC+c3zyY/j19c++5Fg= github.com/puzpuzpuz/xsync/v3 v3.5.1/go.mod h1:VjzYrABPabuM4KyBh1Ftq6u8nhwY5tBPKP9jpmh0nnA= github.com/quic-go/qpack v0.5.1 h1:giqksBPnT/HDtZ6VhtFKgoLOWmlyo9Ei6u9PqzIMbhI= github.com/quic-go/qpack v0.5.1/go.mod h1:+PC4XFrEskIVkcLzpEkbLqq1uCoxPhQuvK5rH1ZgaEg= github.com/quic-go/quic-go v0.51.0 h1:K8exxe9zXxeRKxaXxi/GpUqYiTrtdiWP8bo1KFya6Wc= github.com/quic-go/quic-go v0.51.0/go.mod h1:MFlGGpcpJqRAfmYi6NC2cptDPSxRWTOGNuP4wqrWmzQ= -github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= -github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= github.com/rs/xid v1.6.0/go.mod h1:7XoLgs4eV+QndskICGsho+ADou8ySMSjJKDIan90Nz0= diff --git a/internal/api/handler.go b/internal/api/handler.go index 756a320..a340821 100644 --- a/internal/api/handler.go +++ b/internal/api/handler.go @@ -4,15 +4,12 @@ import ( "fmt" "net/http" - "github.com/prometheus/client_golang/prometheus/promhttp" v1 "github.com/yusing/go-proxy/internal/api/v1" "github.com/yusing/go-proxy/internal/api/v1/certapi" "github.com/yusing/go-proxy/internal/api/v1/dockerapi" "github.com/yusing/go-proxy/internal/api/v1/favicon" "github.com/yusing/go-proxy/internal/auth" - "github.com/yusing/go-proxy/internal/common" config "github.com/yusing/go-proxy/internal/config/types" - "github.com/yusing/go-proxy/internal/logging" "github.com/yusing/go-proxy/internal/logging/memlogger" "github.com/yusing/go-proxy/internal/metrics/uptime" "github.com/yusing/go-proxy/internal/net/gphttp/httpheaders" @@ -93,11 +90,6 @@ func NewHandler(cfg config.ConfigInstance) http.Handler { mux.HandleFunc("GET", "/v1/docker/logs/{server}/{container}", dockerapi.Logs, true) mux.HandleFunc("GET", "/v1/docker/containers", dockerapi.Containers, true) - if common.PrometheusEnabled { - mux.Handle("GET /v1/metrics", promhttp.Handler()) - logging.Info().Msg("prometheus metrics enabled") - } - defaultAuth := auth.GetDefaultAuth() if defaultAuth == nil { return mux diff --git a/internal/common/env.go b/internal/common/env.go index 09ddf55..2274676 100644 --- a/internal/common/env.go +++ b/internal/common/env.go @@ -36,8 +36,6 @@ var ( APIHTTPPort, APIHTTPURL = GetAddrEnv("API_ADDR", "127.0.0.1:8888", "http") - PrometheusEnabled = GetEnvBool("PROMETHEUS_ENABLED", false) - APIJWTSecure = GetEnvBool("API_JWT_SECURE", true) APIJWTSecret = decodeJWTKey(GetEnvString("API_JWT_SECRET", "")) APIJWTTokenTTL = GetDurationEnv("API_JWT_TOKEN_TTL", 24*time.Hour) diff --git a/internal/metrics/labels.go b/internal/metrics/labels.go deleted file mode 100644 index 4542689..0000000 --- a/internal/metrics/labels.go +++ /dev/null @@ -1,29 +0,0 @@ -package metrics - -import "github.com/prometheus/client_golang/prometheus" - -type ( - HTTPRouteMetricLabels struct { - Service, Method, Host, Visitor, Path string - } - StreamRouteMetricLabels struct { - Service, Visitor string - } -) - -func (lbl *HTTPRouteMetricLabels) toPromLabels() prometheus.Labels { - return prometheus.Labels{ - "service": lbl.Service, - "method": lbl.Method, - "host": lbl.Host, - "visitor": lbl.Visitor, - "path": lbl.Path, - } -} - -func (lbl *StreamRouteMetricLabels) toPromLabels() prometheus.Labels { - return prometheus.Labels{ - "service": lbl.Service, - "visitor": lbl.Visitor, - } -} diff --git a/internal/metrics/metric.go b/internal/metrics/metric.go deleted file mode 100644 index dc02759..0000000 --- a/internal/metrics/metric.go +++ /dev/null @@ -1,89 +0,0 @@ -package metrics - -import "github.com/prometheus/client_golang/prometheus" - -type ( - Counter struct { - mv *prometheus.CounterVec - collector prometheus.Counter - } - Gauge struct { - mv *prometheus.GaugeVec - collector prometheus.Gauge - } - Labels interface { - toPromLabels() prometheus.Labels - } -) - -func NewCounter(opts prometheus.CounterOpts, labels ...string) *Counter { - m := &Counter{ - mv: prometheus.NewCounterVec(opts, labels), - } - if len(labels) == 0 { - m.collector = m.mv.WithLabelValues() - m.collector.Add(0) - } - prometheus.MustRegister(m) - return m -} - -func NewGauge(opts prometheus.GaugeOpts, labels ...string) *Gauge { - m := &Gauge{ - mv: prometheus.NewGaugeVec(opts, labels), - } - if len(labels) == 0 { - m.collector = m.mv.WithLabelValues() - m.collector.Set(0) - } - prometheus.MustRegister(m) - return m -} - -func (c *Counter) Collect(ch chan<- prometheus.Metric) { - c.mv.Collect(ch) -} - -func (c *Counter) Describe(ch chan<- *prometheus.Desc) { - c.mv.Describe(ch) -} - -func (c *Counter) Inc() { - c.collector.Inc() -} - -func (c *Counter) With(l Labels) *Counter { - return &Counter{mv: c.mv, collector: c.mv.With(l.toPromLabels())} -} - -func (c *Counter) Delete(l Labels) { - c.mv.Delete(l.toPromLabels()) -} - -func (c *Counter) Reset() { - c.mv.Reset() -} - -func (g *Gauge) Collect(ch chan<- prometheus.Metric) { - g.mv.Collect(ch) -} - -func (g *Gauge) Describe(ch chan<- *prometheus.Desc) { - g.mv.Describe(ch) -} - -func (g *Gauge) Set(v float64) { - g.collector.Set(v) -} - -func (g *Gauge) With(l Labels) *Gauge { - return &Gauge{mv: g.mv, collector: g.mv.With(l.toPromLabels())} -} - -func (g *Gauge) Delete(l Labels) { - g.mv.Delete(l.toPromLabels()) -} - -func (g *Gauge) Reset() { - g.mv.Reset() -} diff --git a/internal/metrics/metrics.go b/internal/metrics/metrics.go deleted file mode 100644 index 4cabe2f..0000000 --- a/internal/metrics/metrics.go +++ /dev/null @@ -1,105 +0,0 @@ -package metrics - -import ( - "strings" - - "github.com/prometheus/client_golang/prometheus" - "github.com/yusing/go-proxy/internal/common" -) - -type ( - RouteMetrics struct { - HTTPReqTotal, - HTTP2xx3xx, - HTTP4xx, - HTTP5xx *Counter - HTTPReqElapsed *Gauge - } - - ServiceMetrics struct { - HealthStatus *Gauge - } -) - -var ( - rm RouteMetrics - sm ServiceMetrics -) - -const ( - routerNamespace = "router" - routerHTTPSubsystem = "http" - - serviceNamespace = "service" -) - -func GetRouteMetrics() *RouteMetrics { - return &rm -} - -func GetServiceMetrics() *ServiceMetrics { - return &sm -} - -func (rm *RouteMetrics) UnregisterService(service string) { - lbls := &HTTPRouteMetricLabels{Service: service} - rm.HTTP2xx3xx.Delete(lbls) - rm.HTTP4xx.Delete(lbls) - rm.HTTP5xx.Delete(lbls) - rm.HTTPReqElapsed.Delete(lbls) -} - -func init() { - if !common.PrometheusEnabled { - return - } - initRouteMetrics() - initServiceMetrics() -} - -func initRouteMetrics() { - lbls := []string{"service", "method", "host", "visitor", "path"} - partitionsHelp := ", partitioned by " + strings.Join(lbls, ", ") - rm = RouteMetrics{ - HTTPReqTotal: NewCounter(prometheus.CounterOpts{ - Namespace: routerNamespace, - Subsystem: routerHTTPSubsystem, - Name: "req_total", - Help: "How many requests processed in total", - }), - HTTP2xx3xx: NewCounter(prometheus.CounterOpts{ - Namespace: routerNamespace, - Subsystem: routerHTTPSubsystem, - Name: "req_ok_count", - Help: "How many 2xx-3xx requests processed" + partitionsHelp, - }, lbls...), - HTTP4xx: NewCounter(prometheus.CounterOpts{ - Namespace: routerNamespace, - Subsystem: routerHTTPSubsystem, - Name: "req_4xx_count", - Help: "How many 4xx requests processed" + partitionsHelp, - }, lbls...), - HTTP5xx: NewCounter(prometheus.CounterOpts{ - Namespace: routerNamespace, - Subsystem: routerHTTPSubsystem, - Name: "req_5xx_count", - Help: "How many 5xx requests processed" + partitionsHelp, - }, lbls...), - HTTPReqElapsed: NewGauge(prometheus.GaugeOpts{ - Namespace: routerNamespace, - Subsystem: routerHTTPSubsystem, - Name: "req_elapsed_ms", - Help: "How long it took to process the request and respond a status code" + partitionsHelp, - }, lbls...), - } -} - -func initServiceMetrics() { - sm = ServiceMetrics{ - HealthStatus: NewGauge(prometheus.GaugeOpts{ - Namespace: serviceNamespace, - Name: "health_status", - Help: "The health status of the router by service", - }, "service"), - } -} diff --git a/internal/net/gphttp/middleware/metrics_logger/metrics_logger.go b/internal/net/gphttp/middleware/metrics_logger/metrics_logger.go deleted file mode 100644 index 23a22f4..0000000 --- a/internal/net/gphttp/middleware/metrics_logger/metrics_logger.go +++ /dev/null @@ -1,44 +0,0 @@ -package metricslogger - -import ( - "net" - "net/http" - - "github.com/yusing/go-proxy/internal/metrics" -) - -type MetricsLogger struct { - ServiceName string `json:"service_name"` -} - -func NewMetricsLogger(serviceName string) *MetricsLogger { - return &MetricsLogger{serviceName} -} - -func (m *MetricsLogger) GetHandler(next http.Handler) http.HandlerFunc { - return func(rw http.ResponseWriter, req *http.Request) { - m.ServeHTTP(rw, req, next.ServeHTTP) - } -} - -func (m *MetricsLogger) ServeHTTP(rw http.ResponseWriter, req *http.Request, next http.HandlerFunc) { - visitorIP, _, err := net.SplitHostPort(req.RemoteAddr) - if err != nil { - visitorIP = req.RemoteAddr - } - - // req.RemoteAddr had been modified by middleware (if any) - lbls := &metrics.HTTPRouteMetricLabels{ - Service: m.ServiceName, - Method: req.Method, - Host: req.Host, - Visitor: visitorIP, - Path: req.URL.Path, - } - - next.ServeHTTP(newHTTPMetricLogger(rw, lbls), req) -} - -func (m *MetricsLogger) ResetMetrics() { - metrics.GetRouteMetrics().UnregisterService(m.ServiceName) -} diff --git a/internal/net/gphttp/middleware/metrics_logger/metrics_response_writer.go b/internal/net/gphttp/middleware/metrics_logger/metrics_response_writer.go deleted file mode 100644 index 3f9a689..0000000 --- a/internal/net/gphttp/middleware/metrics_logger/metrics_response_writer.go +++ /dev/null @@ -1,47 +0,0 @@ -package metricslogger - -import ( - "net/http" - "time" - - "github.com/yusing/go-proxy/internal/metrics" -) - -type httpMetricLogger struct { - http.ResponseWriter - timestamp time.Time - labels *metrics.HTTPRouteMetricLabels -} - -// WriteHeader implements http.ResponseWriter. -func (l *httpMetricLogger) WriteHeader(status int) { - l.ResponseWriter.WriteHeader(status) - duration := time.Since(l.timestamp) - go func() { - m := metrics.GetRouteMetrics() - m.HTTPReqTotal.Inc() - m.HTTPReqElapsed.With(l.labels).Set(float64(duration.Milliseconds())) - - // ignore 1xx - switch { - case status >= 500: - m.HTTP5xx.With(l.labels).Inc() - case status >= 400: - m.HTTP4xx.With(l.labels).Inc() - case status >= 200: - m.HTTP2xx3xx.With(l.labels).Inc() - } - }() -} - -func (l *httpMetricLogger) Unwrap() http.ResponseWriter { - return l.ResponseWriter -} - -func newHTTPMetricLogger(w http.ResponseWriter, labels *metrics.HTTPRouteMetricLabels) *httpMetricLogger { - return &httpMetricLogger{ - ResponseWriter: w, - timestamp: time.Now(), - labels: labels, - } -} diff --git a/internal/route/fileserver.go b/internal/route/fileserver.go index f7adde1..216aff5 100644 --- a/internal/route/fileserver.go +++ b/internal/route/fileserver.go @@ -5,12 +5,10 @@ import ( "path" "path/filepath" - "github.com/yusing/go-proxy/internal/common" "github.com/yusing/go-proxy/internal/gperr" gphttp "github.com/yusing/go-proxy/internal/net/gphttp" "github.com/yusing/go-proxy/internal/net/gphttp/accesslog" "github.com/yusing/go-proxy/internal/net/gphttp/middleware" - metricslogger "github.com/yusing/go-proxy/internal/net/gphttp/middleware/metrics_logger" "github.com/yusing/go-proxy/internal/route/routes" "github.com/yusing/go-proxy/internal/task" "github.com/yusing/go-proxy/internal/watcher/health" @@ -91,12 +89,6 @@ func (s *FileServer) Start(parent task.Parent) gperr.Error { } } - if common.PrometheusEnabled { - metricsLogger := metricslogger.NewMetricsLogger(s.Name()) - s.handler = metricsLogger.GetHandler(s.handler) - s.task.OnCancel("reset_metrics", metricsLogger.ResetMetrics) - } - if s.UseHealthCheck() { s.Health = monitor.NewFileServerHealthMonitor(s.HealthCheck, s.Root) if err := s.Health.Start(s.task); err != nil { diff --git a/internal/route/reverse_proxy.go b/internal/route/reverse_proxy.go index 4048957..777b736 100755 --- a/internal/route/reverse_proxy.go +++ b/internal/route/reverse_proxy.go @@ -6,7 +6,6 @@ import ( "github.com/yusing/go-proxy/agent/pkg/agent" "github.com/yusing/go-proxy/agent/pkg/agentproxy" - "github.com/yusing/go-proxy/internal/common" "github.com/yusing/go-proxy/internal/gperr" "github.com/yusing/go-proxy/internal/homepage" "github.com/yusing/go-proxy/internal/idlewatcher" @@ -15,7 +14,6 @@ import ( "github.com/yusing/go-proxy/internal/net/gphttp/loadbalancer" loadbalance "github.com/yusing/go-proxy/internal/net/gphttp/loadbalancer/types" "github.com/yusing/go-proxy/internal/net/gphttp/middleware" - metricslogger "github.com/yusing/go-proxy/internal/net/gphttp/middleware/metrics_logger" "github.com/yusing/go-proxy/internal/net/gphttp/reverseproxy" "github.com/yusing/go-proxy/internal/route/routes" "github.com/yusing/go-proxy/internal/task" @@ -132,12 +130,6 @@ func (r *ReveseProxyRoute) Start(parent task.Parent) gperr.Error { } } - if common.PrometheusEnabled { - metricsLogger := metricslogger.NewMetricsLogger(r.Name()) - r.handler = metricsLogger.GetHandler(r.handler) - r.task.OnCancel("reset_metrics", metricsLogger.ResetMetrics) - } - if r.UseLoadBalance() { r.addToLoadBalancer(parent) } else {