From 8f373e7d6e8353566d2cb217d5ab0c9a6c6bd953 Mon Sep 17 00:00:00 2001 From: Paul Coignet Date: Fri, 10 Jul 2020 11:27:22 +0200 Subject: [PATCH] Keep both metrics --- agent/http.go | 22 +++++++++++++++++++++- website/pages/docs/agent/telemetry.mdx | 2 +- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/agent/http.go b/agent/http.go index e08d7c533..0778dd583 100644 --- a/agent/http.go +++ b/agent/http.go @@ -233,6 +233,21 @@ func (s *HTTPServer) handler(enableDebug bool) http.Handler { // handleFuncMetrics takes the given pattern and handler and wraps to produce // metrics based on the pattern and request. handleFuncMetrics := func(pattern string, handler http.HandlerFunc) { + // Get the parts of the pattern. We omit any initial empty for the + // leading slash, and put an underscore as a "thing" placeholder if we + // see a trailing slash, which means the part after is parsed. This lets + // us distinguish from things like /v1/query and /v1/query/. + var parts []string + for i, part := range strings.Split(pattern, "/") { + if part == "" { + if i == 0 { + continue + } + part = "_" + } + parts = append(parts, part) + } + // Tranform the pattern to a valid label by replacing the '/' by '_'. // Omit the leading slash. // Distinguish thing like /v1/query from /v1/query/ by having @@ -243,8 +258,13 @@ func (s *HTTPServer) handler(enableDebug bool) http.Handler { wrapper := func(resp http.ResponseWriter, req *http.Request) { start := time.Now() handler(resp, req) + labels := []metrics.Label{{Name: "method", Value: req.Method}, {Name: "path", Value: path_label}} - metrics.MeasureSinceWithLabels([]string{"http"}, start, labels) + metrics.MeasureSinceWithLabels([]string{"api", "http"}, start, labels) + + // Duplicated information. Kept for backward compatibility. + key := append([]string{"http", req.Method}, parts...) + metrics.MeasureSince(key, start) } var gzipHandler http.Handler diff --git a/website/pages/docs/agent/telemetry.mdx b/website/pages/docs/agent/telemetry.mdx index 5022aef43..e15bff641 100644 --- a/website/pages/docs/agent/telemetry.mdx +++ b/website/pages/docs/agent/telemetry.mdx @@ -177,7 +177,7 @@ This is a full list of metrics emitted by Consul. | `consul.dns.stale_queries` | This increments when an agent serves a query within the allowed stale threshold. | queries | counter | | `consul.dns.ptr_query.` | This measures the time spent handling a reverse DNS query for the given node. | ms | timer | | `consul.dns.domain_query.` | This measures the time spent handling a domain query for the given node. | ms | timer | -| `consul.http` | This tracks how long it takes to service the given HTTP request for the given verb and path. Paths do not include details like service or key names, for these an underscore will be present as a placeholder (eg. label `path=v1_kv_`) | ms | timer | +| `consul.http` | This tracks how long it takes to service the given HTTP request for the given verb and path. Paths do not include details like service or key names, for these an underscore will be present as a placeholder (eg. label `path=v1_kv_`) | ms | timer | ## Server Health