Skip to content

Commit 5bb0f68

Browse files
Prometheus: Adding Host Label to all metrics (#89)
Issue #88 Adding Host Label to all metrics
1 parent 3020071 commit 5bb0f68

File tree

2 files changed

+15
-12
lines changed

2 files changed

+15
-12
lines changed

prometheus/prometheus.go

+6-6
Original file line numberDiff line numberDiff line change
@@ -76,23 +76,23 @@ var reqDur = &Metric{
7676
ID: "reqDur",
7777
Name: "request_duration_seconds",
7878
Description: "The HTTP request latencies in seconds.",
79-
Args: []string{"code", "method", "url"},
79+
Args: []string{"code", "method", "host", "url"},
8080
Type: "histogram_vec",
8181
Buckets: reqDurBuckets}
8282

8383
var resSz = &Metric{
8484
ID: "resSz",
8585
Name: "response_size_bytes",
8686
Description: "The HTTP response sizes in bytes.",
87-
Args: []string{"code", "method", "url"},
87+
Args: []string{"code", "method", "host", "url"},
8888
Type: "histogram_vec",
8989
Buckets: resSzBuckets}
9090

9191
var reqSz = &Metric{
9292
ID: "reqSz",
9393
Name: "request_size_bytes",
9494
Description: "The HTTP request sizes in bytes.",
95-
Args: []string{"code", "method", "url"},
95+
Args: []string{"code", "method", "host", "url"},
9696
Type: "histogram_vec",
9797
Buckets: reqSzBuckets}
9898

@@ -439,12 +439,12 @@ func (p *Prometheus) HandlerFunc(next echo.HandlerFunc) echo.HandlerFunc {
439439
}
440440

441441
statusStr := strconv.Itoa(status)
442-
p.reqDur.WithLabelValues(statusStr, c.Request().Method, url).Observe(elapsed)
442+
p.reqDur.WithLabelValues(statusStr, c.Request().Method, p.RequestCounterHostLabelMappingFunc(c), url).Observe(elapsed)
443443
p.reqCnt.WithLabelValues(statusStr, c.Request().Method, p.RequestCounterHostLabelMappingFunc(c), url).Inc()
444-
p.reqSz.WithLabelValues(statusStr, c.Request().Method, url).Observe(float64(reqSz))
444+
p.reqSz.WithLabelValues(statusStr, c.Request().Method, p.RequestCounterHostLabelMappingFunc(c), url).Observe(float64(reqSz))
445445

446446
resSz := float64(c.Response().Size)
447-
p.resSz.WithLabelValues(statusStr, c.Request().Method, url).Observe(resSz)
447+
p.resSz.WithLabelValues(statusStr, c.Request().Method, p.RequestCounterHostLabelMappingFunc(c), url).Observe(resSz)
448448

449449
return err
450450
}

prometheus/prometheus_test.go

+9-6
Original file line numberDiff line numberDiff line change
@@ -48,12 +48,14 @@ func TestPrometheus_Buckets(t *testing.T) {
4848

4949
assert.Equal(t, http.StatusOK, rec.Code)
5050
assert.Contains(t, rec.Body.String(), fmt.Sprintf("%s_request_duration_seconds", p.Subsystem))
51-
assert.Regexp(t, "request_duration_seconds.*le=\"0.005\"", rec.Body.String(), "duration should have time bucket (like, 0.005s)")
52-
assert.NotRegexp(t, "request_duration_seconds.*le=\"512000\"", rec.Body.String(), "duration should NOT have a size bucket (like, 512K)")
53-
assert.Regexp(t, "response_size_bytes.*le=\"512000\"", rec.Body.String(), "response size should have a 512K (size) bucket")
54-
assert.NotRegexp(t, "response_size_bytes.*le=\"0.005\"", rec.Body.String(), "response size should NOT have time bucket (like, 0.005s)")
55-
assert.Regexp(t, "request_size_bytes.*le=\"512000\"", rec.Body.String(), "request size should have a 512K (size) bucket")
56-
assert.NotRegexp(t, "request_size_bytes.*le=\"0.005\"", rec.Body.String(), "request should NOT have time bucket (like, 0.005s)")
51+
52+
body := rec.Body.String()
53+
assert.Contains(t, body, `echo_request_duration_seconds_bucket{code="404",host="example.com",method="GET",url="/ping",le="0.005"}`, "duration should have time bucket (like, 0.005s)")
54+
assert.NotContains(t, body, `echo_request_duration_seconds_bucket{code="404",host="example.com",method="GET",url="/ping",le="512000"}`, "duration should NOT have a size bucket (like, 512K)")
55+
assert.Contains(t, body, `echo_request_size_bytes_bucket{code="404",host="example.com",method="GET",url="/ping",le="1024"}`, "request size should have a 1024k (size) bucket")
56+
assert.NotContains(t, body, `echo_request_size_bytes_bucket{code="404",host="example.com",method="GET",url="/ping",le="0.005"}`, "request size should NOT have time bucket (like, 0.005s)")
57+
assert.Contains(t, body, `echo_response_size_bytes_bucket{code="404",host="example.com",method="GET",url="/ping",le="1024"}`, "response size should have a 1024k (size) bucket")
58+
assert.NotContains(t, body, `echo_response_size_bytes_bucket{code="404",host="example.com",method="GET",url="/ping",le="0.005"}`, "response size should NOT have time bucket (like, 0.005s)")
5759

5860
unregister(p)
5961
}
@@ -141,6 +143,7 @@ func TestMetricsGenerated(t *testing.T) {
141143
assert.Equal(t, http.StatusOK, rec.Code)
142144
s := rec.Body.String()
143145
assert.Contains(t, s, `url="/ping"`, "path must be present")
146+
assert.Contains(t, s, `host="example.com"`, "host must be present")
144147

145148
unregister(p)
146149
}

0 commit comments

Comments
 (0)