Skip to content

Commit 759bf8e

Browse files
author
Zeidan, Omar
committed
Add quantiles to request metrics, correct metric postfix
...the new summary collector will expose the metrics with three names: http_server_requests_seconds(_sum|_count)?, making the former counter metric redundant and making the metric names more consistent with conventions. Leaving in a "legacy" metric collector to avoid breaking existing monitoring and alerting setups that depend on the metric with postfix "_sum_sum".
1 parent 87d35ed commit 759bf8e

File tree

1 file changed

+17
-14
lines changed

1 file changed

+17
-14
lines changed

web/middleware/requestmetrics/requestmetrics.go

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -11,31 +11,33 @@ import (
1111
)
1212

1313
var (
14-
RequestCounterName = "http_server_requests_seconds_count"
15-
RequestDurationName = "http_server_requests_seconds_sum"
14+
requestSummaryMetricName = "http_server_requests_seconds"
15+
requestSummaryLegacyMetricName = "http_server_requests_seconds_sum"
1616

17-
reqs *prometheus.CounterVec
18-
latency *prometheus.SummaryVec
17+
reqs *prometheus.CounterVec
18+
requestSummaryMetric *prometheus.SummaryVec
19+
requestSummaryLegacyMetric *prometheus.SummaryVec
1920
)
2021

2122
func Setup() {
22-
reqs = prometheus.NewCounterVec(
23-
prometheus.CounterOpts{
24-
Name: RequestCounterName,
25-
Help: "Number of incoming HTTP requests processed, partitioned by status code, method and HTTP path (grouped by patterns).",
23+
requestSummaryMetric = prometheus.NewSummaryVec(
24+
prometheus.SummaryOpts{
25+
Name: requestSummaryMetricName,
26+
Help: "Request counts, durations, accumulated and in quantiles, partitioned by method, \"outcome\", status code, and HTTP path (grouped by patterns).",
27+
Objectives: map[float64]float64{0.5: 0.05, 0.95: 0.01, 0.99: 0.001},
2628
},
2729
[]string{"method", "outcome", "status", "uri"},
2830
)
29-
prometheus.MustRegister(reqs)
3031

31-
latency = prometheus.NewSummaryVec(
32+
requestSummaryLegacyMetric = prometheus.NewSummaryVec(
3233
prometheus.SummaryOpts{
33-
Name: RequestDurationName,
34-
Help: "How long it took to process requests, partitioned by status code, method and HTTP path (grouped by patterns).",
34+
Name: requestSummaryLegacyMetricName,
35+
Help: "(Legacy, replaced by \"http_server_requests_seconds(_sum|_count)?\") Accumulated request durations and counts partitioned by method, \"outcome\", status code, and HTTP path (grouped by patterns).",
3536
},
3637
[]string{"method", "outcome", "status", "uri"},
3738
)
38-
prometheus.MustRegister(latency)
39+
40+
prometheus.MustRegister(requestSummaryMetric)
3941
}
4042

4143
func RecordRequestMetrics(next http.Handler) http.Handler {
@@ -49,7 +51,8 @@ func RecordRequestMetrics(next http.Handler) http.Handler {
4951
routePattern = strings.Replace(routePattern, "/*/", "/", -1)
5052

5153
reqs.WithLabelValues(r.Method, outcome(ww.Status()), fmt.Sprintf("%d", ww.Status()), routePattern).Inc()
52-
latency.WithLabelValues(r.Method, outcome(ww.Status()), fmt.Sprintf("%d", ww.Status()), routePattern).Observe(float64(time.Since(start).Microseconds()) / 1000000)
54+
requestSummaryMetric.WithLabelValues(r.Method, outcome(ww.Status()), fmt.Sprintf("%d", ww.Status()), routePattern).Observe(float64(time.Since(start).Microseconds()) / 1000000)
55+
requestSummaryLegacyMetric.WithLabelValues(r.Method, outcome(ww.Status()), fmt.Sprintf("%d", ww.Status()), routePattern).Observe(float64(time.Since(start).Microseconds()) / 1000000)
5356
}
5457
return http.HandlerFunc(fn)
5558
}

0 commit comments

Comments
 (0)