diff --git a/examples/kitchen-sink.yaml b/examples/kitchen-sink.yaml index 70df7ab9..f701ca26 100644 --- a/examples/kitchen-sink.yaml +++ b/examples/kitchen-sink.yaml @@ -210,6 +210,33 @@ meter_provider: producers: - # Configure metric producer to be opencensus. opencensus: + # Configure cardinality limits. + cardinality_limits: + # Configure default cardinality limit for all instrument types. + # Instrument-specific cardinality limits take priority. + # If omitted or null, 2000 is used. + default: 2000 + # Configure default cardinality limit for counter instruments. + # If omitted or null, the value from .default is used. + counter: 2000 + # Configure default cardinality limit for gauge instruments. + # If omitted or null, the value from .default is used. + gauge: 2000 + # Configure default cardinality limit for histogram instruments. + # If omitted or null, the value from .default is used. + histogram: 2000 + # Configure default cardinality limit for observable_counter instruments. + # If omitted or null, the value from .default is used. + observable_counter: 2000 + # Configure default cardinality limit for observable_gauge instruments. + # If omitted or null, the value from .default is used. + observable_gauge: 2000 + # Configure default cardinality limit for observable_up_down_counter instruments. + # If omitted or null, the value from .default is used. + observable_up_down_counter: 2000 + # Configure default cardinality limit for up_down_counter instruments. + # If omitted or null, the value from .default is used. + up_down_counter: 2000 - # Configure a periodic metric reader. periodic: # Configure delay interval (in milliseconds) between start of two consecutive exports. @@ -272,6 +299,33 @@ meter_provider: producers: - # Configure metric producer to be prometheus. prometheus: + # Configure cardinality limits. + cardinality_limits: + # Configure default cardinality limit for all instrument types. + # Instrument-specific cardinality limits take priority. + # If omitted or null, 2000 is used. + default: 2000 + # Configure default cardinality limit for counter instruments. + # If omitted or null, the value from .default is used. + counter: 2000 + # Configure default cardinality limit for gauge instruments. + # If omitted or null, the value from .default is used. + gauge: 2000 + # Configure default cardinality limit for histogram instruments. + # If omitted or null, the value from .default is used. + histogram: 2000 + # Configure default cardinality limit for observable_counter instruments. + # If omitted or null, the value from .default is used. + observable_counter: 2000 + # Configure default cardinality limit for observable_gauge instruments. + # If omitted or null, the value from .default is used. + observable_gauge: 2000 + # Configure default cardinality limit for observable_up_down_counter instruments. + # If omitted or null, the value from .default is used. + observable_up_down_counter: 2000 + # Configure default cardinality limit for up_down_counter instruments. + # If omitted or null, the value from .default is used. + up_down_counter: 2000 - # Configure a periodic metric reader. periodic: # Configure exporter. @@ -424,6 +478,9 @@ meter_provider: # Configure record min and max. # If omitted or null, true is used. record_min_max: true + # Configure the aggregation cardinality limit. + # If omitted or null, the metric reader's default cardinality limit is used. + aggregation_cardinality_limit: 2000 # Configure attribute keys retained in the resulting stream(s). attribute_keys: # Configure list of attribute keys to include in the resulting stream(s). All other attributes are dropped. diff --git a/schema/meter_provider.json b/schema/meter_provider.json index a983b753..0bee0ed3 100644 --- a/schema/meter_provider.json +++ b/schema/meter_provider.json @@ -52,6 +52,9 @@ "items": { "$ref": "#/$defs/MetricProducer" } + }, + "cardinality_limits": { + "$ref": "#/$defs/CardinalityLimits" } }, "required": [ @@ -70,12 +73,53 @@ "items": { "$ref": "#/$defs/MetricProducer" } + }, + "cardinality_limits": { + "$ref": "#/$defs/CardinalityLimits" } }, "required": [ "exporter" ] }, + "CardinalityLimits": { + "type": "object", + "additionalProperties": false, + "properties": { + "default": { + "type": ["integer", "null"], + "exclusiveMinimum": 0 + }, + "counter": { + "type": ["integer", "null"], + "exclusiveMinimum": 0 + }, + "gauge": { + "type": ["integer", "null"], + "exclusiveMinimum": 0 + }, + "histogram": { + "type": ["integer", "null"], + "exclusiveMinimum": 0 + }, + "observable_counter": { + "type": ["integer", "null"], + "exclusiveMinimum": 0 + }, + "observable_gauge": { + "type": ["integer", "null"], + "exclusiveMinimum": 0 + }, + "observable_up_down_counter": { + "type": ["integer", "null"], + "exclusiveMinimum": 0 + }, + "up_down_counter": { + "type": ["integer", "null"], + "exclusiveMinimum": 0 + } + } + }, "PushMetricExporter": { "type": "object", "additionalProperties": true, @@ -352,6 +396,10 @@ "aggregation": { "$ref": "#/$defs/Aggregation" }, + "aggregation_cardinality_limit": { + "type": ["integer", "null"], + "exclusiveMinimum": 0 + }, "attribute_keys": { "$ref": "common.json#/$defs/IncludeExclude" } diff --git a/schema/type_descriptions.yaml b/schema/type_descriptions.yaml index f4244c0d..dcf1e84a 100644 --- a/schema/type_descriptions.yaml +++ b/schema/type_descriptions.yaml @@ -389,6 +389,7 @@ property_descriptions: exporter: Configure exporter. producers: Configure metric producers. + cardinality_limits: Configure cardinality limits. path_patterns: - .meter_provider.readers[].pull @@ -408,6 +409,7 @@ If omitted or null, 30000 is used. exporter: Configure exporter. producers: Configure metric producers. + cardinality_limits: Configure cardinality limits. path_patterns: - .meter_provider.readers[].periodic @@ -419,6 +421,46 @@ - .meter_provider.readers[].pull.producers[] - .meter_provider.readers[].periodic.producers[] +- type: CardinalityLimits + property_descriptions: + default: > + Configure default cardinality limit for all instrument types. + + Instrument-specific cardinality limits take priority. + + If omitted or null, 2000 is used. + counter: > + Configure default cardinality limit for counter instruments. + + If omitted or null, the value from .default is used. + gauge: > + Configure default cardinality limit for gauge instruments. + + If omitted or null, the value from .default is used. + histogram: > + Configure default cardinality limit for histogram instruments. + + If omitted or null, the value from .default is used. + observable_counter: > + Configure default cardinality limit for observable_counter instruments. + + If omitted or null, the value from .default is used. + observable_gauge: > + Configure default cardinality limit for observable_gauge instruments. + + If omitted or null, the value from .default is used. + observable_up_down_counter: > + Configure default cardinality limit for observable_up_down_counter instruments. + + If omitted or null, the value from .default is used. + up_down_counter: > + Configure default cardinality limit for up_down_counter instruments. + + If omitted or null, the value from .default is used. + path_patterns: + - .meter_provider.readers[].pull.cardinality_limits + - .meter_provider.readers[].periodic.cardinality_limits + - type: MetricExporter property_descriptions: prometheus: Configure exporter to be prometheus. @@ -533,6 +575,10 @@ Values include: default, drop, explicit_bucket_histogram, base2_exponential_bucket_histogram, last_value, sum. For behavior of values see https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/sdk.md#aggregation. If omitted, default is used. + aggregation_cardinality_limit: > + Configure the aggregation cardinality limit. + + If omitted or null, the metric reader's default cardinality limit is used. attribute_keys: > Configure attribute keys retained in the resulting stream(s). path_patterns: