diff --git a/CHANGELOG.md b/CHANGELOG.md index a1bb3887..53eca16e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ * Add `always_record` definition to `Sampler` ([#698](https://github.com/open-telemetry/opentelemetry-configuration/pull/698)) +* Add experimental `meter_provider.view_matching_mode/development` property * Deprecate `MetricProducer.opencensus` and `OpenCensusMetricProducer`, following the deprecation of OpenCensus compatibility in the specification diff --git a/language-support-status.md b/language-support-status.md index 9662b5a6..33cac221 100644 --- a/language-support-status.md +++ b/language-support-status.md @@ -50,7 +50,7 @@ Latest supported file format: `1.0.0` | `LogRecordExporter` | supported | | * `console`: supported
* `otlp_grpc`: supported
* `otlp_http`: supported
* `otlp_file/development`: supported
| | `LogRecordLimits` | supported | | * `attribute_count_limit`: supported
* `attribute_value_length_limit`: supported
| | `LogRecordProcessor` | supported | | * `batch`: supported
* `simple`: supported
* `event_to_span_event_bridge/development`: unknown
| -| `MeterProvider` | supported | | * `exemplar_filter`: supported
* `readers`: supported
* `views`: supported
* `meter_configurator/development`: supported
| +| `MeterProvider` | supported | | * `exemplar_filter`: supported
* `readers`: supported
* `views`: supported
* `meter_configurator/development`: supported
* `view_matching_mode/development`: not_implemented
| | `MetricProducer` | supported | | * `opencensus`: supported
| | `MetricReader` | supported | | * `periodic`: supported
* `pull`: supported
| | `NameStringValuePair` | supported | | * `name`: supported
* `value`: supported
| @@ -131,6 +131,7 @@ Latest supported file format: `1.0.0` | `ExperimentalTracerConfigurator` | supported | | * `default_config`: supported
* `tracers`: supported
| | `ExperimentalTracerMatcherAndConfig` | supported | | * `config`: supported
* `name`: supported
| | `ExperimentalUrlSanitization` | unknown | | * `sensitive_query_parameters`: unknown
| +| `ExperimentalViewMatchingMode` | not_implemented | | * `composable`: not_implemented
* `independent`: not_implemented
| ## go @@ -172,7 +173,7 @@ Latest supported file format: `1.0.0` | `LogRecordExporter` | supported | | * `console`: supported
* `otlp_grpc`: supported
* `otlp_http`: supported
* `otlp_file/development`: not_implemented
| | `LogRecordLimits` | supported | | * `attribute_count_limit`: supported
* `attribute_value_length_limit`: supported
| | `LogRecordProcessor` | supported | | * `batch`: supported
* `simple`: supported
* `event_to_span_event_bridge/development`: unknown
| -| `MeterProvider` | supported | | * `exemplar_filter`: supported
* `readers`: supported
* `views`: supported
* `meter_configurator/development`: supported
| +| `MeterProvider` | supported | | * `exemplar_filter`: supported
* `readers`: supported
* `views`: supported
* `meter_configurator/development`: supported
* `view_matching_mode/development`: not_implemented
| | `MetricProducer` | unknown | | * `opencensus`: unknown
| | `MetricReader` | unknown | | * `periodic`: unknown
* `pull`: unknown
| | `NameStringValuePair` | supported | | * `name`: supported
* `value`: supported
| @@ -253,6 +254,7 @@ Latest supported file format: `1.0.0` | `ExperimentalTracerConfigurator` | not_implemented | | * `default_config`: not_implemented
* `tracers`: not_implemented
| | `ExperimentalTracerMatcherAndConfig` | unknown | | * `config`: unknown
* `name`: unknown
| | `ExperimentalUrlSanitization` | unknown | | * `sensitive_query_parameters`: unknown
| +| `ExperimentalViewMatchingMode` | not_implemented | | * `composable`: not_implemented
* `independent`: not_implemented
| ## java @@ -294,7 +296,7 @@ Latest supported file format: `1.0.0-rc.3` | `LogRecordExporter` | supported | | * `console`: supported
* `otlp_grpc`: supported
* `otlp_http`: supported
* `otlp_file/development`: supported
| | `LogRecordLimits` | supported | | * `attribute_count_limit`: supported
* `attribute_value_length_limit`: supported
| | `LogRecordProcessor` | supported | | * `batch`: supported
* `simple`: supported
* `event_to_span_event_bridge/development`: unknown
| -| `MeterProvider` | supported | | * `exemplar_filter`: supported
* `readers`: supported
* `views`: supported
* `meter_configurator/development`: supported
| +| `MeterProvider` | supported | | * `exemplar_filter`: supported
* `readers`: supported
* `views`: supported
* `meter_configurator/development`: supported
* `view_matching_mode/development`: not_implemented
| | `MetricProducer` | ignored | | * `opencensus`: ignored
| | `MetricReader` | supported | | * `periodic`: supported
* `pull`: supported
| | `NameStringValuePair` | supported | | * `name`: supported
* `value`: supported
| @@ -375,6 +377,7 @@ Latest supported file format: `1.0.0-rc.3` | `ExperimentalTracerConfigurator` | supported | | * `default_config`: supported
* `tracers`: supported
| | `ExperimentalTracerMatcherAndConfig` | supported | | * `config`: supported
* `name`: supported
| | `ExperimentalUrlSanitization` | unknown | | * `sensitive_query_parameters`: unknown
| +| `ExperimentalViewMatchingMode` | not_implemented | | * `composable`: not_implemented
* `independent`: not_implemented
| ## js @@ -416,7 +419,7 @@ Latest supported file format: `1.0.0-rc.3` | `LogRecordExporter` | supported | | * `console`: supported
* `otlp_grpc`: supported
* `otlp_http`: supported
* `otlp_file/development`: supported
| | `LogRecordLimits` | supported | | * `attribute_count_limit`: supported
* `attribute_value_length_limit`: supported
| | `LogRecordProcessor` | supported | | * `batch`: supported
* `simple`: supported
* `event_to_span_event_bridge/development`: supported
| -| `MeterProvider` | supported | | * `exemplar_filter`: supported
* `readers`: supported
* `views`: supported
* `meter_configurator/development`: supported
| +| `MeterProvider` | supported | | * `exemplar_filter`: supported
* `readers`: supported
* `views`: supported
* `meter_configurator/development`: supported
* `view_matching_mode/development`: not_implemented
| | `MetricProducer` | supported | | * `opencensus`: supported
| | `MetricReader` | supported | | * `periodic`: supported
* `pull`: supported
| | `NameStringValuePair` | supported | | * `name`: supported
* `value`: supported
| @@ -497,6 +500,7 @@ Latest supported file format: `1.0.0-rc.3` | `ExperimentalTracerConfigurator` | not_implemented | | * `default_config`: not_implemented
* `tracers`: not_implemented
| | `ExperimentalTracerMatcherAndConfig` | not_implemented | | * `config`: not_implemented
* `name`: not_implemented
| | `ExperimentalUrlSanitization` | not_implemented | | * `sensitive_query_parameters`: not_implemented
| +| `ExperimentalViewMatchingMode` | not_implemented | | * `composable`: not_implemented
* `independent`: not_implemented
| ## php @@ -538,7 +542,7 @@ Latest supported file format: `1.0.0-rc.2` | `LogRecordExporter` | supported | | * `console`: supported
* `otlp_grpc`: supported
* `otlp_http`: supported
* `otlp_file/development`: supported
| | `LogRecordLimits` | supported | | * `attribute_count_limit`: supported
* `attribute_value_length_limit`: supported
| | `LogRecordProcessor` | supported | | * `batch`: supported
* `simple`: supported
* `event_to_span_event_bridge/development`: unknown
| -| `MeterProvider` | supported | | * `exemplar_filter`: supported
* `readers`: supported
* `views`: supported
* `meter_configurator/development`: supported
| +| `MeterProvider` | supported | | * `exemplar_filter`: supported
* `readers`: supported
* `views`: supported
* `meter_configurator/development`: supported
* `view_matching_mode/development`: not_implemented
| | `MetricProducer` | not_implemented | | * `opencensus`: not_implemented
| | `MetricReader` | supported | | * `periodic`: supported
* `pull`: not_implemented
| | `NameStringValuePair` | supported | | * `name`: supported
* `value`: supported
| @@ -619,6 +623,7 @@ Latest supported file format: `1.0.0-rc.2` | `ExperimentalTracerConfigurator` | supported | | * `default_config`: supported
* `tracers`: supported
| | `ExperimentalTracerMatcherAndConfig` | supported | | * `config`: supported
* `name`: supported
| | `ExperimentalUrlSanitization` | unknown | | * `sensitive_query_parameters`: unknown
| +| `ExperimentalViewMatchingMode` | not_implemented | | * `composable`: not_implemented
* `independent`: not_implemented
| ## python @@ -660,7 +665,7 @@ Latest supported file format: `1.0.0` | `LogRecordExporter` | supported | | * `console`: supported
* `otlp_grpc`: supported
* `otlp_http`: supported
* `otlp_file/development`: supported
| | `LogRecordLimits` | ignored | | * `attribute_count_limit`: ignored
* `attribute_value_length_limit`: ignored
| | `LogRecordProcessor` | supported | | * `batch`: supported
* `simple`: supported
* `event_to_span_event_bridge/development`: supported
| -| `MeterProvider` | supported | | * `exemplar_filter`: supported
* `readers`: supported
* `views`: supported
* `meter_configurator/development`: supported
| +| `MeterProvider` | supported | | * `exemplar_filter`: supported
* `readers`: supported
* `views`: supported
* `meter_configurator/development`: supported
* `view_matching_mode/development`: not_implemented
| | `MetricProducer` | ignored | | * `opencensus`: ignored
| | `MetricReader` | supported | | * `periodic`: supported
* `pull`: supported
| | `NameStringValuePair` | supported | | * `name`: supported
* `value`: supported
| @@ -741,5 +746,6 @@ Latest supported file format: `1.0.0` | `ExperimentalTracerConfigurator` | ignored | | * `default_config`: ignored
* `tracers`: ignored
| | `ExperimentalTracerMatcherAndConfig` | ignored | | * `config`: ignored
* `name`: ignored
| | `ExperimentalUrlSanitization` | ignored | | * `sensitive_query_parameters`: ignored
| +| `ExperimentalViewMatchingMode` | not_implemented | | * `composable`: not_implemented
* `independent`: not_implemented
| diff --git a/opentelemetry_configuration.json b/opentelemetry_configuration.json index 531286a7..f9d625b4 100644 --- a/opentelemetry_configuration.json +++ b/opentelemetry_configuration.json @@ -1367,6 +1367,16 @@ } } }, + "ExperimentalViewMatchingMode": { + "type": [ + "string", + "null" + ], + "enum": [ + "independent", + "composable" + ] + }, "ExplicitBucketHistogramAggregation": { "type": [ "object", @@ -1668,6 +1678,10 @@ "meter_configurator/development": { "$ref": "#/$defs/ExperimentalMeterConfigurator", "description": "Configure meters.\nIf omitted, all meters use default values as described in ExperimentalMeterConfig.\n" + }, + "view_matching_mode/development": { + "$ref": "#/$defs/ExperimentalViewMatchingMode", + "description": "Controls how multiple matching Views are applied to an Instrument.\nValues include:\n* composable: Combines (merges) matching Views into unified metric streams unless distinct stream names are configured.\n* independent: Creates separate metric streams independently for each matching View.\nIf omitted, independent is used.\n" } }, "required": [ diff --git a/schema/meta_schema_language_cpp.yaml b/schema/meta_schema_language_cpp.yaml index 3c918408..8e55a486 100644 --- a/schema/meta_schema_language_cpp.yaml +++ b/schema/meta_schema_language_cpp.yaml @@ -103,7 +103,9 @@ typeSupportStatuses: status: unknown - type: MeterProvider status: supported - propertyOverrides: [] + propertyOverrides: + - property: view_matching_mode/development + status: not_implemented - type: MetricProducer status: supported propertyOverrides: [] @@ -354,3 +356,6 @@ typeSupportStatuses: - type: ExperimentalUrlSanitization status: unknown propertyOverrides: [] + - type: ExperimentalViewMatchingMode + status: not_implemented + enumOverrides: [] diff --git a/schema/meta_schema_language_go.yaml b/schema/meta_schema_language_go.yaml index cdf7af8e..6db980af 100644 --- a/schema/meta_schema_language_go.yaml +++ b/schema/meta_schema_language_go.yaml @@ -111,7 +111,9 @@ typeSupportStatuses: status: unknown - type: MeterProvider status: supported - propertyOverrides: [] + propertyOverrides: + - property: view_matching_mode/development + status: not_implemented - type: MetricProducer status: unknown propertyOverrides: [] @@ -376,3 +378,6 @@ typeSupportStatuses: - type: ExperimentalUrlSanitization status: unknown propertyOverrides: [] + - type: ExperimentalViewMatchingMode + status: not_implemented + enumOverrides: [] diff --git a/schema/meta_schema_language_java.yaml b/schema/meta_schema_language_java.yaml index 041ffb84..8a9c5e19 100644 --- a/schema/meta_schema_language_java.yaml +++ b/schema/meta_schema_language_java.yaml @@ -109,7 +109,9 @@ typeSupportStatuses: status: unknown - type: MeterProvider status: supported - propertyOverrides: [] + propertyOverrides: + - property: view_matching_mode/development + status: not_implemented - type: MetricProducer status: ignored propertyOverrides: [] @@ -390,3 +392,6 @@ typeSupportStatuses: - type: ExperimentalUrlSanitization status: unknown propertyOverrides: [] + - type: ExperimentalViewMatchingMode + status: not_implemented + enumOverrides: [] diff --git a/schema/meta_schema_language_js.yaml b/schema/meta_schema_language_js.yaml index a04323ca..cfbb5223 100644 --- a/schema/meta_schema_language_js.yaml +++ b/schema/meta_schema_language_js.yaml @@ -105,7 +105,9 @@ typeSupportStatuses: propertyOverrides: [] - type: MeterProvider status: supported - propertyOverrides: [] + propertyOverrides: + - property: view_matching_mode/development + status: not_implemented - type: MetricProducer status: supported propertyOverrides: [] @@ -350,3 +352,6 @@ typeSupportStatuses: - type: ExperimentalUrlSanitization status: not_implemented propertyOverrides: [] + - type: ExperimentalViewMatchingMode + status: not_implemented + enumOverrides: [] diff --git a/schema/meta_schema_language_php.yaml b/schema/meta_schema_language_php.yaml index a09baca1..5956fea4 100644 --- a/schema/meta_schema_language_php.yaml +++ b/schema/meta_schema_language_php.yaml @@ -111,7 +111,9 @@ typeSupportStatuses: status: unknown - type: MeterProvider status: supported - propertyOverrides: [] + propertyOverrides: + - property: view_matching_mode/development + status: not_implemented - type: MetricProducer status: not_implemented propertyOverrides: [] @@ -419,3 +421,6 @@ typeSupportStatuses: - type: ExperimentalUrlSanitization status: unknown propertyOverrides: [] + - type: ExperimentalViewMatchingMode + status: not_implemented + enumOverrides: [] diff --git a/schema/meta_schema_language_python.yaml b/schema/meta_schema_language_python.yaml index 59f2e05e..89e998d2 100644 --- a/schema/meta_schema_language_python.yaml +++ b/schema/meta_schema_language_python.yaml @@ -101,7 +101,9 @@ typeSupportStatuses: propertyOverrides: [] - type: MeterProvider status: supported - propertyOverrides: [] + propertyOverrides: + - property: view_matching_mode/development + status: not_implemented - type: MetricProducer status: ignored propertyOverrides: [] @@ -344,3 +346,6 @@ typeSupportStatuses: - type: ExperimentalUrlSanitization status: ignored propertyOverrides: [] + - type: ExperimentalViewMatchingMode + status: not_implemented + enumOverrides: [] diff --git a/schema/meter_provider.yaml b/schema/meter_provider.yaml index cf01e490..6a68e1c9 100644 --- a/schema/meter_provider.yaml +++ b/schema/meter_provider.yaml @@ -26,6 +26,11 @@ properties: description: | Configure meters. defaultBehavior: all meters use default values as described in ExperimentalMeterConfig + view_matching_mode/development: + $ref: "#/$defs/ExperimentalViewMatchingMode" + description: | + Controls how multiple matching Views are applied to an Instrument. + defaultBehavior: independent is used required: - readers $defs: @@ -773,3 +778,13 @@ $defs: - boolean description: Configure if the meter is enabled or not. defaultBehavior: true is used + ExperimentalViewMatchingMode: + type: + - string + - "null" + enum: + - independent + - composable + enumDescriptions: + composable: Combines (merges) matching Views into unified metric streams unless distinct stream names are configured. + independent: Creates separate metric streams independently for each matching View. diff --git a/snippets/MeterProvider_composable_views.yaml b/snippets/MeterProvider_composable_views.yaml new file mode 100644 index 00000000..78f2cab0 --- /dev/null +++ b/snippets/MeterProvider_composable_views.yaml @@ -0,0 +1,23 @@ +file_format: "1.1" + +meter_provider: + # SNIPPET_START + # By default, an instrument named "my_instrument" would match both of the registered views + # and output two metrics, one with description "first view description", the other with + # the original description and a cardinality limit of 1000. By setting the matching mode to + # composable, the matching views are merged together and one metric output with description + # "first view description" AND cardinality limit of 1000. + readers: + - periodic: + exporter: + console: + views: + - selector: + instrument_name: my_instrument + stream: + description: first view description + - selector: + instrument_name: my_instrument + stream: + aggregation_cardinality_limit: 1000 + view_matching_mode/development: composable diff --git a/validator/shelltests/invalid_view_matching_mode.test b/validator/shelltests/invalid_view_matching_mode.test new file mode 100644 index 00000000..f90d84c3 --- /dev/null +++ b/validator/shelltests/invalid_view_matching_mode.test @@ -0,0 +1,4 @@ +otel_config_validator shelltests/invalid_view_matching_mode.yaml +>>>2 +jsonschema: '/meter_provider/view_matching_mode~1development' does not validate with https://opentelemetry.io/otelconfig/opentelemetry_configuration.json#/properties/meter_provider/$ref/properties/view_matching_mode~1development/$ref/enum: value must be one of "independent", "composable" +>>>= 1 diff --git a/validator/shelltests/invalid_view_matching_mode.yaml b/validator/shelltests/invalid_view_matching_mode.yaml new file mode 100644 index 00000000..31375911 --- /dev/null +++ b/validator/shelltests/invalid_view_matching_mode.yaml @@ -0,0 +1,7 @@ +file_format: "1.1" +meter_provider: + view_matching_mode/development: merge_all + readers: + - periodic: + exporter: + console: {}