From 50621fa098423dbe0b0298dbd3a8440b8241fa16 Mon Sep 17 00:00:00 2001 From: Nick Ethier Date: Wed, 24 May 2023 17:01:03 -0400 Subject: [PATCH] agent/config: change disable_host_metrics to enable_host_metrics and default to false unless configured /w cloud integration --- agent/config/builder.go | 4 +++- agent/config/builder_test.go | 19 +++++++++++++++++++ agent/config/config.go | 2 +- agent/config/runtime_test.go | 2 +- .../TestRuntimeConfig_Sanitize.golden | 4 ++-- agent/config/testdata/full-config.hcl | 2 +- agent/config/testdata/full-config.json | 2 +- agent/setup.go | 2 +- lib/telemetry.go | 10 +++++----- .../docs/agent/config/config-files.mdx | 6 +++--- 10 files changed, 37 insertions(+), 16 deletions(-) diff --git a/agent/config/builder.go b/agent/config/builder.go index 845218b018..063771b0f7 100644 --- a/agent/config/builder.go +++ b/agent/config/builder.go @@ -941,7 +941,6 @@ func (b *builder) build() (rt RuntimeConfig, err error) { CirconusCheckTags: stringVal(c.Telemetry.CirconusCheckTags), CirconusSubmissionInterval: stringVal(c.Telemetry.CirconusSubmissionInterval), CirconusSubmissionURL: stringVal(c.Telemetry.CirconusSubmissionURL), - DisableHostMetrics: boolVal(c.Telemetry.DisableHostMetrics), DisableHostname: boolVal(c.Telemetry.DisableHostname), DogstatsdAddr: stringVal(c.Telemetry.DogstatsdAddr), DogstatsdTags: c.Telemetry.DogstatsdTags, @@ -1107,6 +1106,9 @@ func (b *builder) build() (rt RuntimeConfig, err error) { LocalProxyConfigResyncInterval: 30 * time.Second, } + // host metrics are enabled by default if consul is configured with HashiCorp Cloud Platform integration + rt.Telemetry.EnableHostMetrics = boolValWithDefault(c.Telemetry.EnableHostMetrics, rt.IsCloudEnabled()) + rt.TLS, err = b.buildTLSConfig(rt, c.TLS) if err != nil { return RuntimeConfig{}, err diff --git a/agent/config/builder_test.go b/agent/config/builder_test.go index 28d5b2972c..3eb81fdee4 100644 --- a/agent/config/builder_test.go +++ b/agent/config/builder_test.go @@ -556,3 +556,22 @@ func TestBuilder_parsePrefixFilter(t *testing.T) { } }) } + +func TestBuidler_hostMetricsWithCloud(t *testing.T) { + devMode := true + builderOpts := LoadOpts{ + DevMode: &devMode, + DefaultConfig: FileSource{ + Name: "test", + Format: "hcl", + Data: `cloud{ resource_id = "abc" client_id = "abc" client_secret = "abc"}`, + }, + } + + result, err := Load(builderOpts) + require.NoError(t, err) + require.Empty(t, result.Warnings) + cfg := result.RuntimeConfig + require.NotNil(t, cfg) + require.True(t, cfg.Telemetry.EnableHostMetrics) +} diff --git a/agent/config/config.go b/agent/config/config.go index c9098ec78e..e26d6edc4d 100644 --- a/agent/config/config.go +++ b/agent/config/config.go @@ -690,8 +690,8 @@ type Telemetry struct { CirconusCheckTags *string `mapstructure:"circonus_check_tags" json:"circonus_check_tags,omitempty"` CirconusSubmissionInterval *string `mapstructure:"circonus_submission_interval" json:"circonus_submission_interval,omitempty"` CirconusSubmissionURL *string `mapstructure:"circonus_submission_url" json:"circonus_submission_url,omitempty"` - DisableHostMetrics *bool `mapstructure:"disable_host_metrics" json:"disable_host_metrics,omitempty"` DisableHostname *bool `mapstructure:"disable_hostname" json:"disable_hostname,omitempty"` + EnableHostMetrics *bool `mapstructure:"enable_host_metrics" json:"enable_host_metrics,omitempty"` DogstatsdAddr *string `mapstructure:"dogstatsd_addr" json:"dogstatsd_addr,omitempty"` DogstatsdTags []string `mapstructure:"dogstatsd_tags" json:"dogstatsd_tags,omitempty"` RetryFailedConfiguration *bool `mapstructure:"retry_failed_connection" json:"retry_failed_connection,omitempty"` diff --git a/agent/config/runtime_test.go b/agent/config/runtime_test.go index a078107e1e..fa95fbb43b 100644 --- a/agent/config/runtime_test.go +++ b/agent/config/runtime_test.go @@ -6754,7 +6754,7 @@ func TestLoad_FullConfig(t *testing.T) { Expiration: 15 * time.Second, Name: "ftO6DySn", // notice this is the same as the metrics prefix }, - DisableHostMetrics: true, + EnableHostMetrics: true, }, TLS: tlsutil.Config{ InternalRPC: tlsutil.ProtocolConfig{ diff --git a/agent/config/testdata/TestRuntimeConfig_Sanitize.golden b/agent/config/testdata/TestRuntimeConfig_Sanitize.golden index 5ebb8b178e..334f5f8c8f 100644 --- a/agent/config/testdata/TestRuntimeConfig_Sanitize.golden +++ b/agent/config/testdata/TestRuntimeConfig_Sanitize.golden @@ -462,10 +462,10 @@ "CirconusSubmissionInterval": "", "CirconusSubmissionURL": "", "Disable": false, - "DisableHostMetrics": false, "DisableHostname": false, "DogstatsdAddr": "", "DogstatsdTags": [], + "EnableHostMetrics": false, "FilterDefault": false, "MetricsPrefix": "", "PrometheusOpts": { @@ -511,4 +511,4 @@ "VersionPrerelease": "", "Watches": [], "XDSUpdateRateLimit": 0 -} +} \ No newline at end of file diff --git a/agent/config/testdata/full-config.hcl b/agent/config/testdata/full-config.hcl index 912f5dfe70..660e103608 100644 --- a/agent/config/testdata/full-config.hcl +++ b/agent/config/testdata/full-config.hcl @@ -690,7 +690,7 @@ telemetry { circonus_check_tags = "prvO4uBl" circonus_submission_interval = "DolzaflP" circonus_submission_url = "gTcbS93G" - disable_host_metrics = true + enable_host_metrics = true disable_hostname = true dogstatsd_addr = "0wSndumK" dogstatsd_tags = [ "3N81zSUB","Xtj8AnXZ" ] diff --git a/agent/config/testdata/full-config.json b/agent/config/testdata/full-config.json index 58f2e54acb..52dab37bfa 100644 --- a/agent/config/testdata/full-config.json +++ b/agent/config/testdata/full-config.json @@ -808,7 +808,7 @@ "circonus_check_tags": "prvO4uBl", "circonus_submission_interval": "DolzaflP", "circonus_submission_url": "gTcbS93G", - "disable_host_metrics": true, + "enable_host_metrics": true, "disable_hostname": true, "dogstatsd_addr": "0wSndumK", "dogstatsd_tags": [ diff --git a/agent/setup.go b/agent/setup.go index 1e6dfc9f4a..16d02a2a96 100644 --- a/agent/setup.go +++ b/agent/setup.go @@ -120,7 +120,7 @@ func NewBaseDeps(configLoader ConfigLoader, logOut io.Writer, providedLogger hcl if err != nil { return d, fmt.Errorf("failed to initialize telemetry: %w", err) } - if !cfg.Telemetry.Disable && !cfg.Telemetry.DisableHostMetrics { + if !cfg.Telemetry.Disable && cfg.Telemetry.EnableHostMetrics { ctx, cancel := context.WithCancel(context.Background()) hoststats.NewCollector(ctx, d.Logger, cfg.DataDir) d.stopHostCollector = cancel diff --git a/lib/telemetry.go b/lib/telemetry.go index 9b853169ec..b66ec721b1 100644 --- a/lib/telemetry.go +++ b/lib/telemetry.go @@ -204,17 +204,17 @@ type TelemetryConfig struct { // hcl: telemetry { statsite_address = string } StatsiteAddr string `json:"statsite_address,omitempty" mapstructure:"statsite_address"` + // EnableHostMetrics will enable metrics collected about the host system such as cpu memory and disk usage. + // + // hcl: telemetry { enable_host_metrics = (true|false) } + EnableHostMetrics bool `json:"enable_host_metrics,omitempty" mapstructure:"enable_host_metrics"` + // PrometheusOpts provides configuration for the PrometheusSink. Currently the only configuration // we acquire from hcl is the retention time. We also use definition slices that are set in agent setup // before being passed to InitTelemmetry. // // hcl: telemetry { prometheus_retention_time = "duration" } PrometheusOpts prometheus.PrometheusOpts - - // DisableHostMetrics will disable metrics collected about the host system such as cpu memory and disk usage. - // - // hcl: telemetry { disable_host_metrics = (true|false) } - DisableHostMetrics bool } // MetricsHandler provides an http.Handler for displaying metrics. diff --git a/website/content/docs/agent/config/config-files.mdx b/website/content/docs/agent/config/config-files.mdx index 8e5dd9ed4d..d7ac6923e0 100644 --- a/website/content/docs/agent/config/config-files.mdx +++ b/website/content/docs/agent/config/config-files.mdx @@ -1817,9 +1817,6 @@ subsystem that provides Consul's service mesh capabilities. be used based on **where** this particular instance is running (e.g. a specific geo location or datacenter, dc:sfo). By default, this is left blank and not used. - - `disable_host_metrics` ((#telemetry-disable_host_metrics)) - This disables reporting of host metrics about system resources, defaults to false. - - `disable_hostname` ((#telemetry-disable_hostname)) This controls whether or not to prepend runtime telemetry with the machine's hostname, defaults to false. @@ -1834,6 +1831,9 @@ subsystem that provides Consul's service mesh capabilities. of global tags that will be added to all telemetry packets sent to DogStatsD. It is a list of strings, where each string looks like "my_tag_name:my_tag_value". + - `enable_host_metrics` ((#telemetry-enable_host_metrics)) + This enables reporting of host metrics about system resources, defaults to false. + - `filter_default` ((#telemetry-filter_default)) This controls whether to allow metrics that have not been specified by the filter. Defaults to `true`, which will allow all metrics when no filters are provided.