From 10dd138b2e69e8e68c9b60aa452fcb52c7adef9c Mon Sep 17 00:00:00 2001 From: Mike Goldsmith Date: Tue, 19 May 2026 18:04:08 +0100 Subject: [PATCH 1/3] add IdGenerator definition to TracerProvider IdGenerator is a spec-stable SDK extension point. Model it consistently with other SDK extension plugins (Sampler, SpanExporter, SpanProcessor), with a single built-in `random` for the spec-default behavior. Closes #70. Assisted-by: Claude claude-opus-4-7 --- CHANGELOG.md | 3 + language-support-status.md | 20 ++++-- opentelemetry_configuration.json | 28 ++++++++ schema-docs.md | 96 +++++++++++++++++++++++++++ schema/meta_schema_language_cpp.yaml | 6 ++ schema/meta_schema_language_go.yaml | 6 ++ schema/meta_schema_language_java.yaml | 6 ++ schema/meta_schema_language_js.yaml | 6 ++ schema/meta_schema_language_php.yaml | 6 ++ schema/tracer_provider.yaml | 24 +++++++ snippets/IdGenerator_custom.yaml | 12 ++++ 11 files changed, 208 insertions(+), 5 deletions(-) create mode 100644 snippets/IdGenerator_custom.yaml diff --git a/CHANGELOG.md b/CHANGELOG.md index ef721d31..c04d8b58 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,9 @@ * Add development max_export_batch_size configuration to Periodic MetricReader ([#610](https://github.com/open-telemetry/opentelemetry-configuration/pull/610)) +* Add `id_generator` SDK extension plugin to `TracerProvider`, with built-in + `random` mapping to the spec-default random TraceId/SpanId generation + ([#70](https://github.com/open-telemetry/opentelemetry-configuration/issues/70)) ## [v1.0.0] - 2026-02-27 diff --git a/language-support-status.md b/language-support-status.md index 594e31a1..5ef0fe6f 100644 --- a/language-support-status.md +++ b/language-support-status.md @@ -40,6 +40,7 @@ Latest supported file format: `1.0.0` | [`ExporterTemporalityPreference`](schema-docs.md#exportertemporalitypreference) | supported | | * `cumulative`: supported
* `delta`: supported
* `low_memory`: supported
| | [`GrpcTls`](schema-docs.md#grpctls) | supported | | * `ca_file`: supported
* `cert_file`: supported
* `insecure`: supported
* `key_file`: supported
| | [`HttpTls`](schema-docs.md#httptls) | supported | | * `ca_file`: supported
* `cert_file`: supported
* `key_file`: supported
| +| [`IdGenerator`](schema-docs.md#idgenerator) | unknown | | * `random`: unknown
| | [`IncludeExclude`](schema-docs.md#includeexclude) | supported | | * `excluded`: supported
* `included`: supported
| | [`InstrumentType`](schema-docs.md#instrumenttype) | supported | | * `counter`: supported
* `gauge`: supported
* `histogram`: supported
* `observable_counter`: supported
* `observable_gauge`: supported
* `observable_up_down_counter`: supported
* `up_down_counter`: supported
| | [`LastValueAggregation`](schema-docs.md#lastvalueaggregation) | supported | | | @@ -64,6 +65,7 @@ Latest supported file format: `1.0.0` | [`PullMetricExporter`](schema-docs.md#pullmetricexporter) | supported | | * `prometheus/development`: supported
| | [`PullMetricReader`](schema-docs.md#pullmetricreader) | supported | | * `cardinality_limits`: supported
* `exporter`: supported
* `producers`: supported
| | [`PushMetricExporter`](schema-docs.md#pushmetricexporter) | supported | | * `console`: supported
* `otlp_grpc`: supported
* `otlp_http`: supported
* `otlp_file/development`: supported
| +| [`RandomIdGenerator`](schema-docs.md#randomidgenerator) | unknown | | | | [`Resource`](schema-docs.md#resource) | supported | | * `attributes`: supported
* `attributes_list`: supported
* `schema_url`: supported
* `detection/development`: supported
| | [`Sampler`](schema-docs.md#sampler) | supported | | * `always_off`: supported
* `always_on`: supported
* `parent_based`: supported
* `trace_id_ratio_based`: supported
* `composite/development`: supported
* `jaeger_remote/development`: supported
* `probability/development`: supported
| | [`SeverityNumber`](schema-docs.md#severitynumber) | supported | | * `debug`: supported
* `debug2`: supported
* `debug3`: supported
* `debug4`: supported
* `error`: supported
* `error2`: supported
* `error3`: supported
* `error4`: supported
* `fatal`: supported
* `fatal2`: supported
* `fatal3`: supported
* `fatal4`: supported
* `info`: supported
* `info2`: supported
* `info3`: supported
* `info4`: supported
* `trace`: supported
* `trace2`: supported
* `trace3`: supported
* `trace4`: supported
* `warn`: supported
* `warn2`: supported
* `warn3`: supported
* `warn4`: supported
| @@ -77,7 +79,7 @@ Latest supported file format: `1.0.0` | [`TextMapPropagator`](schema-docs.md#textmappropagator) | supported | | * `b3`: supported
* `b3multi`: supported
* `baggage`: supported
* `tracecontext`: supported
| | [`TraceContextPropagator`](schema-docs.md#tracecontextpropagator) | supported | | | | [`TraceIdRatioBasedSampler`](schema-docs.md#traceidratiobasedsampler) | supported | | * `ratio`: supported
| -| [`TracerProvider`](schema-docs.md#tracerprovider) | supported | | * `limits`: supported
* `processors`: supported
* `sampler`: supported
* `tracer_configurator/development`: supported
| +| [`TracerProvider`](schema-docs.md#tracerprovider) | supported | | * `id_generator`: supported
* `limits`: supported
* `processors`: supported
* `sampler`: supported
* `tracer_configurator/development`: supported
| | [`View`](schema-docs.md#view) | supported | | * `selector`: supported
* `stream`: supported
| | [`ViewSelector`](schema-docs.md#viewselector) | supported | | * `instrument_name`: supported
* `instrument_type`: supported
* `meter_name`: supported
* `meter_schema_url`: supported
* `meter_version`: supported
* `unit`: supported
| | [`ViewStream`](schema-docs.md#viewstream) | supported | | * `aggregation`: supported
* `aggregation_cardinality_limit`: supported
* `attribute_keys`: supported
* `description`: supported
* `name`: supported
| @@ -159,6 +161,7 @@ Latest supported file format: `1.0.0` | [`ExporterTemporalityPreference`](schema-docs.md#exportertemporalitypreference) | supported | | * `cumulative`: supported
* `delta`: supported
* `low_memory`: supported
| | [`GrpcTls`](schema-docs.md#grpctls) | supported | | * `ca_file`: supported
* `cert_file`: supported
* `insecure`: supported
* `key_file`: supported
| | [`HttpTls`](schema-docs.md#httptls) | supported | | * `ca_file`: supported
* `cert_file`: supported
* `key_file`: supported
| +| [`IdGenerator`](schema-docs.md#idgenerator) | unknown | | * `random`: unknown
| | [`IncludeExclude`](schema-docs.md#includeexclude) | supported | | * `excluded`: supported
* `included`: supported
| | [`InstrumentType`](schema-docs.md#instrumenttype) | supported | | * `counter`: supported
* `gauge`: supported
* `histogram`: supported
* `observable_counter`: supported
* `observable_gauge`: supported
* `observable_up_down_counter`: supported
* `up_down_counter`: supported
| | [`LastValueAggregation`](schema-docs.md#lastvalueaggregation) | supported | | | @@ -183,6 +186,7 @@ Latest supported file format: `1.0.0` | [`PullMetricExporter`](schema-docs.md#pullmetricexporter) | unknown | | * `prometheus/development`: unknown
| | [`PullMetricReader`](schema-docs.md#pullmetricreader) | unknown | | * `cardinality_limits`: unknown
* `exporter`: unknown
* `producers`: unknown
| | [`PushMetricExporter`](schema-docs.md#pushmetricexporter) | unknown | | * `console`: unknown
* `otlp_grpc`: unknown
* `otlp_http`: unknown
* `otlp_file/development`: unknown
| +| [`RandomIdGenerator`](schema-docs.md#randomidgenerator) | unknown | | | | [`Resource`](schema-docs.md#resource) | unknown | | * `attributes`: unknown
* `attributes_list`: unknown
* `schema_url`: unknown
* `detection/development`: unknown
| | [`Sampler`](schema-docs.md#sampler) | supported | | * `always_off`: supported
* `always_on`: supported
* `parent_based`: supported
* `trace_id_ratio_based`: supported
* `composite/development`: not_implemented
* `jaeger_remote/development`: not_implemented
* `probability/development`: not_implemented
| | [`SeverityNumber`](schema-docs.md#severitynumber) | unknown | | * `debug`: unknown
* `debug2`: unknown
* `debug3`: unknown
* `debug4`: unknown
* `error`: unknown
* `error2`: unknown
* `error3`: unknown
* `error4`: unknown
* `fatal`: unknown
* `fatal2`: unknown
* `fatal3`: unknown
* `fatal4`: unknown
* `info`: unknown
* `info2`: unknown
* `info3`: unknown
* `info4`: unknown
* `trace`: unknown
* `trace2`: unknown
* `trace3`: unknown
* `trace4`: unknown
* `warn`: unknown
* `warn2`: unknown
* `warn3`: unknown
* `warn4`: unknown
| @@ -196,7 +200,7 @@ Latest supported file format: `1.0.0` | [`TextMapPropagator`](schema-docs.md#textmappropagator) | supported | | * `b3`: supported
* `b3multi`: supported
* `baggage`: supported
* `tracecontext`: supported
| | [`TraceContextPropagator`](schema-docs.md#tracecontextpropagator) | supported | | | | [`TraceIdRatioBasedSampler`](schema-docs.md#traceidratiobasedsampler) | supported | | * `ratio`: supported
| -| [`TracerProvider`](schema-docs.md#tracerprovider) | unknown | | * `limits`: unknown
* `processors`: unknown
* `sampler`: unknown
* `tracer_configurator/development`: unknown
| +| [`TracerProvider`](schema-docs.md#tracerprovider) | unknown | | * `id_generator`: unknown
* `limits`: unknown
* `processors`: unknown
* `sampler`: unknown
* `tracer_configurator/development`: unknown
| | [`View`](schema-docs.md#view) | unknown | | * `selector`: unknown
* `stream`: unknown
| | [`ViewSelector`](schema-docs.md#viewselector) | unknown | | * `instrument_name`: unknown
* `instrument_type`: unknown
* `meter_name`: unknown
* `meter_schema_url`: unknown
* `meter_version`: unknown
* `unit`: unknown
| | [`ViewStream`](schema-docs.md#viewstream) | unknown | | * `aggregation`: unknown
* `aggregation_cardinality_limit`: unknown
* `attribute_keys`: unknown
* `description`: unknown
* `name`: unknown
| @@ -278,6 +282,7 @@ Latest supported file format: `1.0.0-rc.3` | [`ExporterTemporalityPreference`](schema-docs.md#exportertemporalitypreference) | supported | | * `cumulative`: supported
* `delta`: supported
* `low_memory`: supported
| | [`GrpcTls`](schema-docs.md#grpctls) | supported | | * `ca_file`: supported
* `cert_file`: supported
* `insecure`: not_implemented
* `key_file`: supported
| | [`HttpTls`](schema-docs.md#httptls) | supported | | * `ca_file`: supported
* `cert_file`: supported
* `key_file`: supported
| +| [`IdGenerator`](schema-docs.md#idgenerator) | unknown | | * `random`: unknown
| | [`IncludeExclude`](schema-docs.md#includeexclude) | supported | | * `excluded`: supported
* `included`: supported
| | [`InstrumentType`](schema-docs.md#instrumenttype) | supported | | * `counter`: supported
* `gauge`: supported
* `histogram`: supported
* `observable_counter`: supported
* `observable_gauge`: supported
* `observable_up_down_counter`: supported
* `up_down_counter`: supported
| | [`LastValueAggregation`](schema-docs.md#lastvalueaggregation) | supported | | | @@ -302,6 +307,7 @@ Latest supported file format: `1.0.0-rc.3` | [`PullMetricExporter`](schema-docs.md#pullmetricexporter) | supported | | * `prometheus/development`: supported
| | [`PullMetricReader`](schema-docs.md#pullmetricreader) | supported | | * `cardinality_limits`: supported
* `exporter`: supported
* `producers`: not_implemented
| | [`PushMetricExporter`](schema-docs.md#pushmetricexporter) | supported | | * `console`: supported
* `otlp_grpc`: supported
* `otlp_http`: supported
* `otlp_file/development`: supported
| +| [`RandomIdGenerator`](schema-docs.md#randomidgenerator) | unknown | | | | [`Resource`](schema-docs.md#resource) | supported | | * `attributes`: supported
* `attributes_list`: supported
* `schema_url`: supported
* `detection/development`: supported
| | [`Sampler`](schema-docs.md#sampler) | supported | | * `always_off`: supported
* `always_on`: supported
* `parent_based`: supported
* `trace_id_ratio_based`: supported
* `composite/development`: supported
* `jaeger_remote/development`: supported
* `probability/development`: supported
| | [`SeverityNumber`](schema-docs.md#severitynumber) | supported | | * `debug`: supported
* `debug2`: supported
* `debug3`: supported
* `debug4`: supported
* `error`: supported
* `error2`: supported
* `error3`: supported
* `error4`: supported
* `fatal`: supported
* `fatal2`: supported
* `fatal3`: supported
* `fatal4`: supported
* `info`: supported
* `info2`: supported
* `info3`: supported
* `info4`: supported
* `trace`: supported
* `trace2`: supported
* `trace3`: supported
* `trace4`: supported
* `warn`: supported
* `warn2`: supported
* `warn3`: supported
* `warn4`: supported
| @@ -315,7 +321,7 @@ Latest supported file format: `1.0.0-rc.3` | [`TextMapPropagator`](schema-docs.md#textmappropagator) | supported | | * `b3`: supported
* `b3multi`: supported
* `baggage`: supported
* `tracecontext`: supported
| | [`TraceContextPropagator`](schema-docs.md#tracecontextpropagator) | supported | | | | [`TraceIdRatioBasedSampler`](schema-docs.md#traceidratiobasedsampler) | supported | | * `ratio`: supported
| -| [`TracerProvider`](schema-docs.md#tracerprovider) | supported | | * `limits`: supported
* `processors`: supported
* `sampler`: supported
* `tracer_configurator/development`: supported
| +| [`TracerProvider`](schema-docs.md#tracerprovider) | supported | | * `id_generator`: supported
* `limits`: supported
* `processors`: supported
* `sampler`: supported
* `tracer_configurator/development`: supported
| | [`View`](schema-docs.md#view) | supported | | * `selector`: supported
* `stream`: supported
| | [`ViewSelector`](schema-docs.md#viewselector) | supported | | * `instrument_name`: supported
* `instrument_type`: supported
* `meter_name`: supported
* `meter_schema_url`: supported
* `meter_version`: supported
* `unit`: supported
| | [`ViewStream`](schema-docs.md#viewstream) | supported | | * `aggregation`: supported
* `aggregation_cardinality_limit`: supported
* `attribute_keys`: supported
* `description`: supported
* `name`: supported
| @@ -397,6 +403,7 @@ Latest supported file format: `1.0.0-rc.3` | [`ExporterTemporalityPreference`](schema-docs.md#exportertemporalitypreference) | unknown | | * `cumulative`: unknown
* `delta`: unknown
* `low_memory`: unknown
| | [`GrpcTls`](schema-docs.md#grpctls) | unknown | | * `ca_file`: unknown
* `cert_file`: unknown
* `insecure`: unknown
* `key_file`: unknown
| | [`HttpTls`](schema-docs.md#httptls) | unknown | | * `ca_file`: unknown
* `cert_file`: unknown
* `key_file`: unknown
| +| [`IdGenerator`](schema-docs.md#idgenerator) | unknown | | * `random`: unknown
| | [`IncludeExclude`](schema-docs.md#includeexclude) | unknown | | * `excluded`: unknown
* `included`: unknown
| | [`InstrumentType`](schema-docs.md#instrumenttype) | unknown | | * `counter`: unknown
* `gauge`: unknown
* `histogram`: unknown
* `observable_counter`: unknown
* `observable_gauge`: unknown
* `observable_up_down_counter`: unknown
* `up_down_counter`: unknown
| | [`LastValueAggregation`](schema-docs.md#lastvalueaggregation) | unknown | | | @@ -421,6 +428,7 @@ Latest supported file format: `1.0.0-rc.3` | [`PullMetricExporter`](schema-docs.md#pullmetricexporter) | unknown | | * `prometheus/development`: unknown
| | [`PullMetricReader`](schema-docs.md#pullmetricreader) | unknown | | * `cardinality_limits`: unknown
* `exporter`: unknown
* `producers`: unknown
| | [`PushMetricExporter`](schema-docs.md#pushmetricexporter) | unknown | | * `console`: unknown
* `otlp_grpc`: unknown
* `otlp_http`: unknown
* `otlp_file/development`: unknown
| +| [`RandomIdGenerator`](schema-docs.md#randomidgenerator) | unknown | | | | [`Resource`](schema-docs.md#resource) | unknown | | * `attributes`: unknown
* `attributes_list`: unknown
* `schema_url`: unknown
* `detection/development`: unknown
| | [`Sampler`](schema-docs.md#sampler) | unknown | | * `always_off`: unknown
* `always_on`: unknown
* `parent_based`: unknown
* `trace_id_ratio_based`: unknown
* `composite/development`: unknown
* `jaeger_remote/development`: unknown
* `probability/development`: unknown
| | [`SeverityNumber`](schema-docs.md#severitynumber) | unknown | | * `debug`: unknown
* `debug2`: unknown
* `debug3`: unknown
* `debug4`: unknown
* `error`: unknown
* `error2`: unknown
* `error3`: unknown
* `error4`: unknown
* `fatal`: unknown
* `fatal2`: unknown
* `fatal3`: unknown
* `fatal4`: unknown
* `info`: unknown
* `info2`: unknown
* `info3`: unknown
* `info4`: unknown
* `trace`: unknown
* `trace2`: unknown
* `trace3`: unknown
* `trace4`: unknown
* `warn`: unknown
* `warn2`: unknown
* `warn3`: unknown
* `warn4`: unknown
| @@ -434,7 +442,7 @@ Latest supported file format: `1.0.0-rc.3` | [`TextMapPropagator`](schema-docs.md#textmappropagator) | unknown | | * `b3`: unknown
* `b3multi`: unknown
* `baggage`: unknown
* `tracecontext`: unknown
| | [`TraceContextPropagator`](schema-docs.md#tracecontextpropagator) | unknown | | | | [`TraceIdRatioBasedSampler`](schema-docs.md#traceidratiobasedsampler) | unknown | | * `ratio`: unknown
| -| [`TracerProvider`](schema-docs.md#tracerprovider) | unknown | | * `limits`: unknown
* `processors`: unknown
* `sampler`: unknown
* `tracer_configurator/development`: unknown
| +| [`TracerProvider`](schema-docs.md#tracerprovider) | unknown | | * `id_generator`: unknown
* `limits`: unknown
* `processors`: unknown
* `sampler`: unknown
* `tracer_configurator/development`: unknown
| | [`View`](schema-docs.md#view) | unknown | | * `selector`: unknown
* `stream`: unknown
| | [`ViewSelector`](schema-docs.md#viewselector) | unknown | | * `instrument_name`: unknown
* `instrument_type`: unknown
* `meter_name`: unknown
* `meter_schema_url`: unknown
* `meter_version`: unknown
* `unit`: unknown
| | [`ViewStream`](schema-docs.md#viewstream) | unknown | | * `aggregation`: unknown
* `aggregation_cardinality_limit`: unknown
* `attribute_keys`: unknown
* `description`: unknown
* `name`: unknown
| @@ -516,6 +524,7 @@ Latest supported file format: `1.0.0-rc.2` | [`ExporterTemporalityPreference`](schema-docs.md#exportertemporalitypreference) | supported | | * `cumulative`: supported
* `delta`: supported
* `low_memory`: supported
| | [`GrpcTls`](schema-docs.md#grpctls) | ignored | | * `ca_file`: ignored
* `cert_file`: ignored
* `insecure`: ignored
* `key_file`: ignored
| | [`HttpTls`](schema-docs.md#httptls) | ignored | | * `ca_file`: ignored
* `cert_file`: ignored
* `key_file`: ignored
| +| [`IdGenerator`](schema-docs.md#idgenerator) | unknown | | * `random`: unknown
| | [`IncludeExclude`](schema-docs.md#includeexclude) | supported | | * `excluded`: supported
* `included`: supported
| | [`InstrumentType`](schema-docs.md#instrumenttype) | supported | | * `counter`: supported
* `gauge`: supported
* `histogram`: supported
* `observable_counter`: supported
* `observable_gauge`: supported
* `observable_up_down_counter`: supported
* `up_down_counter`: supported
| | [`LastValueAggregation`](schema-docs.md#lastvalueaggregation) | ignored | | | @@ -540,6 +549,7 @@ Latest supported file format: `1.0.0-rc.2` | [`PullMetricExporter`](schema-docs.md#pullmetricexporter) | not_implemented | | * `prometheus/development`: not_implemented
| | [`PullMetricReader`](schema-docs.md#pullmetricreader) | not_implemented | | * `cardinality_limits`: not_implemented
* `exporter`: not_implemented
* `producers`: not_implemented
| | [`PushMetricExporter`](schema-docs.md#pushmetricexporter) | supported | | * `console`: supported
* `otlp_grpc`: supported
* `otlp_http`: supported
* `otlp_file/development`: supported
| +| [`RandomIdGenerator`](schema-docs.md#randomidgenerator) | unknown | | | | [`Resource`](schema-docs.md#resource) | supported | | * `attributes`: supported
* `attributes_list`: supported
* `schema_url`: supported
* `detection/development`: supported
| | [`Sampler`](schema-docs.md#sampler) | supported | | * `always_off`: supported
* `always_on`: supported
* `parent_based`: supported
* `trace_id_ratio_based`: supported
* `composite/development`: not_implemented
* `jaeger_remote/development`: not_implemented
* `probability/development`: not_implemented
| | [`SeverityNumber`](schema-docs.md#severitynumber) | supported | | * `debug`: supported
* `debug2`: supported
* `debug3`: supported
* `debug4`: supported
* `error`: supported
* `error2`: supported
* `error3`: supported
* `error4`: supported
* `fatal`: supported
* `fatal2`: supported
* `fatal3`: supported
* `fatal4`: supported
* `info`: supported
* `info2`: supported
* `info3`: supported
* `info4`: supported
* `trace`: supported
* `trace2`: supported
* `trace3`: supported
* `trace4`: supported
* `warn`: supported
* `warn2`: supported
* `warn3`: supported
* `warn4`: supported
| @@ -553,7 +563,7 @@ Latest supported file format: `1.0.0-rc.2` | [`TextMapPropagator`](schema-docs.md#textmappropagator) | supported | | * `b3`: supported
* `b3multi`: supported
* `baggage`: supported
* `tracecontext`: supported
| | [`TraceContextPropagator`](schema-docs.md#tracecontextpropagator) | supported | | | | [`TraceIdRatioBasedSampler`](schema-docs.md#traceidratiobasedsampler) | supported | | * `ratio`: supported
| -| [`TracerProvider`](schema-docs.md#tracerprovider) | supported | | * `limits`: supported
* `processors`: supported
* `sampler`: supported
* `tracer_configurator/development`: supported
| +| [`TracerProvider`](schema-docs.md#tracerprovider) | supported | | * `id_generator`: supported
* `limits`: supported
* `processors`: supported
* `sampler`: supported
* `tracer_configurator/development`: supported
| | [`View`](schema-docs.md#view) | supported | | * `selector`: supported
* `stream`: supported
| | [`ViewSelector`](schema-docs.md#viewselector) | supported | | * `instrument_name`: supported
* `instrument_type`: supported
* `meter_name`: supported
* `meter_schema_url`: supported
* `meter_version`: supported
* `unit`: not_implemented
| | [`ViewStream`](schema-docs.md#viewstream) | supported | `attribute_keys.excluded` is not implemented, only `attribute_keys.included` is supported. | * `aggregation`: ignored
* `aggregation_cardinality_limit`: not_implemented
* `attribute_keys`: supported
* `description`: supported
* `name`: supported
| diff --git a/opentelemetry_configuration.json b/opentelemetry_configuration.json index cc6c2269..64e79e53 100644 --- a/opentelemetry_configuration.json +++ b/opentelemetry_configuration.json @@ -1464,6 +1464,23 @@ } } }, + "IdGenerator": { + "type": "object", + "additionalProperties": { + "type": [ + "object", + "null" + ] + }, + "minProperties": 1, + "maxProperties": 1, + "properties": { + "random": { + "$ref": "#/$defs/RandomIdGenerator", + "description": "Configure the ID generator to randomly generate TraceIds and SpanIds (spec default).\nIf omitted, ignore.\n" + } + } + }, "IncludeExclude": { "type": "object", "additionalProperties": false, @@ -2107,6 +2124,13 @@ } } }, + "RandomIdGenerator": { + "type": [ + "object", + "null" + ], + "additionalProperties": false + }, "Resource": { "type": "object", "additionalProperties": false, @@ -2436,6 +2460,10 @@ "$ref": "#/$defs/Sampler", "description": "Configure the sampler.\nIf omitted, parent based sampler with a root of always_on is used.\n" }, + "id_generator": { + "$ref": "#/$defs/IdGenerator", + "description": "Configure the trace and span ID generator.\nIf omitted, an ID generator which randomly generates TraceIds and SpanIds is used.\n" + }, "tracer_configurator/development": { "$ref": "#/$defs/ExperimentalTracerConfigurator", "description": "Configure tracers.\nIf omitted, all tracers use default values as described in ExperimentalTracerConfig.\n" diff --git a/schema-docs.md b/schema-docs.md index 43220718..247f801c 100644 --- a/schema-docs.md +++ b/schema-docs.md @@ -1314,6 +1314,68 @@ No snippets. } +## IdGenerator + +`IdGenerator` is an [SDK extension plugin](#sdk-extension-plugins). + +| Property | Type | Required? | Default and Null Behavior | Constraints | Description | +|---|---|---|---|---|---| +| `random` | [`RandomIdGenerator`](#randomidgenerator) | `false` | If omitted, ignore. | No constraints. | Configure the ID generator to randomly generate TraceIds and SpanIds (spec default). | + +
+Language support status + +| Property | [cpp](language-support-status.md#cpp) | [go](language-support-status.md#go) | [java](language-support-status.md#java) | [js](language-support-status.md#js) | [php](language-support-status.md#php) | +|---|---|---|---|---|---| +| `random` | unknown | unknown | unknown | unknown | unknown | +
+ +Constraints: + +* `additionalProperties`: `{"type":["object","null"]}` +* `minProperties`: `1` +* `maxProperties`: `1` + +Usages: + +* [`TracerProvider.id_generator`](#tracerprovider) + +Snippets: + +
+Custom + +[Snippet Source File](./snippets/IdGenerator_custom.yaml) +```yaml +# configure a custom ID generator registered via PluginComponentProvider +my_custom_id_generator: + property: value +``` +
+ +
+JSON Schema + +[JSON Schema Source File](./schema/tracer_provider.yaml) +
{
+  "type": "object",
+  "additionalProperties": {
+    "type": [
+      "object",
+      "null"
+    ]
+  },
+  "minProperties": 1,
+  "maxProperties": 1,
+  "properties": {
+    "random": {
+      "$ref": "#/$defs/RandomIdGenerator",
+      "description": "Configure the ID generator to randomly generate TraceIds and SpanIds (spec default).\nIf omitted, ignore.\n"
+    }
+  }
+}
+
+ ## IncludeExclude | Property | Type | Required? | Default and Null Behavior | Constraints | Description | @@ -3053,6 +3115,33 @@ No snippets. } +## RandomIdGenerator + +No properties. + +Constraints: + +* `additionalProperties`: `false` + +Usages: + +* [`IdGenerator.random`](#idgenerator) + +No snippets. + +
+JSON Schema + +[JSON Schema Source File](./schema/tracer_provider.yaml) +
{
+  "type": [
+    "object",
+    "null"
+  ],
+  "additionalProperties": false
+}
+
+ ## Resource | Property | Type | Required? | Default and Null Behavior | Constraints | Description | @@ -4035,6 +4124,7 @@ No snippets. | Property | Type | Required? | Default and Null Behavior | Constraints | Description | |---|---|---|---|---|---| +| `id_generator` | [`IdGenerator`](#idgenerator) | `false` | If omitted, an ID generator which randomly generates TraceIds and SpanIds is used. | No constraints. | Configure the trace and span ID generator.
| | `limits` | [`SpanLimits`](#spanlimits) | `false` | If omitted, default values as described in SpanLimits are used. | No constraints. | Configure span limits. See also attribute_limits. | | `processors` | `array` of [`SpanProcessor`](#spanprocessor) | `true` | Property is required and must be non-null. | * `minItems`: `1`
| Configure span processors. | | `sampler` | [`Sampler`](#sampler) | `false` | If omitted, parent based sampler with a root of always_on is used. | No constraints. | Configure the sampler.
| @@ -4045,6 +4135,7 @@ No snippets. | Property | [cpp](language-support-status.md#cpp) | [go](language-support-status.md#go) | [java](language-support-status.md#java) | [js](language-support-status.md#js) | [php](language-support-status.md#php) | |---|---|---|---|---|---| +| `id_generator` | supported | unknown | supported | unknown | supported | | `limits` | supported | unknown | supported | unknown | supported | | `processors` | supported | unknown | supported | unknown | supported | | `sampler` | supported | unknown | supported | unknown | supported | @@ -4086,6 +4177,10 @@ No snippets. "$ref": "#/$defs/Sampler", "description": "Configure the sampler.\nIf omitted, parent based sampler with a root of always_on is used.\n" }, + "id_generator": { + "$ref": "#/$defs/IdGenerator", + "description": "Configure the trace and span ID generator.\nIf omitted, an ID generator which randomly generates TraceIds and SpanIds is used.\n" + }, "tracer_configurator/development": { "$ref": "#/$defs/ExperimentalTracerConfigurator", "description": "Configure tracers.\nIf omitted, all tracers use default values as described in ExperimentalTracerConfig.\n" @@ -7114,6 +7209,7 @@ Each of the following types support referencing custom interface implementations SDK extension plugin types may have properties defined corresponding to built-in implementations of the interface. For example, the `otlp_http` property of `SpanExporter` defines the OTLP http/protobuf exporter. * [ExperimentalResourceDetector](#ExperimentalResourceDetector) +* [IdGenerator](#IdGenerator) * [LogRecordExporter](#LogRecordExporter) * [LogRecordProcessor](#LogRecordProcessor) * [MetricProducer](#MetricProducer) diff --git a/schema/meta_schema_language_cpp.yaml b/schema/meta_schema_language_cpp.yaml index 252f35a3..05c9c61c 100644 --- a/schema/meta_schema_language_cpp.yaml +++ b/schema/meta_schema_language_cpp.yaml @@ -72,6 +72,9 @@ typeSupportStatuses: - type: HttpTls status: supported propertyOverrides: [] + - type: IdGenerator + status: unknown + propertyOverrides: [] - type: IncludeExclude status: supported propertyOverrides: [] @@ -148,6 +151,9 @@ typeSupportStatuses: - type: PushMetricExporter status: supported propertyOverrides: [] + - type: RandomIdGenerator + status: unknown + propertyOverrides: [] - type: Resource status: supported propertyOverrides: [] diff --git a/schema/meta_schema_language_go.yaml b/schema/meta_schema_language_go.yaml index c2ae5b56..da49efe9 100644 --- a/schema/meta_schema_language_go.yaml +++ b/schema/meta_schema_language_go.yaml @@ -76,6 +76,9 @@ typeSupportStatuses: - type: HttpTls status: supported propertyOverrides: [] + - type: IdGenerator + status: unknown + propertyOverrides: [] - type: IncludeExclude status: supported propertyOverrides: [] @@ -168,6 +171,9 @@ typeSupportStatuses: - type: PushMetricExporter status: unknown propertyOverrides: [] + - type: RandomIdGenerator + status: unknown + propertyOverrides: [] - type: Resource status: unknown propertyOverrides: [] diff --git a/schema/meta_schema_language_java.yaml b/schema/meta_schema_language_java.yaml index bef6aaba..3d90d147 100644 --- a/schema/meta_schema_language_java.yaml +++ b/schema/meta_schema_language_java.yaml @@ -78,6 +78,9 @@ typeSupportStatuses: - type: HttpTls status: supported propertyOverrides: [] + - type: IdGenerator + status: unknown + propertyOverrides: [] - type: IncludeExclude status: supported propertyOverrides: [] @@ -164,6 +167,9 @@ typeSupportStatuses: - type: PushMetricExporter status: supported propertyOverrides: [] + - type: RandomIdGenerator + status: unknown + propertyOverrides: [] - type: Resource status: supported propertyOverrides: [] diff --git a/schema/meta_schema_language_js.yaml b/schema/meta_schema_language_js.yaml index 138aed42..6c4d059f 100644 --- a/schema/meta_schema_language_js.yaml +++ b/schema/meta_schema_language_js.yaml @@ -72,6 +72,9 @@ typeSupportStatuses: - type: HttpTls status: unknown propertyOverrides: [] + - type: IdGenerator + status: unknown + propertyOverrides: [] - type: IncludeExclude status: unknown propertyOverrides: [] @@ -146,6 +149,9 @@ typeSupportStatuses: - type: PushMetricExporter status: unknown propertyOverrides: [] + - type: RandomIdGenerator + status: unknown + propertyOverrides: [] - type: Resource status: unknown propertyOverrides: [] diff --git a/schema/meta_schema_language_php.yaml b/schema/meta_schema_language_php.yaml index 3c12203c..bdea4257 100644 --- a/schema/meta_schema_language_php.yaml +++ b/schema/meta_schema_language_php.yaml @@ -80,6 +80,9 @@ typeSupportStatuses: - type: HttpTls status: ignored propertyOverrides: [] + - type: IdGenerator + status: unknown + propertyOverrides: [] - type: IncludeExclude status: supported propertyOverrides: [] @@ -178,6 +181,9 @@ typeSupportStatuses: - type: PushMetricExporter status: supported propertyOverrides: [] + - type: RandomIdGenerator + status: unknown + propertyOverrides: [] - type: Resource status: supported propertyOverrides: [] diff --git a/schema/tracer_provider.yaml b/schema/tracer_provider.yaml index fd2c97e3..8313817a 100644 --- a/schema/tracer_provider.yaml +++ b/schema/tracer_provider.yaml @@ -16,6 +16,11 @@ properties: description: | Configure the sampler. defaultBehavior: parent based sampler with a root of always_on is used + id_generator: + $ref: "#/$defs/IdGenerator" + description: | + Configure the trace and span ID generator. + defaultBehavior: an ID generator which randomly generates TraceIds and SpanIds is used tracer_configurator/development: $ref: "#/$defs/ExperimentalTracerConfigurator" description: | @@ -396,6 +401,25 @@ $defs: $ref: "#/$defs/ExperimentalComposableRuleBasedSampler" description: Configure sampler to be rule_based. defaultBehavior: ignore + IdGenerator: + type: object + additionalProperties: + type: + - object + - "null" + minProperties: 1 + maxProperties: 1 + properties: + random: + $ref: "#/$defs/RandomIdGenerator" + description: Configure the ID generator to randomly generate TraceIds and SpanIds (spec default). + defaultBehavior: ignore + isSdkExtensionPlugin: true + RandomIdGenerator: + type: + - object + - "null" + additionalProperties: false SimpleSpanProcessor: type: object additionalProperties: false diff --git a/snippets/IdGenerator_custom.yaml b/snippets/IdGenerator_custom.yaml new file mode 100644 index 00000000..d37a24e2 --- /dev/null +++ b/snippets/IdGenerator_custom.yaml @@ -0,0 +1,12 @@ +file_format: "1.0" + +tracer_provider: + processors: + - simple: + exporter: + console: + id_generator: + # SNIPPET_START + # configure a custom ID generator registered via PluginComponentProvider + my_custom_id_generator: + property: value From 465f2cb8099ba0b7d4d4c50d1802452419ea32a5 Mon Sep 17 00:00:00 2001 From: Mike Goldsmith Date: Tue, 2 Jun 2026 15:20:13 +0100 Subject: [PATCH 2/3] Update schema/tracer_provider.yaml Co-authored-by: Jack Berg <34418638+jack-berg@users.noreply.github.com> --- schema/tracer_provider.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/schema/tracer_provider.yaml b/schema/tracer_provider.yaml index 8313817a..e29e6110 100644 --- a/schema/tracer_provider.yaml +++ b/schema/tracer_provider.yaml @@ -20,7 +20,7 @@ properties: $ref: "#/$defs/IdGenerator" description: | Configure the trace and span ID generator. - defaultBehavior: an ID generator which randomly generates TraceIds and SpanIds is used + defaultBehavior: RandomIdGenerator is used tracer_configurator/development: $ref: "#/$defs/ExperimentalTracerConfigurator" description: | From 65df336b5be3ff05e1c6e628221ea617be1ff390 Mon Sep 17 00:00:00 2001 From: Mike Goldsmith Date: Tue, 2 Jun 2026 17:51:55 +0100 Subject: [PATCH 3/3] regenerate artefacts after defaultBehavior update Assisted-by: Claude claude-opus-4-7 --- opentelemetry_configuration.json | 2 +- schema-docs.md | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/opentelemetry_configuration.json b/opentelemetry_configuration.json index a7aed099..1a30982e 100644 --- a/opentelemetry_configuration.json +++ b/opentelemetry_configuration.json @@ -2462,7 +2462,7 @@ }, "id_generator": { "$ref": "#/$defs/IdGenerator", - "description": "Configure the trace and span ID generator.\nIf omitted, an ID generator which randomly generates TraceIds and SpanIds is used.\n" + "description": "Configure the trace and span ID generator.\nIf omitted, RandomIdGenerator is used.\n" }, "tracer_configurator/development": { "$ref": "#/$defs/ExperimentalTracerConfigurator", diff --git a/schema-docs.md b/schema-docs.md index 18ea6359..5b51d617 100644 --- a/schema-docs.md +++ b/schema-docs.md @@ -4124,7 +4124,7 @@ No snippets. | Property | Type | Required? | Default and Null Behavior | Constraints | Description | |---|---|---|---|---|---| -| `id_generator` | [`IdGenerator`](#idgenerator) | `false` | If omitted, an ID generator which randomly generates TraceIds and SpanIds is used. | No constraints. | Configure the trace and span ID generator.
| +| `id_generator` | [`IdGenerator`](#idgenerator) | `false` | If omitted, RandomIdGenerator is used. | No constraints. | Configure the trace and span ID generator.
| | `limits` | [`SpanLimits`](#spanlimits) | `false` | If omitted, default values as described in SpanLimits are used. | No constraints. | Configure span limits. See also attribute_limits. | | `processors` | `array` of [`SpanProcessor`](#spanprocessor) | `true` | Property is required and must be non-null. | * `minItems`: `1`
| Configure span processors. | | `sampler` | [`Sampler`](#sampler) | `false` | If omitted, parent based sampler with a root of always_on is used. | No constraints. | Configure the sampler.
| @@ -4179,7 +4179,7 @@ No snippets. }, "id_generator": { "$ref": "#/$defs/IdGenerator", - "description": "Configure the trace and span ID generator.\nIf omitted, an ID generator which randomly generates TraceIds and SpanIds is used.\n" + "description": "Configure the trace and span ID generator.\nIf omitted, RandomIdGenerator is used.\n" }, "tracer_configurator/development": { "$ref": "#/$defs/ExperimentalTracerConfigurator",