mirror of
https://github.com/status-im/consul.git
synced 2025-01-13 07:14:37 +00:00
Merge pull request #8877 from hashicorp/mkcp/telemetry/consul.api.http
Add flag for disabling 1.9 metrics backwards compatibility and warnings when set to default
This commit is contained in:
commit
adeabf2399
@ -598,6 +598,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
|
||||
}
|
||||
|
||||
@ -3497,6 +3503,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)
|
||||
}
|
||||
|
||||
|
@ -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,
|
||||
|
@ -629,6 +629,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"`
|
||||
|
@ -122,7 +122,7 @@ func DefaultSource() Source {
|
||||
telemetry = {
|
||||
metrics_prefix = "consul"
|
||||
filter_default = true
|
||||
prefix_filter = [ "-consul.api.http" ]
|
||||
prefix_filter = []
|
||||
}
|
||||
|
||||
`,
|
||||
|
@ -2262,7 +2262,7 @@ func TestBuilder_BuildAndValidate_ConfigFlagsAndEdgecases(t *testing.T) {
|
||||
patch: func(rt *RuntimeConfig) {
|
||||
rt.DataDir = dataDir
|
||||
rt.Telemetry.AllowedPrefixes = []string{"foo"}
|
||||
rt.Telemetry.BlockedPrefixes = []string{"consul.api.http", "bar"}
|
||||
rt.Telemetry.BlockedPrefixes = []string{"bar"}
|
||||
},
|
||||
warns: []string{`Filter rule must begin with either '+' or '-': "nix"`},
|
||||
},
|
||||
@ -5434,7 +5434,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",
|
||||
@ -6119,6 +6120,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"
|
||||
@ -6890,12 +6892,13 @@ func TestFullConfig(t *testing.T) {
|
||||
CirconusCheckTags: "prvO4uBl",
|
||||
CirconusSubmissionInterval: "DolzaflP",
|
||||
CirconusSubmissionURL: "gTcbS93G",
|
||||
DisableCompatOneNine: true,
|
||||
DisableHostname: true,
|
||||
DogstatsdAddr: "0wSndumK",
|
||||
DogstatsdTags: []string{"3N81zSUB", "Xtj8AnXZ"},
|
||||
FilterDefault: true,
|
||||
AllowedPrefixes: []string{"oJotS8XJ"},
|
||||
BlockedPrefixes: []string{"consul.api.http", "cazlEhGn"},
|
||||
BlockedPrefixes: []string{"cazlEhGn"},
|
||||
MetricsPrefix: "ftO6DySn",
|
||||
PrometheusRetentionTime: 15 * time.Second,
|
||||
StatsdAddr: "drce87cy",
|
||||
@ -7589,6 +7592,7 @@ func TestSanitize(t *testing.T) {
|
||||
"CirconusSubmissionInterval": "",
|
||||
"CirconusSubmissionURL": "",
|
||||
"Disable": false,
|
||||
"DisableCompatOneNine": false,
|
||||
"DisableHostname": false,
|
||||
"DogstatsdAddr": "",
|
||||
"DogstatsdTags": [],
|
||||
|
@ -197,14 +197,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
|
||||
|
@ -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)
|
||||
|
@ -141,6 +141,7 @@ This is a full list of metrics emitted by Consul.
|
||||
| ----------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------- | ------- |
|
||||
| `consul.acl.blocked.service.registration` | This increments whenever a deregistration fails for a service (blocked by an ACL) | requests | counter |
|
||||
| `consul.acl.blocked..registration` | This increments whenever a registration fails for an entity (check, node or service) is blocked by an ACL | requests | counter |
|
||||
| `consul.api.http` | Migrated from consul.http.. this samples how long it takes to service the given HTTP request for the given verb and path. Includes labels for `path` and `method`. `path` does not include details like service or key names, for these an underscore will be present as a placeholder (eg. path=`v1.kv._`) | ms | timer |
|
||||
| `consul.client.rpc` | This increments whenever a Consul agent in client mode makes an RPC request to a Consul server. This gives a measure of how much a given agent is loading the Consul servers. Currently, this is only generated by agents in client mode, not Consul servers. | requests | counter |
|
||||
| `consul.client.rpc.exceeded` | This increments whenever a Consul agent in client mode makes an RPC request to a Consul server gets rate limited by that agent's [`limits`](/docs/agent/options#limits) configuration. This gives an indication that there's an abusive application making too many requests on the agent, or that the rate limit needs to be increased. Currently, this only applies to agents in client mode, not Consul servers. | rejected requests | counter |
|
||||
| `consul.client.rpc.failed` | This increments whenever a Consul agent in client mode makes an RPC request to a Consul server and fails. | requests | counter |
|
||||
@ -180,7 +181,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...` | DEPRECATED IN 1.9: 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. `consul.http.GET.v1.kv._`) | ms | timer |
|
||||
|
||||
## Server Health
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user