From 8efbbf2edd0a0af644ba8f4d46c485c271fe1110 Mon Sep 17 00:00:00 2001 From: Brett McBride Date: Fri, 14 Jun 2024 06:16:52 +0000 Subject: [PATCH 1/6] add exporter retry configuration https://opentelemetry.io/docs/specs/otlp/#otlphttp-throttling and https://opentelemetry.io/docs/specs/otlp/#otlpgrpc-throttling describe how a client SHOULD implement an exponential backoff strategy (with jitter) in case of retryable export failures. The inputs to this strategy are usually the initial delay, and max attempts. --- CHANGELOG.md | 2 ++ examples/kitchen-sink.yaml | 6 ++++++ schema/common.json | 16 ++++++++++++++++ 3 files changed, 24 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 71726fa..6eee139 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ## Unreleased + * Add exporter `retry` configuration. + ## [v0.2.0] - 2024-05-08 * Document time value units in kitchen-sink example. [#51](https://github.com/open-telemetry/opentelemetry-configuration/pull/51) diff --git a/examples/kitchen-sink.yaml b/examples/kitchen-sink.yaml index 1e759ed..f795e27 100644 --- a/examples/kitchen-sink.yaml +++ b/examples/kitchen-sink.yaml @@ -91,6 +91,12 @@ logger_provider: # # Environment variable: OTEL_EXPORTER_OTLP_INSECURE, OTEL_EXPORTER_OTLP_LOGS_INSECURE insecure: false + # Configure retry policy + retry: + # Configure maximum number of retries before failing. + max_attempts: 3 + # Configure initial delay (in milliseconds) to be used for exponential backoff with jitter. + initial_delay: 100 # Configure a simple span processor. - simple: # Configure exporter. diff --git a/schema/common.json b/schema/common.json index 8c488e8..1700a37 100644 --- a/schema/common.json +++ b/schema/common.json @@ -63,6 +63,9 @@ }, "insecure": { "type": "boolean" + }, + "retry": { + "$ref": "#/$defs/Retry" } }, "required": [ @@ -74,6 +77,19 @@ "Console": { "type": "object", "additionalProperties": false + }, + "Retry": { + "type": "object", + "properties": { + "max_attempts": { + "type": "integer", + "minimum": 0 + }, + "initial_delay": { + "type": "integer", + "minimum": 1 + } + } } } } \ No newline at end of file From 9b5da6ec0fe2d4aab2ec2ec5fd986de9ce400570 Mon Sep 17 00:00:00 2001 From: Brett McBride Date: Fri, 14 Jun 2024 06:23:19 +0000 Subject: [PATCH 2/6] update changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6eee139..232a548 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,7 @@ ## Unreleased - * Add exporter `retry` configuration. + * Add exporter `retry` configuration. [#97](https://github.com/open-telemetry/opentelemetry-configuration/pull/97) ## [v0.2.0] - 2024-05-08 From 1c35fd716e6bf5973223e4f6d6a89256fc45922d Mon Sep 17 00:00:00 2001 From: Brett McBride Date: Thu, 27 Jun 2024 05:44:13 +0000 Subject: [PATCH 3/6] add retry to all exporters and examples --- examples/anchors.yaml | 3 +++ examples/kitchen-sink.yaml | 18 ++++++++++++++++++ schema/meter_provider.json | 9 ++++++--- schema/tracer_provider.json | 3 +++ 4 files changed, 30 insertions(+), 3 deletions(-) diff --git a/examples/anchors.yaml b/examples/anchors.yaml index 1a6d3c7..babfcaa 100644 --- a/examples/anchors.yaml +++ b/examples/anchors.yaml @@ -12,6 +12,9 @@ exporters: api-key: !!str 1234 compression: gzip timeout: 10000 + retry: + max_attempts: 3 + initial_delay: 100 logger_provider: processors: diff --git a/examples/kitchen-sink.yaml b/examples/kitchen-sink.yaml index f795e27..5dea18f 100644 --- a/examples/kitchen-sink.yaml +++ b/examples/kitchen-sink.yaml @@ -205,6 +205,12 @@ meter_provider: # # Environment variable: OTEL_EXPORTER_OTLP_INSECURE, OTEL_EXPORTER_OTLP_METRICS_INSECURE insecure: false + # Configure retry policy + retry: + # Configure maximum number of retries before failing. + max_attempts: 3 + # Configure initial delay (in milliseconds) to be used for exponential backoff with jitter. + initial_delay: 100 # Configure temporality preference. # # Environment variable: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE @@ -329,6 +335,12 @@ tracer_provider: # # Environment variable: OTEL_EXPORTER_OTLP_INSECURE, OTEL_EXPORTER_OTLP_TRACES_INSECURE insecure: false + # Configure retry policy + retry: + # Configure maximum number of retries before failing. + max_attempts: 3 + # Configure initial delay (in milliseconds) to be used for exponential backoff with jitter. + initial_delay: 100 # Configure a batch span processor. - batch: # Configure exporter. @@ -345,6 +357,12 @@ tracer_provider: # # Environment variable: OTEL_EXPORTER_ZIPKIN_TIMEOUT timeout: 10000 + # Configure retry policy + retry: + # Configure maximum number of retries before failing. + max_attempts: 3 + # Configure initial delay (in milliseconds) to be used for exponential backoff with jitter. + initial_delay: 100 # Configure a simple span processor. - simple: # Configure exporter. diff --git a/schema/meter_provider.json b/schema/meter_provider.json index 9639a40..c28d491 100644 --- a/schema/meter_provider.json +++ b/schema/meter_provider.json @@ -166,6 +166,12 @@ "type": "integer", "minimum": 0 }, + "insecure": { + "type": "boolean" + }, + "retry": { + "$ref": "common.json#/$defs/Retry" + }, "temporality_preference": { "type": "string" }, @@ -175,9 +181,6 @@ "explicit_bucket_histogram", "base2_exponential_bucket_histogram" ] - }, - "insecure": { - "type": "boolean" } }, "required": [ diff --git a/schema/tracer_provider.json b/schema/tracer_provider.json index 96dfa5c..d5c0c42 100644 --- a/schema/tracer_provider.json +++ b/schema/tracer_provider.json @@ -209,6 +209,9 @@ "timeout": { "type": "integer", "minimum": 0 + }, + "retry": { + "$ref": "common.json#/$defs/Retry" } }, "required": [ From 3cb4d3384da225f6602a6152de5e7aee4001838c Mon Sep 17 00:00:00 2001 From: Brett McBride Date: Tue, 16 Jul 2024 10:25:27 +0000 Subject: [PATCH 4/6] pare back retry config to just the agreed-upon enabled flag --- examples/kitchen-sink.yaml | 24 ++++++++---------------- schema/common.json | 10 +++------- 2 files changed, 11 insertions(+), 23 deletions(-) diff --git a/examples/kitchen-sink.yaml b/examples/kitchen-sink.yaml index d201ebd..5e8e5fd 100644 --- a/examples/kitchen-sink.yaml +++ b/examples/kitchen-sink.yaml @@ -93,10 +93,8 @@ logger_provider: insecure: false # Configure retry policy retry: - # Configure maximum number of retries before failing. - max_attempts: 3 - # Configure initial delay (in milliseconds) to be used for exponential backoff with jitter. - initial_delay: 100 + # Configure retry enabled + enabled: true # Configure a simple span processor. - simple: # Configure exporter. @@ -207,10 +205,8 @@ meter_provider: insecure: false # Configure retry policy retry: - # Configure maximum number of retries before failing. - max_attempts: 3 - # Configure initial delay (in milliseconds) to be used for exponential backoff with jitter. - initial_delay: 100 + # Configure retry enabled + enabled: true # Configure temporality preference. # # Environment variable: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE @@ -337,10 +333,8 @@ tracer_provider: insecure: false # Configure retry policy retry: - # Configure maximum number of retries before failing. - max_attempts: 3 - # Configure initial delay (in milliseconds) to be used for exponential backoff with jitter. - initial_delay: 100 + # Configure retry enabled + enabled: true # Configure a batch span processor. - batch: # Configure exporter. @@ -359,10 +353,8 @@ tracer_provider: timeout: 10000 # Configure retry policy retry: - # Configure maximum number of retries before failing. - max_attempts: 3 - # Configure initial delay (in milliseconds) to be used for exponential backoff with jitter. - initial_delay: 100 + # Configure retry enabled + enabled: true # Configure a simple span processor. - simple: # Configure exporter. diff --git a/schema/common.json b/schema/common.json index 1700a37..bd3c346 100644 --- a/schema/common.json +++ b/schema/common.json @@ -80,14 +80,10 @@ }, "Retry": { "type": "object", + "additionalProperties": true, "properties": { - "max_attempts": { - "type": "integer", - "minimum": 0 - }, - "initial_delay": { - "type": "integer", - "minimum": 1 + "enabled": { + "type": "boolean" } } } From 81e7bb479d47fdc3e17ff8f8e024d71f2eabc96b Mon Sep 17 00:00:00 2001 From: Brett McBride Date: Tue, 16 Jul 2024 10:29:31 +0000 Subject: [PATCH 5/6] dont allow additional properties --- examples/anchors.yaml | 3 +-- schema/common.json | 5 +++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/anchors.yaml b/examples/anchors.yaml index babfcaa..bcb6021 100644 --- a/examples/anchors.yaml +++ b/examples/anchors.yaml @@ -13,8 +13,7 @@ exporters: compression: gzip timeout: 10000 retry: - max_attempts: 3 - initial_delay: 100 + enabled: true logger_provider: processors: diff --git a/schema/common.json b/schema/common.json index bd3c346..1c85ab2 100644 --- a/schema/common.json +++ b/schema/common.json @@ -80,10 +80,11 @@ }, "Retry": { "type": "object", - "additionalProperties": true, + "additionalProperties": false, "properties": { "enabled": { - "type": "boolean" + "type": "boolean", + "default": true } } } From c1ec4f3069a01c084ad43baec401d8a7caa1f2eb Mon Sep 17 00:00:00 2001 From: Brett McBride Date: Tue, 16 Jul 2024 22:37:46 +0000 Subject: [PATCH 6/6] change enabled to disabled --- examples/anchors.yaml | 2 +- examples/kitchen-sink.yaml | 24 ++++++++++++------------ schema/common.json | 4 ++-- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/examples/anchors.yaml b/examples/anchors.yaml index bcb6021..f83e33b 100644 --- a/examples/anchors.yaml +++ b/examples/anchors.yaml @@ -13,7 +13,7 @@ exporters: compression: gzip timeout: 10000 retry: - enabled: true + disabled: false logger_provider: processors: diff --git a/examples/kitchen-sink.yaml b/examples/kitchen-sink.yaml index 5e8e5fd..8f08e24 100644 --- a/examples/kitchen-sink.yaml +++ b/examples/kitchen-sink.yaml @@ -91,10 +91,10 @@ logger_provider: # # Environment variable: OTEL_EXPORTER_OTLP_INSECURE, OTEL_EXPORTER_OTLP_LOGS_INSECURE insecure: false - # Configure retry policy + # Configure retry policy. retry: - # Configure retry enabled - enabled: true + # Configure retry disabled. + disabled: false # Configure a simple span processor. - simple: # Configure exporter. @@ -203,10 +203,10 @@ meter_provider: # # Environment variable: OTEL_EXPORTER_OTLP_INSECURE, OTEL_EXPORTER_OTLP_METRICS_INSECURE insecure: false - # Configure retry policy + # Configure retry policy. retry: - # Configure retry enabled - enabled: true + # Configure retry disabled. + disabled: false # Configure temporality preference. # # Environment variable: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE @@ -331,10 +331,10 @@ tracer_provider: # # Environment variable: OTEL_EXPORTER_OTLP_INSECURE, OTEL_EXPORTER_OTLP_TRACES_INSECURE insecure: false - # Configure retry policy + # Configure retry policy. retry: - # Configure retry enabled - enabled: true + # Configure retry disabled. + disabled: false # Configure a batch span processor. - batch: # Configure exporter. @@ -351,10 +351,10 @@ tracer_provider: # # Environment variable: OTEL_EXPORTER_ZIPKIN_TIMEOUT timeout: 10000 - # Configure retry policy + # Configure retry policy. retry: - # Configure retry enabled - enabled: true + # Configure retry disabled. + disabled: false # Configure a simple span processor. - simple: # Configure exporter. diff --git a/schema/common.json b/schema/common.json index 1c85ab2..2dbdfda 100644 --- a/schema/common.json +++ b/schema/common.json @@ -82,9 +82,9 @@ "type": "object", "additionalProperties": false, "properties": { - "enabled": { + "disabled": { "type": "boolean", - "default": true + "default": false } } }