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: {}