* Allow histogram for all instruments
Any instrument that can record negative values, do not include a sum in
the produced aggregation (like the specification recommends).
Resolves#4161
* Add changes to changelog
* Fix TestBucketsSum
* Add debug logging to the metric SDK
Resolves#3722
* Log MeterProvider and Meter setup at info level
* Add changelog entry
---------
Co-authored-by: Chester Cheung <cheung.zhy.csu@gmail.com>
Co-authored-by: Robert Pająk <pellared@hotmail.com>
* Replace Stream AttributeFilter with AttributeKeys
* Rename Stream field AttributeKeys to AllowAttributeKeys
Ensure forward compatibility if a deny-list of attribute keys is ever
added.
* Add change to changelog
* Update PR number in changelog
* Update CHANGELOG.md
Co-authored-by: Damien Mathieu <42@dmathieu.com>
---------
Co-authored-by: Damien Mathieu <42@dmathieu.com>
* Concurrent collect bugfix
* Used sync.Mutex and code cleanup
* Revert "Concurrent collect bugfix"
This reverts commit 1a30f233b6.
* Used sync.Mutex and re-grouped protected members
* Added test and updated changelog
* Updated changelog
* Take care of potential panic in otel.Handle
* Extracted critical section in a separate method and fixed nil scope info
* Lock the whole scope of the func
* Moved otel.Handle out of the critical section
* Fixed calling createScopeInfoMetric twice and updated changelog
* Fixed markdown linter errors
* Added test for nil scopeinfo
* Fix merge artifacts
* Fixed linter errors
* Protect the whole validateMetrics method wity mutex
* Update CHANGELOG.md
* Update exporters/prometheus/exporter.go
Co-authored-by: Robert Pająk <pellared@hotmail.com>
* Update CHANGELOG.md
* Document that Collect is concurrent-safe
* Update exporter_test.go
* Update exporters/prometheus/exporter_test.go
* Update exporters/prometheus/exporter.go
Co-authored-by: David Ashpole <dashpole@google.com>
---------
Co-authored-by: Robert Pająk <pellared@hotmail.com>
Co-authored-by: David Ashpole <dashpole@google.com>
* Format log message before logging with logr
Fixes#4141
The logr calling convention does not support fmt semantics for message
formatting. Format the message before it is sent to logr for logging.
* Add change to changelog
* Fix lint
Don't shadow the log pkg.
* Replace buflogr with funcr
* Run make
* Update exporters/zipkin/zipkin_test.go
Co-authored-by: Robert Pająk <pellared@hotmail.com>
---------
Co-authored-by: Robert Pająk <pellared@hotmail.com>
* validate instrument names when creating them
* add changelog entry
* remove now invalid instrument name from prometheus test
* fix invalid names in meter_test
* keep returning the instrument even if its name is invalid
* make invalid instrument name a known error
* bring back prometheus invalid instrument name test
* remove warning
* fix lint
* move name validation into the lookup method
* fix lint again
* Revert "move name validation into the lookup method"
This reverts commit ec8ccc5fa0.
* rename ErrInvalidInstrumentName to ErrInstrumentName
* switch to explicit validations, instead of a regexp
* Update CHANGELOG.md
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
* remove double check for empty name
* test validation shortcut with a single character
---------
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
Co-authored-by: Aaron Clawson <3766680+MadVikingGod@users.noreply.github.com>
* Add semconv/v1.19.0
Includes adding semconv/internal/v3/ to support the move of
the semantic convention HTTPUserAgentKey to the new key
UserAgentOriginalKey
* Update CHANGELOG.md
Co-authored-by: Robert Pająk <pellared@hotmail.com>
* format http.go.tmpl using tabs instead of spaces
* update http.go.tmpl to use v3 of semconv/internal
* Generate attribute_group.go
---------
Co-authored-by: Robert Pająk <pellared@hotmail.com>
Co-authored-by: Anthony Mirabella <a9@aneurysm9.com>
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
* Revert "Move global metric back to `otel/metric/global` for minor release (#3986)"
This reverts commit 8dba38e02f.
* Add changes to changelog
* Fix versions and go mod tidy
* Run go-mod-tidy
* Bump versions
* Prepare stable-v1 for version v1.15.0
* Prepare experimental-metrics for version v0.38.0
* Fix otlpmetric tests
Check pre 1.0 as well
* Update the chagelog
* Added methods for SpanID and TraceID on bridgeSpanContext
* changed test name
* Added entry in changelog, updated readme, added comments on methods and fixed test case
* updated CHANGELOG.md
* promoted all methods from SpanContext to bridgeSpanContext
* fixed readme and removed redudant IsSampled() from bridgeContext
* fixed readme lint
* Apply suggestions from code review
Co-authored-by: Robert Pająk <pellared@hotmail.com>
* addressed code review comment
---------
Co-authored-by: Robert Pająk <pellared@hotmail.com>
* Revert "Remove the deprecated `otel/metric/global` pkg (#3829)"
This reverts commit 60f7d42d1e.
* Revert "Support a global MeterProvider in `go.opentelemetry.io/otel` (#3818)"
This reverts commit 813936187e.
* Remove top level metric global
* Add change to changelog
* docs(typos): Run codespell to fix typos
There were a lot of typos through the repository, so I ran
[codespell][], a tool for automatically fixing typos, to fix them.
```console
make codespell
```
There's already a tool called [misspell][] that's supposed to take care
of this, but misspell hasn't been updated for 6 years, and it doesn't
seem to be catching any of the typos that codespell can.
[codespell]: https://github.com/codespell-project/codespell
[misspell]: https://github.com/client9/misspell
* Revert and ignore spelling for Consequentially
* Add GH workflow for codespell
* Revert GH Workflow and Makefile for codespell
Per @pellared, since there's no instructions for setting up codespell,
it was suggested that the changes for setting up a workflow and section
in Makefile include instructions for setting up codespell as well.
* Revert spelling on consequently
---------
Co-authored-by: Chester Cheung <cheung.zhy.csu@gmail.com>
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
* fix aggregation.Default to properly return the default one
* add changelog entry
* default aggregation does not error anymore
* test all instrument kinds
* PoC of embedded private method ifaces
* Rename embed to embedded
* Add an embedded iface for all instruments
* Fix metric/instrument tests
* Fix global and otel
* Fix SDK
* Comment the embedded pkg types
* Update the embedded pkg docs
* Update otel/metric docs about impls
* Update otel/metric type docs on impl
* Update docs in otel/metric/instrument on default
* Add changes to changelog
* Apply suggestions from code review
Co-authored-by: Robert Pająk <pellared@hotmail.com>
* Apply feedback on URLs
* Reword based on feedback
* Make it clear we only recommended embedding noop
* Ignore links with godot linter
---------
Co-authored-by: Robert Pająk <pellared@hotmail.com>
* Add Version func to otel/sdk
* Update sdk/resource to use sdk version
* Remove unused UserAgent from sdk/internal
* Add changes to changelog
* Update CHANGELOG.md
Co-authored-by: Robert Pająk <pellared@hotmail.com>
---------
Co-authored-by: Robert Pająk <pellared@hotmail.com>
* add warning log about using simpleSpanProcessor in production
* add changelog entry
* fix changelog
* switch to using the new Warn logging function
* revert alignment formatting in changelog
---------
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
* Bump versions
* Prepare stable-v1 for version v1.15.0-rc.2
* Prepare experimental-metrics for version v0.38.0-rc.2
* Update changelog
* Update CHANGELOG.md
Co-authored-by: Robert Pająk <pellared@hotmail.com>
---------
Co-authored-by: Robert Pająk <pellared@hotmail.com>
* add platform specific hostIDReaders
* add WithHostID option to Resource
* add changelog entry
* Apply suggestions from code review
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
* linting
* combine platform specific readers and tests
This allows us to run tests for the BSD, Darwin, and Linux readers
on all platforms.
* add todo to use assert.AnError after resource.Detect error handling is updated
* move HostID test utilities to host_id_test
* return assert.AnError from mockHostIDProviderWithError
* use assert.ErrorIs
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
---------
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
Co-authored-by: Aaron Clawson <3766680+MadVikingGod@users.noreply.github.com>
* Introduce `Warn` function in global package
* Cover log levels with tests
---------
Co-authored-by: Robert Pająk <pellared@hotmail.com>
Co-authored-by: Aaron Clawson <3766680+MadVikingGod@users.noreply.github.com>
* Move metric No-Op to noop pkg
* Remove the unneeded embedded ifaces
* Update CHANGELOG.md
Co-authored-by: Peter Liu <lpfvip2008@gmail.com>
---------
Co-authored-by: Peter Liu <lpfvip2008@gmail.com>
Co-authored-by: Aaron Clawson <3766680+MadVikingGod@users.noreply.github.com>
* Pool sortables used to create attribute sets
* Move sync pool to attribute pkg
* Add change to changelog
* Fix comment
* Apply suggestions from code review
Co-authored-by: Peter Liu <lpfvip2008@gmail.com>
* Update sdk/metric/instrument.go
Co-authored-by: Robert Pająk <pellared@hotmail.com>
* Update comment based on feedback
* Apply feedback
---------
Co-authored-by: Peter Liu <lpfvip2008@gmail.com>
Co-authored-by: Robert Pająk <pellared@hotmail.com>
* new stdoutmetric encoder with ignore timestamp
Signed-off-by: Peter Liu <lpfvip2008@gmail.com>
* refactor to avoid using a dedicated encoder
Signed-off-by: Peter Liu <lpfvip2008@gmail.com>
* remove useless encoder code
Signed-off-by: Peter Liu <lpfvip2008@gmail.com>
* dont't change the original data
Signed-off-by: Peter Liu <lpfvip2008@gmail.com>
* Update exporters/stdout/stdoutmetric/exporter.go
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
* complete test data and add changelog entry
Signed-off-by: Peter Liu <lpfvip2008@gmail.com>
* Move changelog entry to unreleased
---------
Signed-off-by: Peter Liu <lpfvip2008@gmail.com>
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
Co-authored-by: Tyler Yahn <codingalias@gmail.com>
* Update Detect and New to wrap errors
* Add TestNewWrapedError
Test that New returns an error that can be unwrapped.
* Add changes to changelog
* Clarify and simplify errors
* Move ErrorHandler impl to internal
To avoid the import cycle, the otel/metric package needs to not import
otel. To achieve this, the error handling implementation is moved to the
otel/internal/global package where both can import the needed
functionality.
* Add global metric to go.opentelemetry.io/otel
* Crosslink and update to global metric in otel
* Add changes to changelog
* Set PR number in changelog
* Add global metric unit tests
* Rename MeterProivder() to GetMeterProivder()
* Add TODO to remove nolint comments
* Bump mod versions
* Add bridge/opentracing/test to versions.yaml
* Prepare stable-v1 for version v1.14.0
* Prepare experimental-metrics for version v0.37.0
* Prepare experimental-schema for version v0.0.4
* Update changelog
* Replace Unit from metric/unit with string
Deprecate the units package. This package will not be included in the
metric GA.
* Add changes to changelog
* Accept scope attributes during Tracer creation
The OTel specification requires the instrumentation attributes are
accepted by the API for the Tracer. This adds a TracerOption to satisfy
that requirement.
* Do no silently drop unknown schema data
* Add entry to changelog
* Add PR number to changelog
---------
Co-authored-by: Chester Cheung <cheung.zhy.csu@gmail.com>
Co-authored-by: Aaron Clawson <3766680+MadVikingGod@users.noreply.github.com>
* Merge instrument cache to inserter
The current pipeline resolution path will only add the resolved
aggregators to the pipeline when it creates one (cache miss). It will
not add it if there is a cache hit. This means (since we cache
instruments at the meter level, not the pipeline level) the first reader
in a multiple-reader setup is the only one that will collect data for
that aggregator. All other readers will have a cache hit and nothing is
added to the pipeline. This is causing #3720.
This resolves#3720 by moving the instrument caching into the inserter.
This means aggregators are cached at the reader level, not the meter.
* Rename aggCV to aggVal
---------
Co-authored-by: Chester Cheung <cheung.zhy.csu@gmail.com>
* Accept scope attr during Meter creation
* Fix lint
* Add changes to changelog
* Return a Set from InstrumentationAttributes
Likely these attributes will be stored as a Set in the SDK. Don't cause
two conversions because we return a slice here.
* Add config tests
* Fix lint
* Bump CI default version of Go to 1.20
* Use crypto/rand in Jaeger exporter testing
* Use crypto/rand Reader in otlp exporters
* Remove use of dep rand.Seed in prometheus exporter
* Update changelog with public changes
* Quote DEFAULT_GO_VERSION value
* Update .github/workflows/ci.yml
* Update CHANGELOG.md
Co-authored-by: Damien Mathieu <42@dmathieu.com>
---------
Co-authored-by: Damien Mathieu <42@dmathieu.com>
* update versions.yaml for release
Signed-off-by: Anthony J Mirabella <a9@aneurysm9.com>
* Prepare stable-v1 for version v1.13.0
* Prepare experimental-metrics for version v0.36.0
* Update CHANGELOG
Signed-off-by: Anthony J Mirabella <a9@aneurysm9.com>
---------
Signed-off-by: Anthony J Mirabella <a9@aneurysm9.com>
* Update module versions
* Prepare stable-v1 for version v1.12.0
* Prepare experimental-metrics for version v0.35.0
* Prepare experimental-schema for version v0.0.4
* Update the CHANGELOG
* Undo bump to experimental-schema
Revert to original version as nothing has changed.
* Fix PR number in changelog
* Move change from #3497 into current release
* Use Extrema type for Histogram min/max
* Add case for Extrema in AssertHasAttributes
* Add changes to changelog
* Add NewExtrema
* Add metricdatatest tests
* Use getter for Extrema
* Fix Extrema doc language
* Correct dataset to be one word
* Ensure multiple extrema are tested in a dataset
* Update RegisterCallback and Callback decls
RegisterCallback accept variadic Asynchronous instruments instead of a
slice.
Callback accept an observation result recorder to ensure instruments
that are observed by a callback.
* Update global impl
* Update noop impl
* Update SDK impl
* Fix prometheus example
* Fix metric API example_test
* Remove unused registerabler
* Rename ObservationRecorder to MultiObserver
* Update Callback documentation about MultiObserver
* Remove the Observe method from async inst
* Revert to iface for Observers
* Fix async inst docs
* Update global async delegate race test
* Restore removed observe doc
* Remove TODO
* Remove stale comment
* Update changelog
* Combine spatially aggregated precomputed vals
Fix#3439
When an attribute filter drops a distinguishing attribute during the
aggregation of a precomputed sum add that value to existing, instead of
just setting the value as an override (current behavior).
* Ignore false positive lint error and test method
* Add fix to changelog
* Handle edge case of exact set after filter
* Fix filter and measure algo for precomp
* Add tests for precomp sums
* Unify precomputedMap
* Adds example from supplimental guide
* Fixes for lint
* Update sdk/metric/meter_example_test.go
* Fix async example test
* Reduce duplicate code in TestAsynchronousExample
* Clarify naming and documentation
* Fix spelling errors
* Add a noop filter to default view
Co-authored-by: Chester Cheung <cheung.zhy.csu@gmail.com>
Co-authored-by: Aaron Clawson <3766680+MadVikingGod@users.noreply.github.com>
* Update RegisterCallback and Callback declerations
RegisterCallback accepts variadic Asynchronous instruments instead of a
slice.
Callback accepts an observation result recorder to ensure instruments
that are observed by a callback.
* Update global, noop, SDK implementations
* Fix examples
* Add changes to changelog
* Test RegisterCallback for invalid observers
* Test callbacks from foreign sources not collected
* Support registering delegating instruments
* Restructure RegisterCallback method
Instead of accepting instruments to register the callback with as a
slice, accept them as variadic arguments.
* Add changes to changelog
* Add PR number to changes
* Split metric inst config
Instead of having the same configuration for both the Synchronous and
Asynchronous instruments, use specific options for both.
* Use Async/Sync opt for appropriate inst
* Update noop inst providers
* Update internal global impl
* Update sdk
* Remove unused method for callbackOption
* Test instrument configuration
* Lint imports
* Add changes to changelog
* Refactor callbacks and further split opts
Define callbacks to return the value observed. Because of the different
types returned for different observables, the callbacks and options are
move to the sync/async packages.
* Update noop impl
* Fix example_test.go
* Fix internal impl
* Update Callbacks
Return observations for distinct attr sets.
* Refactor common code in sdk/metric inst provider
* Update examples and prom exporter
* Generalize callback
* Update changelog
* Add unit tests for callback
* Add meter tests for cbacks on creation
* Rename Observations to Measurements
* Update Callback to accept an Observer
* Update SDK impl
* Move conf to instrument pkg
* Apply suggestions from code review
* Create metric API Callback type
Document the type according the OTel specification requirements.
* Update all impls of the metric API with new type
* Add changes to changelog
* Update PR number in changelog entry
* Let retry return the first retryable error
* examples/otel-collector: use default collector port
* use correct port
* revert example change
* tidy
* changelog
* lint
* Address comments in PR.
* Updated Changelog.
* Fixes for PR.
* merge changelog
* remove one error
Co-authored-by: Chester Cheung <cheung.zhy.csu@gmail.com>
Co-authored-by: Aaron Clawson <3766680+MadVikingGod@users.noreply.github.com>
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
* Update Meter RegisterCallback method
Return a Registration from the method that can be used by the caller to
unregister their callback.
Update documentation of the method to better explain expectations of
use and implementation.
* Update noop impl
* Update global impl
* Test global Unregister concurrent safe
* Use a map to track reg in global impl
* Update sdk impl
* Use a list for global impl
* Fix prom example
* Lint metric/meter.go
* Fix metric example
* Placeholder for changelog
* Update PR number in changelog
* Update sdk/metric/pipeline.go
Co-authored-by: Aaron Clawson <3766680+MadVikingGod@users.noreply.github.com>
* Add test unregistered callback is not called
Co-authored-by: Aaron Clawson <3766680+MadVikingGod@users.noreply.github.com>
* add RegisterProducer method and metric.Producer interface
* rename testProducer to testSDKProducer
* rename testMetrics to testResourceMetrics
* add testExternalProducer for testing bridges
* add test data for testing external producers
* clean up help text
* unit tests for external Producer
* changelog
* improve test coverage
* Update CHANGELOG.md
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
* support partial errors
* fix lint
* add additional test
* unallocate producers on shutdown
* don't register Producers after shutdown
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
* Add the InstrumentKind type and vars to sdk/metric
* Add the Instrument type to sdk/metric
* Add the Stream type to sdk/metric
* Add the View type to sdk/metric
* Add NewView to create Views matching OTel spec
* Add unit tests for NewView
* Add changes to changelog
* Apply suggestions from code review
Co-authored-by: Anthony Mirabella <a9@aneurysm9.com>
* Update CHANGELOG.md
* Update match and mask comments of Instrument
* Explain wildcard logic in NewView with comment
* Drop views that replace name for multi-inst match
* Comment how users are expected to match zero-vals
* Remove InstrumentKind and Scope from Stream
* Fix redundant word in NewView comment
Co-authored-by: Anthony Mirabella <a9@aneurysm9.com>
Co-authored-by: Chester Cheung <cheung.zhy.csu@gmail.com>
* Do not return an error for Drop aggs
The async instruments currently return an error if and only if there are
no aggregators returned from a resolve. Returning no aggregators means
the instrument aggregation is drop. Do not include this in the error
reporting decision.
* Only registers callbacks if non-drop agg is used
The instruments passed to RegisterCallback need to have some aggregation
defined otherwise it is implied they have a Drop aggregation. Check that
at least one instrument passed has an aggregation other than Drop before
registering the callback with the pipelines.
Also, return an error if the user passed another API implementation of
an asynchronous instrument.
* Remove unneeded TODO from pipeline
* Add changes to changelog
* Test callback not called for all drop instruments
* Test RegisterCallback returns err for non-SDK inst
* Fail gracefully for non-SDK instruments
Co-authored-by: Chester Cheung <cheung.zhy.csu@gmail.com>
* Return empty nil aggs if no meas
* Update tests with new expected behavior
* Add change to changelog
* Set PR number in changelog
* Run lint
* Fix pipeline_test
* Scope change in changelog to pkg
* Clean up init of agg types
* Do not handle empty partial OTLP successes
Fix#3432.
The OTLP server will respond with empty partial success responses (i.e.
empty messages and 0 count). Treat these as equivalent to it not being
set/present like the documentation specifies in the proto:
724e427879/opentelemetry/proto/collector/trace/v1/trace_service.proto (L58)
* Fix tests
* Add changes to changelog
* Split WithView from WithReader
* Accept readers and views params in newPipelines
* Update MeterProvider pipes init
* Fix WithView comment
* Fix view example MeterProvider option
* Fix With{View,Reader} option in prom exporter test
* Test Reader not required to be comparable
* Add changes to changelog
* Fix changelog option name
* export status codes to upper case in zipkin exporter
* add test cases for status UNSET and ERROR
* Update exporters/zipkin/model.go
correct the usage of case-sensitive terms
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
* change unit test cases to test exact behavior
* move this PR to unrelease section in the CHANGELOG.md
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
* Update API docs
Update the async instrument docs for the counters types to explain that
the value recorded is assumed by implementations to be the cumulative
sum.
* Refactor precomputed delta sum aggregation
Report the delta Aggregation while supporting cumulative Aggregate
values.
* Add changes to changelog
* Bump module versions
* Prepare stable-v1 for version v1.11.1
* Prepare experimental-metrics for version v0.33.0
* Update the changelog
* Update CHANGELOG.md
* Update Asynchronous API docs
Clarify the Counter and UpDownCounter Observe values are the exact
counter value, not increments to the previous measurements.
* Add the pre-computed sum Aggregator
* Test the PreComputedSum
* Use the PrecomputedSum for async counters
* Add changes to changelog
* Ignore false-positive lint error
* Split NewPrecomputedSum into delta/cumulative vers
* Decode values from OTEL_RESOURCE_ATTRIBUTES
The W3C spec specifies that values must be percent-encoded so when
reading the environment variable `OTEL_RESOURCE_ATTRIBUTES` the SDK
should decode them.
This is done by the `baggage` package, but its behaviour in case of
errors is slightly different from the current implementation of the SDK,
more specifically in cases where a key is missing a value. The SDK
returns a partial resource while the `bagage` package returns nil.
This may be considered a breaking change, so this commit fixes the
current implementation instead of using `baggage.Parse`.
* Add changelog entry for #2963
* Use otel.Handle on OTEL_RESOURCE_ATTRIBUTES decode error
* retain original value when decoding fails
* docs: update CHANGELOG
Co-authored-by: Chester Cheung <cheung.zhy.csu@gmail.com>
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>