changed req time elapsed to count on status code sent

This commit is contained in:
yusing 2024-11-07 11:43:49 +08:00
parent 6712e9b109
commit 6be3aef367

View file

@ -98,15 +98,18 @@ type ReverseProxy struct {
type httpMetricLogger struct { type httpMetricLogger struct {
http.ResponseWriter http.ResponseWriter
labels metrics.HTTPRouteMetricLabels timestamp time.Time
labels *metrics.HTTPRouteMetricLabels
} }
// WriteHeader implements http.ResponseWriter. // WriteHeader implements http.ResponseWriter.
func (l *httpMetricLogger) WriteHeader(status int) { func (l *httpMetricLogger) WriteHeader(status int) {
l.ResponseWriter.WriteHeader(status) l.ResponseWriter.WriteHeader(status)
duration := time.Since(l.timestamp)
go func() { go func() {
m := metrics.GetRouteMetrics() m := metrics.GetRouteMetrics()
m.HTTPReqTotal.Inc() m.HTTPReqTotal.Inc()
m.HTTPReqElapsed.With(l.labels).Set(float64(duration.Milliseconds()))
// ignore 1xx // ignore 1xx
switch { switch {
@ -276,11 +279,21 @@ func (p *ReverseProxy) ServeHTTP(rw http.ResponseWriter, req *http.Request) {
func (p *ReverseProxy) handler(rw http.ResponseWriter, req *http.Request) { func (p *ReverseProxy) handler(rw http.ResponseWriter, req *http.Request) {
if common.PrometheusEnabled { if common.PrometheusEnabled {
t := time.Now() t := time.Now()
visitor, _, err := net.SplitHostPort(req.RemoteAddr) var visitor string
if err != nil { if realIP := req.Header.Get("X-Real-IP"); realIP != "" {
visitor = req.RemoteAddr visitor = realIP
} }
lbls := metrics.HTTPRouteMetricLabels{ if fwdIP := req.Header.Get("X-Forwarded-For"); visitor == "" && fwdIP != "" {
visitor = fwdIP
}
if visitor == "" {
var err error
visitor, _, err = net.SplitHostPort(req.RemoteAddr)
if err != nil {
visitor = req.RemoteAddr
}
}
lbls := &metrics.HTTPRouteMetricLabels{
Service: p.TargetName, Service: p.TargetName,
Method: req.Method, Method: req.Method,
Host: req.Host, Host: req.Host,
@ -289,12 +302,9 @@ func (p *ReverseProxy) handler(rw http.ResponseWriter, req *http.Request) {
} }
rw = &httpMetricLogger{ rw = &httpMetricLogger{
ResponseWriter: rw, ResponseWriter: rw,
timestamp: t,
labels: lbls, labels: lbls,
} }
defer func() {
duration := time.Since(t)
metrics.GetRouteMetrics().HTTPReqElapsed.With(lbls).Set(float64(duration.Milliseconds()))
}()
} }
transport := p.Transport transport := p.Transport