diff --git a/CHANGELOG.md b/CHANGELOG.md index ef6f54d1df8..ac9c8edf443 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -55,7 +55,8 @@ release. ### Metrics -- No changes. +- Add unit to View's Instrument selection criteria. + ([#3184](https://github.com/open-telemetry/opentelemetry-specification/pull/3184)) ### Logs diff --git a/spec-compliance-matrix.md b/spec-compliance-matrix.md index a19b9b16e80..7852176cf55 100644 --- a/spec-compliance-matrix.md +++ b/spec-compliance-matrix.md @@ -95,117 +95,118 @@ formats is required. Implementing more than one format is optional. ## Metrics -| Feature | Optional | Go | Java | JS | Python | Ruby | Erlang | PHP | Rust | C++ | .NET | Swift | -|------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------|-----|------|-----|--------|------|--------|-----|------|-----|------|-------| -| The API provides a way to set and get a global default `MeterProvider`. | X | + | + | + | + | | | + | | + | - | | -| It is possible to create any number of `MeterProvider`s. | X | + | + | + | + | | | + | | + | + | | -| `MeterProvider` provides a way to get a `Meter`. | | + | + | + | + | | | + | | + | - | | -| `get_meter` accepts name, `version` and `schema_url`. | | + | + | + | + | | | + | | + | - | | -| `get_meter` accepts `attributes`. | | | | | | | | + | | | | | -| When an invalid `name` is specified a working `Meter` implementation is returned as a fallback. | | + | + | + | + | | | | | + | - | | -| The fallback `Meter` `name` property keeps its original invalid value. | X | - | - | + | + | | | | | - | - | | -| Associate `Meter` with `InstrumentationScope`. | | | + | + | + | | | | | + | | | -| The meter provides functions to create a new `Counter`. | | + | + | + | + | | | + | | + | + | | -| The meter provides functions to create a new `AsynchronousCounter`. | | + | + | + | + | | | + | | + | + | | -| The meter provides functions to create a new `Histogram`. | | + | + | + | + | | | + | | + | + | | -| The meter provides functions to create a new `AsynchronousGauge`. | | + | + | + | + | | | + | | + | + | | -| The meter provides functions to create a new `UpDownCounter`. | | + | + | + | + | | | + | | + | + | | -| The meter provides functions to create a new `AsynchronousUpDownCounter`. | | + | + | + | + | | | + | | + | + | | -| Instruments have `name` | | + | + | + | + | | | + | | + | + | | -| Instruments have kind. | | + | + | + | + | | | + | | + | + | | -| Instruments have an optional unit of measure. | | + | + | + | + | | | + | | + | + | | -| Instruments have an optional description. | | + | + | + | + | | | + | | + | + | | -| A valid instrument MUST be created and warning SHOULD be emitted when multiple instruments are registered under the same `Meter` using the same `name`. | | | + | + | + | | | | | | | | -| It is possible to register two instruments with same `name` under different `Meter`s. | | + | + | + | + | | | | | + | + | | -| Instrument names conform to the specified syntax. | | - | + | | + | | | | | + | + | | -| Instrument units conform to the specified syntax. | | - | + | | + | | | | | + | + | | -| Instrument descriptions conform to the specified syntax. | | - | + | | - | | | | | - | + | | -| `create_counter` returns a `Counter`. | | + | + | + | + | | | + | | + | + | | -| The API for `Counter` accepts the name, unit and description of the instrument. | | + | + | + | + | | | + | | + | + | | -| `Counter` has an `add` method. | | + | + | + | + | | | + | | + | + | | -| The `add` method returns no (or dummy) value. | X | + | + | + | + | | | + | | + | + | | -| The `add` method accepts optional attributes. | | + | + | + | + | | | + | | + | + | | -| The `add` method accepts the increment amount. | | + | + | + | + | | | + | | + | + | | -| The `add` method of `Counter` accepts only positive amounts. | | + | + | + | + | | | | | + | - | | -| `create_asynchronous_counter` creates an `AsynchronousCounter`. | | + | + | + | + | | | + | | + | + | | -| The API for `AsynchronousCounter` accepts the name, unit and description of the instrument. | | + | + | + | + | | | + | | + | + | | -| The API for `AsynchronousCounter` accepts a callback. | | + | + | + | + | | | + | | + | + | | -| `create_up_down_counter` returns an `UpDownCounter`. | | + | + | + | + | | | + | | + | + | | -| The API for `UpDownCounter` accepts the name, unit and description of the instrument. | | + | + | + | + | | | + | | + | + | | -| `UpDownCounter` has an `add` method. | | + | + | + | + | | | + | | + | + | | -| The `add` method returns no (or dummy) value. | X | + | + | + | + | | | + | | + | + | | -| The `add` method accepts optional attributes. | | + | + | + | + | | | + | | + | + | | -| The `add` method accepts the increment amount. | | + | + | + | + | | | + | | + | + | | -| `create_asynchronous_up_down_counter` creates an `AsynchronousUpDownCounter`. | | + | + | + | + | | | + | | + | + | | -| The API for `AsynchronousUpDownCounter` accepts the name, unit and description of the instrument. | | + | + | + | + | | | + | | + | + | | -| The API for `AsynchronousUpDownCounter` accepts a callback. | | + | + | + | + | | | + | | + | + | | -| `create_histogram` returns a `Histogram`. | | + | + | + | + | | | + | | + | + | | -| The API for `Histogram` accepts the name, unit and description of the instrument. | | + | + | + | + | | | + | | + | + | | -| `Histogram` has a `record` method. | | + | + | + | + | | | + | | + | + | | -| The `record` method return no (or dummy) value. | X | + | + | + | + | | | + | | + | + | | -| The `record` method accepts optional attributes. | | + | + | + | + | | | + | | + | + | | -| The `record` method accepts a value. | | + | + | + | + | | | + | | + | + | | -| The `record` method of `Histogram` accepts only positive amounts. | | - | + | + | + | | | | | + | + | | -| `create_asynchronous_gauge` creates an `Asynchronous Gauge`. | | + | + | + | + | | | + | | + | + | | -| The API for `AsynchronousGauge` accepts the name, unit and description of the instrument. | | + | + | + | + | | | + | | + | + | | -| The API for `AsynchronousGauge` accepts a callback. | | + | + | + | + | | | + | | + | + | | -| The callback function of an `Asynchronous` instrument does not block indefinitely. | X | - | - | + | - | | | | | + | ? | | -| The callback function reports `Measurement`s. | | + | + | + | + | | | | | + | + | | -| There is a way to pass state to the callback. | X | + | + | | + | | | | | + | + | | -| All methods of `MeterProvider` are safe to be called concurrently. | | + | + | + | - | | | | | + | + | | -| All methods of `Meter` are safe to be called concurrently. | | + | + | + | - | | | | | + | + | | -| All methods of any instrument are safe to be called concurrently. | | + | + | + | - | | | | | + | + | | -| `MeterProvider` allows a `Resource` to be specified. | | + | + | + | + | | | + | | + | + | | -| A specified `Resource` can be associated with all the produced metrics from any `Meter` from the `MeterProvider`. | | + | + | + | + | | | + | | + | + | | -| The supplied `name`, `version` and `schema_url` arguments passed to the `MeterProvider` are used to create an `InstrumentationLibrary` instance stored in the `Meter`. | | + | - | | + | | | | | + | - | | -| The supplied `name`, `version` and `schema_url` arguments passed to the `MeterProvider` are used to create an `InstrumentationScope` instance stored in the `Meter`. | | | + | + | | | | + | | + | | | -| Configuration is managed solely by the `MeterProvider`. | | + | + | + | + | | | + | | + | + | | -| The `MeterProvider` provides methods to update the configuration | X | - | - | - | + | | | | | - | + | | -| The updated configuration applies to all already returned `Meter`s. | if above | - | - | - | - | | | | | - | + | | -| There is a way to register `View`s with a `MeterProvider`. | | - | + | + | + | | | + | | + | + | | -| The `View` instrument selection criteria is as specified. | | | + | + | + | | | + | | + | + | | -| The `View` instrument selection criteria supports wildcards. | X | | + | + | + | | | | | + | + | | -| The `View` instrument selection criteria supports the match-all wildcard. | | | + | + | + | | | | | + | + | | -| The name of the `View` can be specified. | | | + | + | + | | | + | | + | + | | -| The `View` allows configuring the name description, attributes keys and aggregation of the resulting metric stream. | | | + | + | + | | | + | | + | - | | -| The `View` allows configuring the exemplar reservoir of resulting metric stream. | X | | - | | - | | | | | | - | | -| The SDK allows more than one `View` to be specified per instrument. | X | | + | + | + | | | | | + | + | | -| The `Drop` aggregation is available. | | + | + | + | + | | | | | + | + | | -| The `Drop` aggregation drops all measurements and does not produce a metric stream. | | + | + | + | + | | | | | - | + | | -| The `Default` aggregation is available. | | + | + | + | + | | | | | + | + | | -| The `Default` aggregation uses the specified aggregation by instrument. | | + | + | + | + | | | | | + | + | | -| The `Sum` aggregation is available. | | + | + | + | + | | | + | | + | + | | -| The `Sum` aggregation performs as specified. | | + | + | + | + | | | + | | + | + | | -| The `LastValue` aggregation is available. | | + | + | + | + | | | + | | + | + | | -| The `LastValue` aggregation performs as specified. | | + | + | + | + | | | + | | + | + | | -| The `ExplicitBucketHistogram` aggregation is available. | | - | + | + | + | | | + | | + | + | | -| The `ExplicitBucketHistogram` aggregation performs as specified. | | - | + | + | + | | | + | | + | + | | -| The `ExponentialBucketHistogram` aggregation is available. | | | | | | | | | | | | | -| The `ExponentialBucketHistogram` aggregation performs as specified. | | | | | | | | | | | | | -| The metrics Reader implementation supports registering metric Exporters | | | + | + | + | | | + | | + | + | | -| The metrics Reader implementation supports configuring the default aggregation on the basis of instrument kind. | | | + | | + | | | | | - | - | | -| The metrics Reader implementation supports configuring the default temporality on the basis of instrument kind. | | | + | + | + | | | | | + | | | -| The metrics Exporter has access to the aggregated metrics data (aggregated points, not raw measurements). | | + | + | + | + | | | | | + | + | | -| The metrics Exporter `export` function can not be called concurrently from the same Exporter instance. | | + | + | + | - | | | | | + | + | | -| The metrics Exporter `export` function does not block indefinitely. | | + | + | + | - | | | | | + | + | | -| The metrics Exporter `export` function receives a batch of metrics. | | + | + | + | + | | | + | | + | + | | -| The metrics Exporter `export` function returns `Success` or `Failure`. | | + | + | + | + | | | + | | + | + | | -| The metrics Exporter provides a `ForceFlush` function. | | - | + | + | - | | | + | | + | + | | -| The metrics Exporter `ForceFlush` can inform the caller whether it succeeded, failed or timed out. | | | + | + | - | | | + | | + | + | | -| The metrics Exporter provides a `shutdown` function. | | + | + | + | - | | | + | | + | + | | -| The metrics Exporter `shutdown` function do not block indefinitely. | | + | + | + | - | | | | | + | + | | -| The metrics SDK samples `Exemplar`s from measurements. | | | + | | - | | | | | | - | | -| Exemplar sampling can be disabled. | | | - | | - | | | | | | - | | -| The metrics SDK samples measurements in the context of a sampled trace by default. | | | + | | - | | | | | | - | | -| Exemplars retain any attributes available in the measurement that are not preserved by aggregation or view configuration. | | | + | | - | | | | | | - | | -| Exemplars contain the associated trace id and span id of the active span in the Context when the measurement was taken. | | | + | | - | | | | | | - | | -| Exemplars contain the timestamp when the measurement was taken. | | | + | | - | | | | | | - | | -| The metrics SDK provides an `ExemplarReservoir` interface or extension point. | X | | - | | - | | | + | | | - | | -| An `ExemplarReservoir` has an `offer` method with access to the measurement value, attributes, `Context` and timestamp. | X | | - | | - | | | + | | | - | | -| The metrics SDK provides a `SimpleFixedSizeExemplarReservoir` that is used by default for all aggregations except `ExplicitBucketHistogram`. | | | + | | - | | | + | | | - | | -| The metrics SDK provides an `AlignedHistogramBucketExemplarReservoir` that is used by default for `ExplicitBucketHistogram` aggregation. | | | + | | - | | | | | | - | | -| The metrics SDK provides an `ExemplarFilter` interface or extension point. | X | | - | | - | | | + | | | - | | -| An `ExemplarFilter` has access to the measurement value, attributes, `Context` and timestamp. | X | | - | | - | | | + | | | - | | +| Feature | Optional | Go | Java | JS | Python | Ruby | Erlang | PHP | Rust | C++ | .NET | Swift | +|------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------|----|------|-----|--------|------|--------|-----|------|-----|------|-------| +| The API provides a way to set and get a global default `MeterProvider`. | X | + | + | + | + | | | + | | + | - | | +| It is possible to create any number of `MeterProvider`s. | X | + | + | + | + | | | + | | + | + | | +| `MeterProvider` provides a way to get a `Meter`. | | + | + | + | + | | | + | | + | - | | +| `get_meter` accepts name, `version` and `schema_url`. | | + | + | + | + | | | + | | + | - | | +| `get_meter` accepts `attributes`. | | | | | | | | + | | | | | +| When an invalid `name` is specified a working `Meter` implementation is returned as a fallback. | | + | + | + | + | | | | | + | - | | +| The fallback `Meter` `name` property keeps its original invalid value. | X | - | - | + | + | | | | | - | - | | +| Associate `Meter` with `InstrumentationScope`. | | | + | + | + | | | | | + | | | +| The meter provides functions to create a new `Counter`. | | + | + | + | + | | | + | | + | + | | +| The meter provides functions to create a new `AsynchronousCounter`. | | + | + | + | + | | | + | | + | + | | +| The meter provides functions to create a new `Histogram`. | | + | + | + | + | | | + | | + | + | | +| The meter provides functions to create a new `AsynchronousGauge`. | | + | + | + | + | | | + | | + | + | | +| The meter provides functions to create a new `UpDownCounter`. | | + | + | + | + | | | + | | + | + | | +| The meter provides functions to create a new `AsynchronousUpDownCounter`. | | + | + | + | + | | | + | | + | + | | +| Instruments have `name` | | + | + | + | + | | | + | | + | + | | +| Instruments have kind. | | + | + | + | + | | | + | | + | + | | +| Instruments have an optional unit of measure. | | + | + | + | + | | | + | | + | + | | +| Instruments have an optional description. | | + | + | + | + | | | + | | + | + | | +| A valid instrument MUST be created and warning SHOULD be emitted when multiple instruments are registered under the same `Meter` using the same `name`. | | | + | + | + | | | | | | | | +| It is possible to register two instruments with same `name` under different `Meter`s. | | + | + | + | + | | | | | + | + | | +| Instrument names conform to the specified syntax. | | - | + | | + | | | | | + | + | | +| Instrument units conform to the specified syntax. | | - | + | | + | | | | | + | + | | +| Instrument descriptions conform to the specified syntax. | | - | + | | - | | | | | - | + | | +| `create_counter` returns a `Counter`. | | + | + | + | + | | | + | | + | + | | +| The API for `Counter` accepts the name, unit and description of the instrument. | | + | + | + | + | | | + | | + | + | | +| `Counter` has an `add` method. | | + | + | + | + | | | + | | + | + | | +| The `add` method returns no (or dummy) value. | X | + | + | + | + | | | + | | + | + | | +| The `add` method accepts optional attributes. | | + | + | + | + | | | + | | + | + | | +| The `add` method accepts the increment amount. | | + | + | + | + | | | + | | + | + | | +| The `add` method of `Counter` accepts only positive amounts. | | + | + | + | + | | | | | + | - | | +| `create_asynchronous_counter` creates an `AsynchronousCounter`. | | + | + | + | + | | | + | | + | + | | +| The API for `AsynchronousCounter` accepts the name, unit and description of the instrument. | | + | + | + | + | | | + | | + | + | | +| The API for `AsynchronousCounter` accepts a callback. | | + | + | + | + | | | + | | + | + | | +| `create_up_down_counter` returns an `UpDownCounter`. | | + | + | + | + | | | + | | + | + | | +| The API for `UpDownCounter` accepts the name, unit and description of the instrument. | | + | + | + | + | | | + | | + | + | | +| `UpDownCounter` has an `add` method. | | + | + | + | + | | | + | | + | + | | +| The `add` method returns no (or dummy) value. | X | + | + | + | + | | | + | | + | + | | +| The `add` method accepts optional attributes. | | + | + | + | + | | | + | | + | + | | +| The `add` method accepts the increment amount. | | + | + | + | + | | | + | | + | + | | +| `create_asynchronous_up_down_counter` creates an `AsynchronousUpDownCounter`. | | + | + | + | + | | | + | | + | + | | +| The API for `AsynchronousUpDownCounter` accepts the name, unit and description of the instrument. | | + | + | + | + | | | + | | + | + | | +| The API for `AsynchronousUpDownCounter` accepts a callback. | | + | + | + | + | | | + | | + | + | | +| `create_histogram` returns a `Histogram`. | | + | + | + | + | | | + | | + | + | | +| The API for `Histogram` accepts the name, unit and description of the instrument. | | + | + | + | + | | | + | | + | + | | +| `Histogram` has a `record` method. | | + | + | + | + | | | + | | + | + | | +| The `record` method return no (or dummy) value. | X | + | + | + | + | | | + | | + | + | | +| The `record` method accepts optional attributes. | | + | + | + | + | | | + | | + | + | | +| The `record` method accepts a value. | | + | + | + | + | | | + | | + | + | | +| The `record` method of `Histogram` accepts only positive amounts. | | - | + | + | + | | | | | + | + | | +| `create_asynchronous_gauge` creates an `Asynchronous Gauge`. | | + | + | + | + | | | + | | + | + | | +| The API for `AsynchronousGauge` accepts the name, unit and description of the instrument. | | + | + | + | + | | | + | | + | + | | +| The API for `AsynchronousGauge` accepts a callback. | | + | + | + | + | | | + | | + | + | | +| The callback function of an `Asynchronous` instrument does not block indefinitely. | X | - | - | + | - | | | | | + | ? | | +| The callback function reports `Measurement`s. | | + | + | + | + | | | | | + | + | | +| There is a way to pass state to the callback. | X | + | + | | + | | | | | + | + | | +| All methods of `MeterProvider` are safe to be called concurrently. | | + | + | + | - | | | | | + | + | | +| All methods of `Meter` are safe to be called concurrently. | | + | + | + | - | | | | | + | + | | +| All methods of any instrument are safe to be called concurrently. | | + | + | + | - | | | | | + | + | | +| `MeterProvider` allows a `Resource` to be specified. | | + | + | + | + | | | + | | + | + | | +| A specified `Resource` can be associated with all the produced metrics from any `Meter` from the `MeterProvider`. | | + | + | + | + | | | + | | + | + | | +| The supplied `name`, `version` and `schema_url` arguments passed to the `MeterProvider` are used to create an `InstrumentationLibrary` instance stored in the `Meter`. | | + | - | | + | | | | | + | - | | +| The supplied `name`, `version` and `schema_url` arguments passed to the `MeterProvider` are used to create an `InstrumentationScope` instance stored in the `Meter`. | | | + | + | | | | + | | + | | | +| Configuration is managed solely by the `MeterProvider`. | | + | + | + | + | | | + | | + | + | | +| The `MeterProvider` provides methods to update the configuration | X | - | - | - | + | | | | | - | + | | +| The updated configuration applies to all already returned `Meter`s. | if above | - | - | - | - | | | | | - | + | | +| There is a way to register `View`s with a `MeterProvider`. | | - | + | + | + | | | + | | + | + | | +| The `View` instrument selection criteria is as specified. | | | + | + | + | | | + | | + | + | | +| The `View` instrument selection criteria supports wildcards. | X | | + | + | + | | | | | + | + | | +| The `View` instrument selection criteria supports the match-all wildcard. | | | + | + | + | | | | | + | + | | +| The `View` instrument selection criteria supports a unit. | | + | | | | | | | | | | | +| The name of the `View` can be specified. | | | + | + | + | | | + | | + | + | | +| The `View` allows configuring the name description, attributes keys and aggregation of the resulting metric stream. | | | + | + | + | | | + | | + | - | | +| The `View` allows configuring the exemplar reservoir of resulting metric stream. | X | | - | | - | | | | | | - | | +| The SDK allows more than one `View` to be specified per instrument. | X | | + | + | + | | | | | + | + | | +| The `Drop` aggregation is available. | | + | + | + | + | | | | | + | + | | +| The `Drop` aggregation drops all measurements and does not produce a metric stream. | | + | + | + | + | | | | | - | + | | +| The `Default` aggregation is available. | | + | + | + | + | | | | | + | + | | +| The `Default` aggregation uses the specified aggregation by instrument. | | + | + | + | + | | | | | + | + | | +| The `Sum` aggregation is available. | | + | + | + | + | | | + | | + | + | | +| The `Sum` aggregation performs as specified. | | + | + | + | + | | | + | | + | + | | +| The `LastValue` aggregation is available. | | + | + | + | + | | | + | | + | + | | +| The `LastValue` aggregation performs as specified. | | + | + | + | + | | | + | | + | + | | +| The `ExplicitBucketHistogram` aggregation is available. | | - | + | + | + | | | + | | + | + | | +| The `ExplicitBucketHistogram` aggregation performs as specified. | | - | + | + | + | | | + | | + | + | | +| The `ExponentialBucketHistogram` aggregation is available. | | | | | | | | | | | | | +| The `ExponentialBucketHistogram` aggregation performs as specified. | | | | | | | | | | | | | +| The metrics Reader implementation supports registering metric Exporters | | | + | + | + | | | + | | + | + | | +| The metrics Reader implementation supports configuring the default aggregation on the basis of instrument kind. | | | + | | + | | | | | - | - | | +| The metrics Reader implementation supports configuring the default temporality on the basis of instrument kind. | | | + | + | + | | | | | + | | | +| The metrics Exporter has access to the aggregated metrics data (aggregated points, not raw measurements). | | + | + | + | + | | | | | + | + | | +| The metrics Exporter `export` function can not be called concurrently from the same Exporter instance. | | + | + | + | - | | | | | + | + | | +| The metrics Exporter `export` function does not block indefinitely. | | + | + | + | - | | | | | + | + | | +| The metrics Exporter `export` function receives a batch of metrics. | | + | + | + | + | | | + | | + | + | | +| The metrics Exporter `export` function returns `Success` or `Failure`. | | + | + | + | + | | | + | | + | + | | +| The metrics Exporter provides a `ForceFlush` function. | | - | + | + | - | | | + | | + | + | | +| The metrics Exporter `ForceFlush` can inform the caller whether it succeeded, failed or timed out. | | | + | + | - | | | + | | + | + | | +| The metrics Exporter provides a `shutdown` function. | | + | + | + | - | | | + | | + | + | | +| The metrics Exporter `shutdown` function do not block indefinitely. | | + | + | + | - | | | | | + | + | | +| The metrics SDK samples `Exemplar`s from measurements. | | | + | | - | | | | | | - | | +| Exemplar sampling can be disabled. | | | - | | - | | | | | | - | | +| The metrics SDK samples measurements in the context of a sampled trace by default. | | | + | | - | | | | | | - | | +| Exemplars retain any attributes available in the measurement that are not preserved by aggregation or view configuration. | | | + | | - | | | | | | - | | +| Exemplars contain the associated trace id and span id of the active span in the Context when the measurement was taken. | | | + | | - | | | | | | - | | +| Exemplars contain the timestamp when the measurement was taken. | | | + | | - | | | | | | - | | +| The metrics SDK provides an `ExemplarReservoir` interface or extension point. | X | | - | | - | | | + | | | - | | +| An `ExemplarReservoir` has an `offer` method with access to the measurement value, attributes, `Context` and timestamp. | X | | - | | - | | | + | | | - | | +| The metrics SDK provides a `SimpleFixedSizeExemplarReservoir` that is used by default for all aggregations except `ExplicitBucketHistogram`. | | | + | | - | | | + | | | - | | +| The metrics SDK provides an `AlignedHistogramBucketExemplarReservoir` that is used by default for `ExplicitBucketHistogram` aggregation. | | | + | | - | | | | | | - | | +| The metrics SDK provides an `ExemplarFilter` interface or extension point. | X | | - | | - | | | + | | | - | | +| An `ExemplarFilter` has access to the measurement value, attributes, `Context` and timestamp. | X | | - | | - | | | + | | | - | | ## Logs diff --git a/specification/metrics/sdk.md b/specification/metrics/sdk.md index 092c17e1969..c3776142538 100644 --- a/specification/metrics/sdk.md +++ b/specification/metrics/sdk.md @@ -199,6 +199,7 @@ are the inputs: matching zero or more characters. If wildcards are not supported in general, OpenTelemetry SDKs MUST specifically recognize the single `*` wildcard as matching all instruments. + * The `unit` of the Instrument(s) (optional). * The `name` of the Meter (optional). * The `version` of the Meter (optional). * The `schema_url` of the Meter (optional).