From 2cf8a796d8ce677fc40b1ce4f7d9ef845c6bf828 Mon Sep 17 00:00:00 2001 From: Moritz Mack Date: Tue, 30 Jan 2024 12:20:18 +0100 Subject: [PATCH 1/3] Deprecate Telemetry / APM legacy settings in favor of the new telemetry.* settings --- .../apm/internal/APMAgentSettings.java | 37 +++++++++++++------ .../apm/internal/APMAgentSettingsTests.java | 11 +++++- 2 files changed, 34 insertions(+), 14 deletions(-) diff --git a/modules/apm/src/main/java/org/elasticsearch/telemetry/apm/internal/APMAgentSettings.java b/modules/apm/src/main/java/org/elasticsearch/telemetry/apm/internal/APMAgentSettings.java index 3eba5bc98aaf5..b8f6e9da126b2 100644 --- a/modules/apm/src/main/java/org/elasticsearch/telemetry/apm/internal/APMAgentSettings.java +++ b/modules/apm/src/main/java/org/elasticsearch/telemetry/apm/internal/APMAgentSettings.java @@ -26,6 +26,7 @@ import java.util.Set; import java.util.function.Function; +import static org.elasticsearch.common.settings.Setting.Property.DeprecatedWarning; import static org.elasticsearch.common.settings.Setting.Property.NodeScope; import static org.elasticsearch.common.settings.Setting.Property.OperatorDynamic; @@ -241,12 +242,14 @@ public void setAgentSetting(String key, String value) { ); /** - * To be deprecated in favor of TELEMETRY_TRACING_NAMES_INCLUDE_SETTING. + * @deprecated in favor of TELEMETRY_TRACING_NAMES_INCLUDE_SETTING. */ + @Deprecated public static final Setting> TRACING_APM_NAMES_INCLUDE_SETTING = Setting.stringListSetting( LEGACY_TRACING_APM_SETTING_PREFIX + "names.include", OperatorDynamic, - NodeScope + NodeScope, + DeprecatedWarning ); public static final Setting> TELEMETRY_TRACING_NAMES_INCLUDE_SETTING = Setting.listSetting( @@ -258,12 +261,14 @@ public void setAgentSetting(String key, String value) { ); /** - * To be deprecated in favor of TELEMETRY_TRACING_NAMES_EXCLUDE_SETTING. + * @deprecated in favor of TELEMETRY_TRACING_NAMES_EXCLUDE_SETTING. */ + @Deprecated public static final Setting> TRACING_APM_NAMES_EXCLUDE_SETTING = Setting.stringListSetting( LEGACY_TRACING_APM_SETTING_PREFIX + "names.exclude", OperatorDynamic, - NodeScope + NodeScope, + DeprecatedWarning ); public static final Setting> TELEMETRY_TRACING_NAMES_EXCLUDE_SETTING = Setting.listSetting( @@ -275,8 +280,9 @@ public void setAgentSetting(String key, String value) { ); /** - * To be deprecated in favor of TELEMETRY_TRACING_SANITIZE_FIELD_NAMES. + * @deprecated in favor of TELEMETRY_TRACING_SANITIZE_FIELD_NAMES. */ + @Deprecated public static final Setting> TRACING_APM_SANITIZE_FIELD_NAMES = Setting.stringListSetting( LEGACY_TRACING_APM_SETTING_PREFIX + "sanitize_field_names", List.of( @@ -294,7 +300,8 @@ public void setAgentSetting(String key, String value) { "set-cookie" ), OperatorDynamic, - NodeScope + NodeScope, + DeprecatedWarning ); public static final Setting> TELEMETRY_TRACING_SANITIZE_FIELD_NAMES = Setting.listSetting( @@ -306,13 +313,15 @@ public void setAgentSetting(String key, String value) { ); /** - * To be deprecated in favor of TELEMETRY_TRACING_ENABLED_SETTING. + * @deprecated in favor of TELEMETRY_TRACING_ENABLED_SETTING. */ + @Deprecated public static final Setting TRACING_APM_ENABLED_SETTING = Setting.boolSetting( LEGACY_TRACING_APM_SETTING_PREFIX + "enabled", false, OperatorDynamic, - NodeScope + NodeScope, + DeprecatedWarning ); public static final Setting TELEMETRY_TRACING_ENABLED_SETTING = Setting.boolSetting( @@ -330,11 +339,13 @@ public void setAgentSetting(String key, String value) { ); /** - * To be deprecated in favor of TELEMETRY_SECRET_TOKEN_SETTING. + * @deprecated in favor of TELEMETRY_SECRET_TOKEN_SETTING. */ + @Deprecated public static final Setting TRACING_APM_SECRET_TOKEN_SETTING = SecureSetting.secureString( LEGACY_TRACING_APM_SETTING_PREFIX + "secret_token", - null + null, + DeprecatedWarning ); public static final Setting TELEMETRY_SECRET_TOKEN_SETTING = SecureSetting.secureString( @@ -343,11 +354,13 @@ public void setAgentSetting(String key, String value) { ); /** - * To be deprecated in favor of TELEMETRY_API_KEY_SETTING. + * @deprecated in favor of TELEMETRY_API_KEY_SETTING. */ + @Deprecated public static final Setting TRACING_APM_API_KEY_SETTING = SecureSetting.secureString( LEGACY_TRACING_APM_SETTING_PREFIX + "api_key", - null + null, + DeprecatedWarning ); public static final Setting TELEMETRY_API_KEY_SETTING = SecureSetting.secureString( diff --git a/modules/apm/src/test/java/org/elasticsearch/telemetry/apm/internal/APMAgentSettingsTests.java b/modules/apm/src/test/java/org/elasticsearch/telemetry/apm/internal/APMAgentSettingsTests.java index 52607a79fe69d..e05df0e742e17 100644 --- a/modules/apm/src/test/java/org/elasticsearch/telemetry/apm/internal/APMAgentSettingsTests.java +++ b/modules/apm/src/test/java/org/elasticsearch/telemetry/apm/internal/APMAgentSettingsTests.java @@ -40,6 +40,7 @@ public void testEnableTracingUsingLegacySetting() { apmAgentSettings.syncAgentSystemProperties(settings); verify(apmAgentSettings).setAgentSetting("recording", "true"); + assertWarnings("[tracing.apm.enabled] setting was deprecated in Elasticsearch and will be removed in a future release."); } /** @@ -59,6 +60,7 @@ public void testDisableTracingUsingLegacySetting() { apmAgentSettings.syncAgentSystemProperties(settings); verify(apmAgentSettings).setAgentSetting("recording", "false"); + assertWarnings("[tracing.apm.enabled] setting was deprecated in Elasticsearch and will be removed in a future release."); } /** @@ -114,6 +116,7 @@ public void testTelemetryTracingNamesIncludeFallback() { List included = APMAgentSettings.TELEMETRY_TRACING_NAMES_INCLUDE_SETTING.get(settings); assertThat(included, containsInAnyOrder("abc", "xyz")); + assertWarnings("[tracing.apm.names.include] setting was deprecated in Elasticsearch and will be removed in a future release."); } public void testTelemetryTracingNamesExcludeFallback() { @@ -122,6 +125,7 @@ public void testTelemetryTracingNamesExcludeFallback() { List included = APMAgentSettings.TELEMETRY_TRACING_NAMES_EXCLUDE_SETTING.get(settings); assertThat(included, containsInAnyOrder("abc", "xyz")); + assertWarnings("[tracing.apm.names.exclude] setting was deprecated in Elasticsearch and will be removed in a future release."); } public void testTelemetryTracingSanitizeFieldNamesFallback() { @@ -130,6 +134,9 @@ public void testTelemetryTracingSanitizeFieldNamesFallback() { List included = APMAgentSettings.TELEMETRY_TRACING_SANITIZE_FIELD_NAMES.get(settings); assertThat(included, containsInAnyOrder("abc", "xyz")); + assertWarnings( + "[tracing.apm.sanitize_field_names] setting was deprecated in Elasticsearch and will be removed in a future release." + ); } public void testTelemetryTracingSanitizeFieldNamesFallbackDefault() { @@ -144,8 +151,8 @@ public void testTelemetrySecretTokenFallback() { try (SecureString secureString = APMAgentSettings.TELEMETRY_SECRET_TOKEN_SETTING.get(settings)) { assertEquals("verysecret", secureString.toString()); - } + assertWarnings("[tracing.apm.secret_token] setting was deprecated in Elasticsearch and will be removed in a future release."); } public void testTelemetryApiKeyFallback() { @@ -155,7 +162,7 @@ public void testTelemetryApiKeyFallback() { try (SecureString secureString = APMAgentSettings.TELEMETRY_API_KEY_SETTING.get(settings)) { assertEquals("abc", secureString.toString()); - } + assertWarnings("[tracing.apm.api_key] setting was deprecated in Elasticsearch and will be removed in a future release."); } } From fc179a8c23aac47f3a59cf73b7515cdd07f7fdc5 Mon Sep 17 00:00:00 2001 From: Moritz Mack Date: Tue, 30 Jan 2024 12:49:34 +0100 Subject: [PATCH 2/3] Deprecate Telemetry / APM legacy agent settings in favor of the new telemetry.agent.* settings --- .../apm/internal/APMAgentSettings.java | 37 +++++++------------ .../apm/internal/APMAgentSettingsTests.java | 11 +++++- 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/modules/apm/src/main/java/org/elasticsearch/telemetry/apm/internal/APMAgentSettings.java b/modules/apm/src/main/java/org/elasticsearch/telemetry/apm/internal/APMAgentSettings.java index b8f6e9da126b2..d7a1c858d2010 100644 --- a/modules/apm/src/main/java/org/elasticsearch/telemetry/apm/internal/APMAgentSettings.java +++ b/modules/apm/src/main/java/org/elasticsearch/telemetry/apm/internal/APMAgentSettings.java @@ -16,6 +16,7 @@ import org.elasticsearch.common.settings.SecureString; import org.elasticsearch.common.settings.Setting; import org.elasticsearch.common.settings.Settings; +import org.elasticsearch.common.util.ArrayUtils; import org.elasticsearch.core.SuppressForbidden; import org.elasticsearch.telemetry.apm.internal.tracing.APMTracer; @@ -225,6 +226,9 @@ public void setAgentSetting(String key, String value) { "span_stack_trace_min_duration" ); + private static final Setting.Property[] SETTING_PROPERTIES = new Setting.Property[] { NodeScope, OperatorDynamic }; + private static final Setting.Property[] DEPRECATED_SETTING_PROPERTIES = ArrayUtils.append(SETTING_PROPERTIES, DeprecatedWarning); + public static final Setting.AffixSetting APM_AGENT_SETTINGS = Setting.prefixKeySetting( TELEMETRY_SETTING_PREFIX + "agent.", LEGACY_TRACING_APM_SETTING_PREFIX + "agent.", @@ -238,7 +242,7 @@ public void setAgentSetting(String key, String value) { throw new IllegalArgumentException("Configuration [" + qualifiedKey + "] is either prohibited or unknown."); } return value; - }, Setting.Property.NodeScope, Setting.Property.OperatorDynamic) + }, qualifiedKey.startsWith(LEGACY_TRACING_APM_SETTING_PREFIX) ? DEPRECATED_SETTING_PROPERTIES : SETTING_PROPERTIES) ); /** @@ -247,17 +251,14 @@ public void setAgentSetting(String key, String value) { @Deprecated public static final Setting> TRACING_APM_NAMES_INCLUDE_SETTING = Setting.stringListSetting( LEGACY_TRACING_APM_SETTING_PREFIX + "names.include", - OperatorDynamic, - NodeScope, - DeprecatedWarning + DEPRECATED_SETTING_PROPERTIES ); public static final Setting> TELEMETRY_TRACING_NAMES_INCLUDE_SETTING = Setting.listSetting( TELEMETRY_SETTING_PREFIX + "tracing.names.include", TRACING_APM_NAMES_INCLUDE_SETTING, Function.identity(), - OperatorDynamic, - NodeScope + SETTING_PROPERTIES ); /** @@ -266,17 +267,14 @@ public void setAgentSetting(String key, String value) { @Deprecated public static final Setting> TRACING_APM_NAMES_EXCLUDE_SETTING = Setting.stringListSetting( LEGACY_TRACING_APM_SETTING_PREFIX + "names.exclude", - OperatorDynamic, - NodeScope, - DeprecatedWarning + DEPRECATED_SETTING_PROPERTIES ); public static final Setting> TELEMETRY_TRACING_NAMES_EXCLUDE_SETTING = Setting.listSetting( TELEMETRY_SETTING_PREFIX + "tracing.names.exclude", TRACING_APM_NAMES_EXCLUDE_SETTING, Function.identity(), - OperatorDynamic, - NodeScope + SETTING_PROPERTIES ); /** @@ -299,17 +297,14 @@ public void setAgentSetting(String key, String value) { "*principal*", "set-cookie" ), - OperatorDynamic, - NodeScope, - DeprecatedWarning + DEPRECATED_SETTING_PROPERTIES ); public static final Setting> TELEMETRY_TRACING_SANITIZE_FIELD_NAMES = Setting.listSetting( TELEMETRY_SETTING_PREFIX + "tracing.sanitize_field_names", TRACING_APM_SANITIZE_FIELD_NAMES, Function.identity(), - OperatorDynamic, - NodeScope + SETTING_PROPERTIES ); /** @@ -319,23 +314,19 @@ public void setAgentSetting(String key, String value) { public static final Setting TRACING_APM_ENABLED_SETTING = Setting.boolSetting( LEGACY_TRACING_APM_SETTING_PREFIX + "enabled", false, - OperatorDynamic, - NodeScope, - DeprecatedWarning + DEPRECATED_SETTING_PROPERTIES ); public static final Setting TELEMETRY_TRACING_ENABLED_SETTING = Setting.boolSetting( TELEMETRY_SETTING_PREFIX + "tracing.enabled", TRACING_APM_ENABLED_SETTING, - OperatorDynamic, - NodeScope + SETTING_PROPERTIES ); public static final Setting TELEMETRY_METRICS_ENABLED_SETTING = Setting.boolSetting( TELEMETRY_SETTING_PREFIX + "metrics.enabled", false, - OperatorDynamic, - NodeScope + SETTING_PROPERTIES ); /** diff --git a/modules/apm/src/test/java/org/elasticsearch/telemetry/apm/internal/APMAgentSettingsTests.java b/modules/apm/src/test/java/org/elasticsearch/telemetry/apm/internal/APMAgentSettingsTests.java index e05df0e742e17..de214311f74a9 100644 --- a/modules/apm/src/test/java/org/elasticsearch/telemetry/apm/internal/APMAgentSettingsTests.java +++ b/modules/apm/src/test/java/org/elasticsearch/telemetry/apm/internal/APMAgentSettingsTests.java @@ -88,6 +88,9 @@ public void testSetAgentsSettingsWithLegacyPrefix() { verify(apmAgentSettings).setAgentSetting("recording", "true"); verify(apmAgentSettings).setAgentSetting("span_compression_enabled", "true"); + assertWarnings( + "[tracing.apm.agent.span_compression_enabled] setting was deprecated in Elasticsearch and will be removed in a future release." + ); } /** @@ -105,8 +108,14 @@ public void testRejectForbiddenOrUnknownAgentSettings() { } // though, accept / ignore nested global_labels for (String prefix : prefixes) { - Settings settings = Settings.builder().put(prefix + "global_labels." + randomAlphaOfLength(5), "123").build(); + Settings settings = Settings.builder().put(prefix + "global_labels.abc", "123").build(); APMAgentSettings.APM_AGENT_SETTINGS.getAsMap(settings); + + if (prefix.startsWith("tracing.apm.agent.")) { + assertWarnings( + "[tracing.apm.agent.global_labels.abc] setting was deprecated in Elasticsearch and will be removed in a future release." + ); + } } } From 53de8628e49afb0305fa17770614233d03b72b2c Mon Sep 17 00:00:00 2001 From: Moritz Mack Date: Fri, 5 Apr 2024 12:25:24 +0200 Subject: [PATCH 3/3] fix props order --- .../apm/internal/APMAgentSettings.java | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/modules/apm/src/main/java/org/elasticsearch/telemetry/apm/internal/APMAgentSettings.java b/modules/apm/src/main/java/org/elasticsearch/telemetry/apm/internal/APMAgentSettings.java index 06b710c6a6735..a6d0b049807b5 100644 --- a/modules/apm/src/main/java/org/elasticsearch/telemetry/apm/internal/APMAgentSettings.java +++ b/modules/apm/src/main/java/org/elasticsearch/telemetry/apm/internal/APMAgentSettings.java @@ -259,8 +259,8 @@ private static Setting concreteAgentSetting(String namespace, String qua @Deprecated public static final Setting> TRACING_APM_NAMES_INCLUDE_SETTING = Setting.stringListSetting( LEGACY_TRACING_APM_SETTING_PREFIX + "names.include", - NodeScope, OperatorDynamic, + NodeScope, DeprecatedWarning ); @@ -268,8 +268,8 @@ private static Setting concreteAgentSetting(String namespace, String qua TELEMETRY_SETTING_PREFIX + "tracing.names.include", TRACING_APM_NAMES_INCLUDE_SETTING, Function.identity(), - NodeScope, - OperatorDynamic + OperatorDynamic, + NodeScope ); /** @@ -278,8 +278,8 @@ private static Setting concreteAgentSetting(String namespace, String qua @Deprecated public static final Setting> TRACING_APM_NAMES_EXCLUDE_SETTING = Setting.stringListSetting( LEGACY_TRACING_APM_SETTING_PREFIX + "names.exclude", - NodeScope, OperatorDynamic, + NodeScope, DeprecatedWarning ); @@ -287,8 +287,8 @@ private static Setting concreteAgentSetting(String namespace, String qua TELEMETRY_SETTING_PREFIX + "tracing.names.exclude", TRACING_APM_NAMES_EXCLUDE_SETTING, Function.identity(), - NodeScope, - OperatorDynamic + OperatorDynamic, + NodeScope ); /** @@ -311,8 +311,8 @@ private static Setting concreteAgentSetting(String namespace, String qua "*principal*", "set-cookie" ), - NodeScope, OperatorDynamic, + NodeScope, DeprecatedWarning ); @@ -320,8 +320,8 @@ private static Setting concreteAgentSetting(String namespace, String qua TELEMETRY_SETTING_PREFIX + "tracing.sanitize_field_names", TRACING_APM_SANITIZE_FIELD_NAMES, Function.identity(), - NodeScope, - OperatorDynamic + OperatorDynamic, + NodeScope ); /** @@ -331,23 +331,23 @@ private static Setting concreteAgentSetting(String namespace, String qua public static final Setting TRACING_APM_ENABLED_SETTING = Setting.boolSetting( LEGACY_TRACING_APM_SETTING_PREFIX + "enabled", false, - NodeScope, OperatorDynamic, + NodeScope, DeprecatedWarning ); public static final Setting TELEMETRY_TRACING_ENABLED_SETTING = Setting.boolSetting( TELEMETRY_SETTING_PREFIX + "tracing.enabled", TRACING_APM_ENABLED_SETTING, - NodeScope, - OperatorDynamic + OperatorDynamic, + NodeScope ); public static final Setting TELEMETRY_METRICS_ENABLED_SETTING = Setting.boolSetting( TELEMETRY_SETTING_PREFIX + "metrics.enabled", false, - NodeScope, - OperatorDynamic + OperatorDynamic, + NodeScope ); /**