diff --git a/agent/agent.go b/agent/agent.go index a74eae9ce..511bc3a89 100644 --- a/agent/agent.go +++ b/agent/agent.go @@ -592,6 +592,12 @@ func (a *Agent) Start(ctx context.Context) error { go a.retryJoinWAN() } + // DEPRECATED: Warn users if they're emitting deprecated metrics. Remove this warning and the flagged metrics in a + // future release of Consul. + if !a.config.Telemetry.DisableCompatOneNine { + a.logger.Warn("DEPRECATED Backwards compatibility with pre-1.9 metrics enabled. These metrics will be removed in a future version of Consul. Set `telemetry { disable_compat_1.9 = true }` to disable them.") + } + return nil } @@ -3489,6 +3495,12 @@ func (a *Agent) ReloadConfig() error { // breaking some existing behavior. newCfg.NodeID = a.config.NodeID + // DEPRECATED: Warn users on reload if they're emitting deprecated metrics. Remove this warning and the flagged + // metrics in a future release of Consul. + if !a.config.Telemetry.DisableCompatOneNine { + a.logger.Warn("DEPRECATED Backwards compatibility with pre-1.9 metrics enabled. These metrics will be removed in a future version of Consul. Set `telemetry { disable_compat_1.9 = true }` to disable them.") + } + return a.reloadConfigInternal(newCfg) } diff --git a/agent/config/builder.go b/agent/config/builder.go index 666ff0b65..ffba0a5a6 100644 --- a/agent/config/builder.go +++ b/agent/config/builder.go @@ -936,6 +936,7 @@ func (b *Builder) Build() (rt RuntimeConfig, err error) { CirconusCheckTags: b.stringVal(c.Telemetry.CirconusCheckTags), CirconusSubmissionInterval: b.stringVal(c.Telemetry.CirconusSubmissionInterval), CirconusSubmissionURL: b.stringVal(c.Telemetry.CirconusSubmissionURL), + DisableCompatOneNine: b.boolVal(c.Telemetry.DisableCompatOneNine), DisableHostname: b.boolVal(c.Telemetry.DisableHostname), DogstatsdAddr: b.stringVal(c.Telemetry.DogstatsdAddr), DogstatsdTags: c.Telemetry.DogstatsdTags, diff --git a/agent/config/config.go b/agent/config/config.go index b66bcd0d8..7aca0cdf0 100644 --- a/agent/config/config.go +++ b/agent/config/config.go @@ -628,6 +628,7 @@ type Telemetry struct { CirconusCheckTags *string `json:"circonus_check_tags,omitempty" hcl:"circonus_check_tags" mapstructure:"circonus_check_tags"` CirconusSubmissionInterval *string `json:"circonus_submission_interval,omitempty" hcl:"circonus_submission_interval" mapstructure:"circonus_submission_interval"` CirconusSubmissionURL *string `json:"circonus_submission_url,omitempty" hcl:"circonus_submission_url" mapstructure:"circonus_submission_url"` + DisableCompatOneNine *bool `json:"disable_compat_1.9,omitempty" hcl:"disable_compat_1.9" mapstructure:"disable_compat_1.9"` DisableHostname *bool `json:"disable_hostname,omitempty" hcl:"disable_hostname" mapstructure:"disable_hostname"` DogstatsdAddr *string `json:"dogstatsd_addr,omitempty" hcl:"dogstatsd_addr" mapstructure:"dogstatsd_addr"` DogstatsdTags []string `json:"dogstatsd_tags,omitempty" hcl:"dogstatsd_tags" mapstructure:"dogstatsd_tags"` diff --git a/agent/config/runtime_test.go b/agent/config/runtime_test.go index a8acf6614..597747718 100644 --- a/agent/config/runtime_test.go +++ b/agent/config/runtime_test.go @@ -5227,7 +5227,8 @@ func TestFullConfig(t *testing.T) { "metrics_prefix": "ftO6DySn", "prometheus_retention_time": "15s", "statsd_address": "drce87cy", - "statsite_address": "HpFwKB8R" + "statsite_address": "HpFwKB8R", + "disable_compat_1.9": true }, "tls_cipher_suites": "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256", "tls_min_version": "pAOWafkR", @@ -5911,6 +5912,7 @@ func TestFullConfig(t *testing.T) { prometheus_retention_time = "15s" statsd_address = "drce87cy" statsite_address = "HpFwKB8R" + disable_compat_1.9 = true } tls_cipher_suites = "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256" tls_min_version = "pAOWafkR" @@ -6681,6 +6683,7 @@ func TestFullConfig(t *testing.T) { CirconusCheckTags: "prvO4uBl", CirconusSubmissionInterval: "DolzaflP", CirconusSubmissionURL: "gTcbS93G", + DisableCompatOneNine: true, DisableHostname: true, DogstatsdAddr: "0wSndumK", DogstatsdTags: []string{"3N81zSUB", "Xtj8AnXZ"}, @@ -7379,6 +7382,7 @@ func TestSanitize(t *testing.T) { "CirconusSubmissionInterval": "", "CirconusSubmissionURL": "", "Disable": false, + "DisableCompatOneNine": false, "DisableHostname": false, "DogstatsdAddr": "", "DogstatsdTags": [], diff --git a/agent/http.go b/agent/http.go index 63cce8eb5..3111734c0 100644 --- a/agent/http.go +++ b/agent/http.go @@ -195,14 +195,15 @@ func (s *HTTPHandlers) handler(enableDebug bool) http.Handler { start := time.Now() handler(resp, req) - // This new metric is disabled by default with the prefix_filter option. - // It will be enabled by default in a future version. labels := []metrics.Label{{Name: "method", Value: req.Method}, {Name: "path", Value: path_label}} metrics.MeasureSinceWithLabels([]string{"api", "http"}, start, labels) - // Duplicated information. Kept for backward compatibility. - key := append([]string{"http", req.Method}, parts...) - metrics.MeasureSince(key, start) + // DEPRECATED Emit pre-1.9 metric as `consul.http...` to maintain backwards compatibility. Enabled by + // default. Users may set `telemetry { disable_compat_1.9 = true }` + if !s.agent.config.Telemetry.DisableCompatOneNine { + key := append([]string{"http", req.Method}, parts...) + metrics.MeasureSince(key, start) + } } var gzipHandler http.Handler diff --git a/lib/telemetry.go b/lib/telemetry.go index 595e6005e..9b3284ea8 100644 --- a/lib/telemetry.go +++ b/lib/telemetry.go @@ -132,6 +132,11 @@ type TelemetryConfig struct { // hcl: telemetry { circonus_submission_url = string } CirconusSubmissionURL string `json:"circonus_submission_url,omitempty" mapstructure:"circonus_submission_url"` + // DisableCompatOneNine is a flag to stop emitting metrics that have been deprecated in version 1.9. + // + // hcl: telemetry { disable_compat_1.9 = (true|false) } + DisableCompatOneNine bool `json:"disable_compat_1.9,omitempty" mapstructure:"disable_compat_1.9"` + // DisableHostname will disable hostname prefixing for all metrics. // // hcl: telemetry { disable_hostname = (true|false)