mirror of
https://github.com/open-telemetry/opentelemetry-go.git
synced 2024-12-28 21:09:17 +02:00
932a4d8a5f
892 Commits
Author | SHA1 | Message | Date | |
---|---|---|---|---|
Sam Xie
|
932a4d8a5f
|
Fix panic instruments creation when setting meter provider (#5758)
Related #5757. This is a quick fix. |
||
David Ashpole
|
e47618fc36
|
Fix duplicate instrumentation memory leak (#5754)
Fixes https://github.com/open-telemetry/opentelemetry-go/issues/5753 The added test fails on main, but passes after the fix. --------- Co-authored-by: Sam Xie <sam@samxie.me> |
||
Sam Xie
|
172cfb7208
|
Replace go 1.21 with go 1.22 in go mod (#5740)
Related #5736 |
||
Tyler Yahn
|
023025f17d
|
Drop support for Go 1.21 (#5736)
Co-authored-by: Sam Xie <sam@samxie.me> Co-authored-by: Chester Cheung <cheung.zhy.csu@gmail.com> |
||
Tyler Yahn
|
6b1d94f21c
|
Release v1.29.0/v0.51.0/v0.5.0 (#5732)
This release is the last to support [Go 1.21]. The next release will require at least [Go 1.22]. ### Added - Add MacOS ARM64 platform to the compatibility testing suite. (#5577) - Add `InstrumentationScope` field to `SpanStub` in `go.opentelemetry.io/otel/sdk/trace/tracetest`, as a replacement for the deprecated `InstrumentationLibrary`. (#5627) - Make the initial release of `go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc`. This new module contains an OTLP exporter that transmits log telemetry using gRPC. This module is unstable and breaking changes may be introduced. See our [versioning policy](VERSIONING.md) for more information about these stability guarantees. (#5629) - Add `Walk` function to `TraceState` in `go.opentelemetry.io/otel/trace` to iterate all the key-value pairs. (#5651) - Bridge the trace state in `go.opentelemetry.io/otel/bridge/opencensus`. (#5651) - Zero value of `SimpleProcessor` in `go.opentelemetry.io/otel/sdk/log` no longer panics. (#5665) - The `FilterProcessor` interface type is added in `go.opentelemetry.io/otel/sdk/log/internal/x`. This is an optional and experimental interface that log `Processor`s can implement to instruct the `Logger` if a `Record` will be processed or not. It replaces the existing `Enabled` method that is removed from the `Processor` interface itself. It does not fall within the scope of the OpenTelemetry Go versioning and stability [policy](./VERSIONING.md) and it may be changed in backwards incompatible ways or removed in feature releases. (#5692) - Support [Go 1.23]. (#5720) ### Changed - `NewMemberRaw`, `NewKeyProperty` and `NewKeyValuePropertyRaw` in `go.opentelemetry.io/otel/baggage` allow UTF-8 string in key. (#5132) - `Processor.OnEmit` in `go.opentelemetry.io/otel/sdk/log` now accepts a pointer to `Record` instead of a value so that the record modifications done in a processor are propagated to subsequent registered processors. (#5636) - `SimpleProcessor.Enabled` in `go.opentelemetry.io/otel/sdk/log` now returns `false` if the exporter is `nil`. (#5665) - Update the concurrency requirements of `Exporter` in `go.opentelemetry.io/otel/sdk/log`. (#5666) - `SimpleProcessor` in `go.opentelemetry.io/otel/sdk/log` synchronizes `OnEmit` calls. (#5666) - The `Processor` interface in `go.opentelemetry.io/otel/sdk/log` no longer includes the `Enabled` method. See the `FilterProcessor` interface type added in `go.opentelemetry.io/otel/sdk/log/internal/x` to continue providing this functionality. (#5692) - The `SimpleProcessor` type in `go.opentelemetry.io/otel/sdk/log` is no longer comparable. (#5693) - The `BatchProcessor` type in `go.opentelemetry.io/otel/sdk/log` is no longer comparable. (#5693) ### Fixed - Correct comments for the priority of the `WithEndpoint` and `WithEndpointURL` options and their corresponding environment variables in `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp`. (#5584) - Pass the underlying error rather than a generic retry-able failure in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp`, `go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp` and `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp`. (#5541) - Correct the `Tracer`, `Meter`, and `Logger` names used in `go.opentelemetry.io/otel/example/dice`. (#5612) - Correct the `Tracer` names used in `go.opentelemetry.io/otel/example/namedtracer`. (#5612) - Correct the `Tracer` name used in `go.opentelemetry.io/otel/example/opencensus`. (#5612) - Correct the `Tracer` and `Meter` names used in `go.opentelemetry.io/otel/example/otel-collector`. (#5612) - Correct the `Tracer` names used in `go.opentelemetry.io/otel/example/passthrough`. (#5612) - Correct the `Meter` name used in `go.opentelemetry.io/otel/example/prometheus`. (#5612) - Correct the `Tracer` names used in `go.opentelemetry.io/otel/example/zipkin`. (#5612) - Correct comments for the priority of the `WithEndpoint` and `WithEndpointURL` options and their corresponding environment variables in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc` and `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp`. (#5641) - Correct comments for the priority of the `WithEndpoint` and `WithEndpointURL` options and their corresponding environment variables in `go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp`. (#5650) - Stop percent encoding header environment variables in `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc`, `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp`, `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc` and `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp` (#5705) - Remove invalid environment variable header keys in `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc`, `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp`, `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc` and `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp` (#5705) ### Removed - The `Enabled` method of the `SimpleProcessor` in `go.opentelemetry.io/otel/sdk/log` is removed. (#5692) - The `Enabled` method of the `BatchProcessor` in `go.opentelemetry.io/otel/sdk/log` is removed. (#5692) [Go 1.23]: https://go.dev/doc/go1.23 [Go 1.22]: https://go.dev/doc/go1.22 [Go 1.21]: https://go.dev/doc/go1.21 |
||
Tyler Yahn
|
002c0a4c03
|
Move log.Processor.Enabled to independent FilterProcessor interfaced type (#5692)
Closes #5425 Our current log `Processor` interface contains more functionality than the [OTel spec](https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/logs/sdk.md#logrecordprocessor-operations). The additional functionality allows processors to report back to the API if a Record should be constructed and emitted or not, which is quite helpful[^1][^2][^3][^4][^5]. This removes the `Enabled` method from the `Processor` type. It adds this functionality a new optional and experimental `FilterProcessor` interface type. The logger and provider are updated to check for this optional interface to be implemented with the configured processors and uses them to back the `Logger.Enabled` method, preserving existing functionality. By making this change: - The `Processor` interface is now compliant with the OTel spec and does not contain any additional unspecified behavior. - All `Processor` implementations are no longer required to implement an `Enabled` method. The default, when they do not implement this method, is to assume they are enabled. ### Benchmark ```terminal goos: linux goarch: amd64 pkg: go.opentelemetry.io/otel/sdk/log cpu: Intel(R) Core(TM) i7-8550U CPU @ 1.80GHz │ old.txt │ new7.txt │ │ sec/op │ sec/op vs base │ LoggerEnabled-8 133.30n ± 3% 32.36n ± 3% -75.72% (p=0.000 n=10) │ old.txt │ new7.txt │ │ B/op │ B/op vs base │ LoggerEnabled-8 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹ ¹ all samples are equal │ old.txt │ new7.txt │ │ allocs/op │ allocs/op vs base │ LoggerEnabled-8 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹ ¹ all samples are equal ``` This is a significant performance improvement due to the `Record` no longer being converted from the API version to the SDK version. [^1]: https://pkg.go.dev/go.opentelemetry.io/contrib/processors/minsev [^2]: https://pkg.go.dev/go.opentelemetry.io/otel/sdk/log#BatchProcessor.Enabled [^3]: https://pkg.go.dev/go.opentelemetry.io/otel/sdk/log#SimpleProcessor.Enabled [^4]: |
||
jianwu
|
fe6c67e7e9
|
OpenCensus bridge to support TraceState (#5651)
# Summary This is to fix issue: #5642 The original logic skips copying TraceState when convert Spans between OTel and OC. This PR also updated the OTel TraceState to expose the Keys function for the propagation purpose. --------- Co-authored-by: Sam Xie <sam@samxie.me> |
||
Zhihan Li
|
83ae9bd0e3
|
Bugfix: OTLP exporters should not percent decode the key when parsing HEADERS env vars (#5705)
Bugfix #5623 As stated in the issue, we need to avoid parsing the key and instead implement a validation check for it. I've added some unit tests to verify this fix. However, I noticed a comment at the top of this file: ``` // Code created by gotmpl. DO NOT MODIFY. // source: internal/shared/otlp/envconfig/envconfig.go.tmpl ``` It seems that `internal/shared/otlp/envconfig/envconfig.go.tmpl` is the source template for this file. Since this template matches `exporters/otlp/otlptrace/otlptracegrpc/internal/envconfig/envconfig.go`, I updated the template to maintain consistency. I’m not entirely sure if this approach is correct, so please confirm if this is the right course of action. --------- Co-authored-by: Fools <54661071+Charlie-lizhihan@users.noreply.github.com> Co-authored-by: Damien Mathieu <42@dmathieu.com> Co-authored-by: Robert Pająk <pellared@hotmail.com> Co-authored-by: Chester Cheung <cheung.zhy.csu@gmail.com> Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com> |
||
Damien Mathieu
|
083d03e605
|
Add support for go 1.23 (#5720)
Go 1.23 was released a few days ago. https://go.dev/blog/go1.23 This also upgrades golangci-lint (and fixes new issues), since it appears 1.59 doesn't work nicely with Go 1.23. --------- Co-authored-by: Sam Xie <sam@samxie.me> |
||
Sam Xie
|
d61bbf18f5
|
baggage: Accept non-ASCII keys (#5132)
resolves #4946 I also add additional test cases to cover more lines. benchmark results: ``` goos: darwin goarch: arm64 pkg: go.opentelemetry.io/otel/baggage │ old.txt │ new.txt │ │ sec/op │ sec/op vs base │ New-10 402.3n ± 1% 422.4n ± 6% +4.98% (p=0.000 n=10) NewMemberRaw-10 10.82n ± 0% 13.90n ± 1% +28.51% (p=0.000 n=10) Parse-10 803.8n ± 1% 795.0n ± 1% -1.09% (p=0.011 n=10) String-10 682.6n ± 0% 610.0n ± 2% -10.63% (p=0.000 n=10) ValueEscape/nothing_to_escape-10 4.856n ± 0% 4.849n ± 0% ~ (p=0.279 n=10) ValueEscape/requires_escaping-10 22.47n ± 1% 22.36n ± 1% ~ (p=0.342 n=10) ValueEscape/long_value-10 513.3n ± 1% 510.1n ± 0% -0.62% (p=0.006 n=10) MemberString-10 430.8n ± 2% 471.3n ± 2% +9.41% (p=0.000 n=10) geomean 124.5n 128.5n +3.22% │ old.txt │ new.txt │ │ B/op │ B/op vs base │ New-10 704.0 ± 0% 704.0 ± 0% ~ (p=1.000 n=10) ¹ NewMemberRaw-10 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹ Parse-10 888.0 ± 0% 888.0 ± 0% ~ (p=1.000 n=10) ¹ String-10 936.0 ± 0% 840.0 ± 0% -10.26% (p=0.000 n=10) ValueEscape/nothing_to_escape-10 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹ ValueEscape/requires_escaping-10 16.00 ± 0% 16.00 ± 0% ~ (p=1.000 n=10) ¹ ValueEscape/long_value-10 576.0 ± 0% 576.0 ± 0% ~ (p=1.000 n=10) ¹ MemberString-10 656.0 ± 0% 656.0 ± 0% ~ (p=1.000 n=10) ¹ geomean ² -1.34% ² ¹ all samples are equal ² summaries must be >0 to compute geomean │ old.txt │ new.txt │ │ allocs/op │ allocs/op vs base │ New-10 8.000 ± 0% 8.000 ± 0% ~ (p=1.000 n=10) ¹ NewMemberRaw-10 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹ Parse-10 9.000 ± 0% 9.000 ± 0% ~ (p=1.000 n=10) ¹ String-10 10.000 ± 0% 8.000 ± 0% -20.00% (p=0.000 n=10) ValueEscape/nothing_to_escape-10 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹ ValueEscape/requires_escaping-10 1.000 ± 0% 1.000 ± 0% ~ (p=1.000 n=10) ¹ ValueEscape/long_value-10 2.000 ± 0% 2.000 ± 0% ~ (p=1.000 n=10) ¹ MemberString-10 4.000 ± 0% 4.000 ± 0% ~ (p=1.000 n=10) ¹ geomean ² -2.75% ² ¹ all samples are equal ² summaries must be >0 to compute geomean ``` FYI, the old implementation of `NewMemberRaw` didn't verify the value, so the benchmark result of `NewMemberRaw` is not an apple-to-apple comparison of `utf8.ValidString` and `validateKey`. --------- Co-authored-by: Chester Cheung <cheung.zhy.csu@gmail.com> Co-authored-by: Robert Pająk <pellared@hotmail.com> |
||
Tyler Yahn
|
c4ebcaa08d
|
Ensure exported struct in sdk/log are not comparable (#5693)
Ensure the `Record` and `Provider` continue to be non-comparable. Restrict `BatchProcessor` and `SimpleProcessor` to be non-comparable. There is no obvious reason an end-user will need to compare these types, and we want to keep the possibility of changing the internals without changing this behavior. if comparability is required by end-users in the future we can add `Equal(other T)` methods in the future. |
||
Robert Pająk
|
69e235829e
|
sdk/log: SimpleProcessor synchronizes OnEmit calls (#5666)
From https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/logs/sdk.md#export: > `Export` will never be called concurrently for the same exporter instance. From our SDK perspective this change will make https://pkg.go.dev/go.opentelemetry.io/otel/exporters/stdout/stdoutlog concurrent-safe when used with the simple processor. Before the change, there can be multiple goroutines calling `Write` in parallel (via `json.Encoder.Encode`). ### Remarks [Maybe we should simply state that "whole" exporter implementation does not need to be concurrent-safe?](https://github.com/open-telemetry/opentelemetry-specification/pull/4173#discussion_r1699958752) However: 1. we would need to make complex changes in `BatchExporter` to synchronize the `Export`, `Shutdown`, `ForceFlush` calls 2. we would need to update all exporters (remove synchronization) and simple exporter (add locks to `Shutdown`, `ForceFlush`) 3. I am 100% not sure if this would be compliant with the specification - I think it would be complaint because we would simply give stronger safety-measures We should probably discuss it separately, but I wanted to highlight my though process. Even if we decide that simple and batch processors to synchronize all calls then I would prefer to address it in a separate PR. Related spec clarification PR: - https://github.com/open-telemetry/opentelemetry-specification/pull/4173 |
||
Robert Pająk
|
f079b03364
|
sdk/log: SimpleProcessor to not panic for zero value (#5665) | ||
Sam Xie
|
9e5b316e3c
|
Correct the comment for the priority of options and environments on otlploghttp (#5650)
Part of https://github.com/open-telemetry/opentelemetry-go/issues/5379 |
||
Robert Pająk
|
8e8ad092cc
|
sdk/log: Processor.OnEmit accetps a Record pointer (#5636)
## What Change `Processor.OnEmit` methods to accept a record pointer. ## Why Fixes https://github.com/open-telemetry/opentelemetry-go/issues/5219 This would be specification compliant according to discussions around https://github.com/open-telemetry/opentelemetry-specification/pull/4067 This is inline of how processors Go span processors works and how log processors work in other languages. If the performance (an additional heap allocation during log processing) would occur to be a significant problem for some users, we have at few possible solutions: 1. Utilize PGO which may also lead to decreasing heap allocations (sources: https://landontclipp.github.io/blog/2023/08/25/profile-guided-optimizations-in-go/#devirtualization, https://andrewwphillips.github.io/blog/pgo.html). Currently it does not but I expect it may change in future. 2. Improve the Go compilers escape analysis (related to previous point) 3. introduce new "chaining processor" which can be also desirable in other languages ## Benchstat `old` is from `main`. `new` is from current branch. `new-pgo` is from current branch with PGO optimization. I first run benchmarks to generate a CPU profile using `go test -run=^$ -bench=. -count=10 -cpuprofile default.pgo` and then I rerun the tests with PGO. Currently, the number of heap allocations is the same. ``` goos: linux goarch: amd64 pkg: go.opentelemetry.io/otel/sdk/log cpu: Intel(R) Core(TM) i9-10885H CPU @ 2.40GHz │ old.txt │ new.txt │ new-pgo.txt │ │ sec/op │ sec/op vs base │ sec/op vs base │ BatchProcessorOnEmit-16 402.7n ± 18% 382.0n ± 7% ~ (p=0.247 n=10) 376.7n ± 14% ~ (p=0.210 n=10) Processor/Simple-16 350.9n ± 9% 782.5n ± 6% +123.00% (p=0.000 n=10) 755.1n ± 5% +115.19% (p=0.000 n=10) Processor/Batch-16 1.333µ ± 15% 1.497µ ± 11% +12.27% (p=0.000 n=10) 1.528µ ± 8% +14.63% (p=0.000 n=10) Processor/SetTimestampSimple-16 329.5n ± 15% 711.6n ± 4% +115.93% (p=0.000 n=10) 721.9n ± 5% +119.04% (p=0.000 n=10) Processor/SetTimestampBatch-16 1.163µ ± 2% 1.524µ ± 3% +31.03% (p=0.000 n=10) 1.461µ ± 5% +25.57% (p=0.000 n=10) Processor/AddAttributesSimple-16 408.7n ± 3% 810.1n ± 4% +98.21% (p=0.000 n=10) 830.1n ± 4% +103.11% (p=0.000 n=10) Processor/AddAttributesBatch-16 1.270µ ± 2% 1.623µ ± 4% +27.71% (p=0.000 n=10) 1.597µ ± 7% +25.66% (p=0.000 n=10) Processor/SetAttributesSimple-16 436.2n ± 10% 796.1n ± 3% +82.50% (p=0.000 n=10) 817.6n ± 4% +87.43% (p=0.000 n=10) Processor/SetAttributesBatch-16 1.202µ ± 2% 1.552µ ± 2% +29.06% (p=0.000 n=10) 1.659µ ± 11% +37.96% (p=0.000 n=10) LoggerNewRecord/5_attributes-16 366.6n ± 3% 363.7n ± 7% ~ (p=0.952 n=10) 426.2n ± 7% +16.27% (p=0.000 n=10) LoggerNewRecord/10_attributes-16 1.711µ ± 2% 1.909µ ± 18% +11.57% (p=0.000 n=10) 2.077µ ± 10% +21.39% (p=0.000 n=10) LoggerProviderLogger-16 650.1n ± 4% 690.1n ± 8% +6.15% (p=0.019 n=10) 737.6n ± 13% +13.47% (p=0.004 n=10) WalkAttributes/1_attributes-16 5.264n ± 12% 5.510n ± 8% ~ (p=0.812 n=10) 5.865n ± 5% +11.41% (p=0.011 n=10) WalkAttributes/10_attributes-16 5.440n ± 8% 5.881n ± 7% +8.12% (p=0.004 n=10) 6.104n ± 7% +12.21% (p=0.005 n=10) WalkAttributes/100_attributes-16 5.403n ± 9% 5.894n ± 9% +9.10% (p=0.029 n=10) 5.783n ± 6% ~ (p=0.052 n=10) WalkAttributes/1000_attributes-16 5.196n ± 4% 5.860n ± 8% +12.79% (p=0.000 n=10) 5.981n ± 13% +15.13% (p=0.002 n=10) SetAddAttributes/SetAttributes-16 181.2n ± 14% 208.1n ± 12% +14.85% (p=0.005 n=10) 209.9n ± 11% +15.87% (p=0.007 n=10) SetAddAttributes/AddAttributes-16 156.7n ± 14% 161.1n ± 16% ~ (p=0.190 n=10) 165.5n ± 15% ~ (p=0.315 n=10) SimpleProcessorOnEmit-16 11.775n ± 10% 9.027n ± 17% -23.33% (p=0.000 n=10) 9.389n ± 18% -20.26% (p=0.002 n=10) geomean 169.1n 209.6n +23.98% 215.5n +27.48% │ old.txt │ new.txt │ new-pgo.txt │ │ B/s │ B/s vs base │ B/s vs base │ BatchProcessorOnEmit-16 1004.39Mi ± 15% 79.88Mi ± 7% -92.05% (p=0.000 n=10) 81.06Mi ± 12% -91.93% (p=0.000 n=10) │ old.txt │ new.txt │ new-pgo.txt │ │ B/op │ B/op vs base │ B/op vs base │ BatchProcessorOnEmit-16 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹ 0.000 ± 0% ~ (p=1.000 n=10) ¹ Processor/Simple-16 0.0 ± 0% 417.0 ± 0% ? (p=0.000 n=10) 417.0 ± 0% ? (p=0.000 n=10) Processor/Batch-16 621.5 ± 2% 1057.5 ± 1% +70.15% (p=0.000 n=10) 1064.5 ± 1% +71.28% (p=0.000 n=10) Processor/SetTimestampSimple-16 0.0 ± 0% 417.0 ± 0% ? (p=0.000 n=10) 418.0 ± 0% ? (p=0.000 n=10) Processor/SetTimestampBatch-16 626.5 ± 3% 1049.5 ± 1% +67.52% (p=0.000 n=10) 1057.5 ± 2% +68.79% (p=0.000 n=10) Processor/AddAttributesSimple-16 0.0 ± 0% 417.0 ± 0% ? (p=0.000 n=10) 417.0 ± 0% ? (p=0.000 n=10) Processor/AddAttributesBatch-16 616.5 ± 3% 1053.0 ± 2% +70.80% (p=0.000 n=10) 1048.5 ± 2% +70.07% (p=0.000 n=10) Processor/SetAttributesSimple-16 48.00 ± 0% 466.00 ± 0% +870.83% (p=0.000 n=10) 466.00 ± 0% +870.83% (p=0.000 n=10) Processor/SetAttributesBatch-16 648.0 ± 3% 1089.5 ± 1% +68.13% (p=0.000 n=10) 1087.5 ± 4% +67.82% (p=0.000 n=10) LoggerNewRecord/5_attributes-16 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹ 0.000 ± 0% ~ (p=1.000 n=10) ¹ LoggerNewRecord/10_attributes-16 610.0 ± 0% 610.0 ± 0% ~ (p=1.000 n=10) ¹ 610.0 ± 0% ~ (p=1.000 n=10) ¹ LoggerProviderLogger-16 354.5 ± 6% 368.0 ± 7% ~ (p=0.288 n=10) 391.0 ± 29% ~ (p=0.239 n=10) WalkAttributes/1_attributes-16 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹ 0.000 ± 0% ~ (p=1.000 n=10) ¹ WalkAttributes/10_attributes-16 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹ 0.000 ± 0% ~ (p=1.000 n=10) ¹ WalkAttributes/100_attributes-16 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹ 0.000 ± 0% ~ (p=1.000 n=10) ¹ WalkAttributes/1000_attributes-16 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹ 0.000 ± 0% ~ (p=1.000 n=10) ¹ SetAddAttributes/SetAttributes-16 48.00 ± 0% 48.00 ± 0% ~ (p=1.000 n=10) ¹ 48.00 ± 0% ~ (p=1.000 n=10) ¹ SetAddAttributes/AddAttributes-16 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹ 0.000 ± 0% ~ (p=1.000 n=10) ¹ SimpleProcessorOnEmit-16 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹ 0.000 ± 0% ~ (p=1.000 n=10) ¹ geomean ² ? ² ? ² ¹ all samples are equal ² summaries must be >0 to compute geomean │ old.txt │ new.txt │ new-pgo.txt │ │ allocs/op │ allocs/op vs base │ allocs/op vs base │ BatchProcessorOnEmit-16 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹ 0.000 ± 0% ~ (p=1.000 n=10) ¹ Processor/Simple-16 0.000 ± 0% 1.000 ± 0% ? (p=0.000 n=10) 1.000 ± 0% ? (p=0.000 n=10) Processor/Batch-16 0.000 ± 0% 1.000 ± 0% ? (p=0.000 n=10) 1.000 ± 0% ? (p=0.000 n=10) Processor/SetTimestampSimple-16 0.000 ± 0% 1.000 ± 0% ? (p=0.000 n=10) 1.000 ± 0% ? (p=0.000 n=10) Processor/SetTimestampBatch-16 0.000 ± 0% 1.000 ± 0% ? (p=0.000 n=10) 1.000 ± 0% ? (p=0.000 n=10) Processor/AddAttributesSimple-16 0.000 ± 0% 1.000 ± 0% ? (p=0.000 n=10) 1.000 ± 0% ? (p=0.000 n=10) Processor/AddAttributesBatch-16 0.000 ± 0% 1.000 ± 0% ? (p=0.000 n=10) 1.000 ± 0% ? (p=0.000 n=10) Processor/SetAttributesSimple-16 1.000 ± 0% 2.000 ± 0% +100.00% (p=0.000 n=10) 2.000 ± 0% +100.00% (p=0.000 n=10) Processor/SetAttributesBatch-16 1.000 ± 0% 2.000 ± 0% +100.00% (p=0.000 n=10) 2.000 ± 0% +100.00% (p=0.000 n=10) LoggerNewRecord/5_attributes-16 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹ 0.000 ± 0% ~ (p=1.000 n=10) ¹ LoggerNewRecord/10_attributes-16 4.000 ± 0% 4.000 ± 0% ~ (p=1.000 n=10) ¹ 4.000 ± 0% ~ (p=1.000 n=10) ¹ LoggerProviderLogger-16 1.000 ± 0% 1.000 ± 0% ~ (p=1.000 n=10) ¹ 1.000 ± 0% ~ (p=1.000 n=10) ¹ WalkAttributes/1_attributes-16 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹ 0.000 ± 0% ~ (p=1.000 n=10) ¹ WalkAttributes/10_attributes-16 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹ 0.000 ± 0% ~ (p=1.000 n=10) ¹ WalkAttributes/100_attributes-16 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹ 0.000 ± 0% ~ (p=1.000 n=10) ¹ WalkAttributes/1000_attributes-16 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹ 0.000 ± 0% ~ (p=1.000 n=10) ¹ SetAddAttributes/SetAttributes-16 1.000 ± 0% 1.000 ± 0% ~ (p=1.000 n=10) ¹ 1.000 ± 0% ~ (p=1.000 n=10) ¹ SetAddAttributes/AddAttributes-16 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹ 0.000 ± 0% ~ (p=1.000 n=10) ¹ SimpleProcessorOnEmit-16 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹ 0.000 ± 0% ~ (p=1.000 n=10) ¹ geomean ² ? ² ? ² ¹ all samples are equal ² summaries must be >0 to compute geomean ``` |
||
Sam Xie
|
48f6a11b75
|
Correct the comment for the priority of options and environments on otlpmetric (#5641)
Part of https://github.com/open-telemetry/opentelemetry-go/issues/5379 |
||
Damien Mathieu
|
3e17ef99d6
|
Allow relying on InstrumentationScope in SpanStub and fix remaining deprecation issues (#5627)
Rather than the deprecated InstrumentationLibrary This is a replacement for https://github.com/open-telemetry/opentelemetry-go/pull/3104, as after this, there is no usage of `instrumentation.Library` within the SDK anymore. --------- Co-authored-by: Robert Pająk <pellared@hotmail.com> Co-authored-by: Sam Xie <sam@samxie.me> |
||
Sam Xie
|
52d4ce66e5
|
Include otlploggrpc module into the experimental-logs (#5629)
Resolve #5056 |
||
pree-dew
|
23abb5a3d8
|
Parse errormsgs in retryable status codes (#5541)
Fixes https://github.com/open-telemetry/opentelemetry-go/issues/5536 --------- Co-authored-by: Damien Mathieu <42@dmathieu.com> |
||
Tyler Yahn
|
f5b4e99025
|
Update example instrumentation names (#5612)
Part of #5412 - Use the recommended package name for the instrumentation exemplified in the repository. - Use the recommended detection of a `TracerProvider` from passed context. |
||
Robert Pająk
|
82184aa44b
|
[chore] Add missing changelog entry for #5577 (#5586)
Per https://github.com/open-telemetry/opentelemetry-go-contrib/pull/5868#issuecomment-2213239602 Co-authored-by: Sam Xie <sam@samxie.me> Co-authored-by: Damien Mathieu <damien.mathieu@elastic.co> |
||
Sam Xie
|
aab5af16af
|
Correct the comment for the priority of options and environments on otlptracehttp (#5584)
part of https://github.com/open-telemetry/opentelemetry-go/issues/5379 |
||
Sam Xie
|
30ca54a7dc
|
Protect released changelog in CI (#5560)
resolve #1682 This PR adds a new action in CI to protect released sections in the changelog from being changed. It compares the released sections in the changelog from the base branch to the current PR. It fails if a change happens. Apply "Unlock Released Changelog" to bypass this check when doing a new release. Action result if we changed the unreleased section: |
||
Santi Leira
|
7e0af515e2
|
baggage: Fix invalid percent-encoded octet sequences (#5528)
# Goal Replace the percent encoded octet sequence with the replacement code point (U+FFFD) when it doesn't match the UTF-8 encoding schema. Issue: https://github.com/open-telemetry/opentelemetry-go/issues/5519 Current behavior: ``` package main import ( "fmt" "log" "unicode/utf8" "go.opentelemetry.io/otel/baggage" ) func main() { kv := "k=aa%ffcc" b, err := baggage.Parse(kv) if err != nil { log.Fatal(err) } val := b.Members()[0].Value() fmt.Println(len(val)) # 5 fmt.Println(utf8.ValidString(val)) # false } ``` Expected behavior: ``` package main import ( "fmt" "log" "unicode/utf8" "go.opentelemetry.io/otel/baggage" ) func main() { kv := "k=aa%ffcc" b, err := baggage.Parse(kv) if err != nil { log.Fatal(err) } val := b.Members()[0].Value() fmt.Println(len(val)) # 7 fmt.Println(utf8.ValidString(val)) # true } ``` ## Benchmark - `go test -bench=BenchmarkParse -count 20 > old.txt` ``` goos: darwin goarch: arm64 pkg: go.opentelemetry.io/otel/baggage BenchmarkParse-10 1548118 774.3 ns/op 864 B/op 8 allocs/op BenchmarkParse-10 1547653 786.0 ns/op 864 B/op 8 allocs/op BenchmarkParse-10 1544949 770.5 ns/op 864 B/op 8 allocs/op BenchmarkParse-10 1558972 770.2 ns/op 864 B/op 8 allocs/op BenchmarkParse-10 1554973 774.7 ns/op 864 B/op 8 allocs/op BenchmarkParse-10 1550200 779.6 ns/op 864 B/op 8 allocs/op BenchmarkParse-10 1545100 774.3 ns/op 864 B/op 8 allocs/op BenchmarkParse-10 1549634 777.5 ns/op 864 B/op 8 allocs/op BenchmarkParse-10 1552530 769.6 ns/op 864 B/op 8 allocs/op BenchmarkParse-10 1536499 855.0 ns/op 864 B/op 8 allocs/op BenchmarkParse-10 1552244 770.4 ns/op 864 B/op 8 allocs/op BenchmarkParse-10 1560225 767.4 ns/op 864 B/op 8 allocs/op BenchmarkParse-10 1562738 772.3 ns/op 864 B/op 8 allocs/op BenchmarkParse-10 1556679 838.9 ns/op 864 B/op 8 allocs/op BenchmarkParse-10 1562500 777.1 ns/op 864 B/op 8 allocs/op BenchmarkParse-10 1530901 836.5 ns/op 864 B/op 8 allocs/op BenchmarkParse-10 1000000 1372 ns/op 864 B/op 8 allocs/op BenchmarkParse-10 1534678 780.3 ns/op 864 B/op 8 allocs/op BenchmarkParse-10 1366180 822.4 ns/op 864 B/op 8 allocs/op BenchmarkParse-10 1539852 796.8 ns/op 864 B/op 8 allocs/op PASS ok go.opentelemetry.io/otel/baggage 40.839s ``` - `go test -bench=BenchmarkParse -count 20 > new.txt` ``` goos: darwin goarch: arm64 pkg: go.opentelemetry.io/otel/baggage BenchmarkParse-10 1355893 886.6 ns/op 888 B/op 9 allocs/op BenchmarkParse-10 1349192 883.1 ns/op 888 B/op 9 allocs/op BenchmarkParse-10 1363053 880.4 ns/op 888 B/op 9 allocs/op BenchmarkParse-10 1372404 875.7 ns/op 888 B/op 9 allocs/op BenchmarkParse-10 1359979 880.7 ns/op 888 B/op 9 allocs/op BenchmarkParse-10 1360497 874.7 ns/op 888 B/op 9 allocs/op BenchmarkParse-10 1375520 870.2 ns/op 888 B/op 9 allocs/op BenchmarkParse-10 1375268 882.8 ns/op 888 B/op 9 allocs/op BenchmarkParse-10 1361998 964.8 ns/op 888 B/op 9 allocs/op BenchmarkParse-10 1373461 961.5 ns/op 888 B/op 9 allocs/op BenchmarkParse-10 1378065 872.6 ns/op 888 B/op 9 allocs/op BenchmarkParse-10 1377290 879.0 ns/op 888 B/op 9 allocs/op BenchmarkParse-10 1362094 885.6 ns/op 888 B/op 9 allocs/op BenchmarkParse-10 1352175 915.9 ns/op 888 B/op 9 allocs/op BenchmarkParse-10 1364914 887.9 ns/op 888 B/op 9 allocs/op BenchmarkParse-10 1355782 890.5 ns/op 888 B/op 9 allocs/op BenchmarkParse-10 1361848 1245 ns/op 888 B/op 9 allocs/op BenchmarkParse-10 1163396 878.8 ns/op 888 B/op 9 allocs/op BenchmarkParse-10 1370886 916.6 ns/op 888 B/op 9 allocs/op BenchmarkParse-10 1340149 1175 ns/op 888 B/op 9 allocs/op PASS ok go.opentelemetry.io/otel/baggage 44.347s ``` - `benchstat old.txt new.txt` ``` goos: darwin goarch: arm64 pkg: go.opentelemetry.io/otel/baggage │ old.txt │ new.txt │ │ sec/op │ sec/op vs base │ Parse-10 777.3n ± 3% 884.4n ± 4% +13.77% (p=0.000 n=20) │ old.txt │ new.txt │ │ B/op │ B/op vs base │ Parse-10 864.0 ± 0% 888.0 ± 0% +2.78% (p=0.000 n=20) │ old.txt │ new.txt │ │ allocs/op │ allocs/op vs base │ Parse-10 8.000 ± 0% 9.000 ± 0% +12.50% (p=0.000 n=20) ``` --------- Co-authored-by: Damien Mathieu <42@dmathieu.com> Co-authored-by: Robert Pająk <pellared@hotmail.com> |
||
Tyler Yahn
|
81216fb002
|
Releases v1.28.0/v0.50.0/v0.4.0 (#5569)
### Added - The `IsEmpty` method is added to the `Instrument` type in `go.opentelemetry.io/otel/sdk/metric`. This method is used to check if an `Instrument` instance is a zero-value. (#5431) - Store and provide the emitted `context.Context` in `ScopeRecords` of `go.opentelemetry.io/otel/sdk/log/logtest`. (#5468) - The `go.opentelemetry.io/otel/semconv/v1.26.0` package. The package contains semantic conventions from the `v1.26.0` version of the OpenTelemetry Semantic Conventions. (#5476) - The `AssertRecordEqual` method to `go.opentelemetry.io/otel/log/logtest` to allow comparison of two log records in tests. (#5499) - The `WithHeaders` option to `go.opentelemetry.io/otel/exporters/zipkin` to allow configuring custom http headers while exporting spans. (#5530) ### Changed - `Tracer.Start` in `go.opentelemetry.io/otel/trace/noop` no longer allocates a span for empty span context. (#5457) - Upgrade `go.opentelemetry.io/otel/semconv/v1.25.0` to `go.opentelemetry.io/otel/semconv/v1.26.0` in `go.opentelemetry.io/otel/example/otel-collector`. (#5490) - Upgrade `go.opentelemetry.io/otel/semconv/v1.25.0` to `go.opentelemetry.io/otel/semconv/v1.26.0` in `go.opentelemetry.io/otel/example/zipkin`. (#5490) - Upgrade `go.opentelemetry.io/otel/semconv/v1.25.0` to `go.opentelemetry.io/otel/semconv/v1.26.0` in `go.opentelemetry.io/otel/exporters/zipkin`. (#5490) - The exporter no longer exports the deprecated "otel.library.name" or "otel.library.version" attributes. - Upgrade `go.opentelemetry.io/otel/semconv/v1.25.0` to `go.opentelemetry.io/otel/semconv/v1.26.0` in `go.opentelemetry.io/otel/sdk/resource`. (#5490) - Upgrade `go.opentelemetry.io/otel/semconv/v1.25.0` to `go.opentelemetry.io/otel/semconv/v1.26.0` in `go.opentelemetry.io/otel/sdk/trace`. (#5490) - `SimpleProcessor.OnEmit` in `go.opentelemetry.io/otel/sdk/log` no longer allocates a slice which makes it possible to have a zero-allocation log processing using `SimpleProcessor`. (#5493) - Use non-generic functions in the `Start` method of `"go.opentelemetry.io/otel/sdk/trace".Trace` to reduce memory allocation. (#5497) - `service.instance.id` is populated for a `Resource` created with `"go.opentelemetry.io/otel/sdk/resource".Default` with a default value when `OTEL_GO_X_RESOURCE` is set. (#5520) - Improve performance of metric instruments in `go.opentelemetry.io/otel/sdk/metric` by removing unnecessary calls to `time.Now`. (#5545) ### Fixed - Log a warning to the OpenTelemetry internal logger when a `Record` in `go.opentelemetry.io/otel/sdk/log` drops an attribute due to a limit being reached. (#5376) - Identify the `Tracer` returned from the global `TracerProvider` in `go.opentelemetry.io/otel/global` with its schema URL. (#5426) - Identify the `Meter` returned from the global `MeterProvider` in `go.opentelemetry.io/otel/global` with its schema URL. (#5426) - Log a warning to the OpenTelemetry internal logger when a `Span` in `go.opentelemetry.io/otel/sdk/trace` drops an attribute, event, or link due to a limit being reached. (#5434) - Document instrument name requirements in `go.opentelemetry.io/otel/metric`. (#5435) - Prevent random number generation data-race for experimental rand exemplars in `go.opentelemetry.io/otel/sdk/metric`. (#5456) - Fix counting number of dropped attributes of `Record` in `go.opentelemetry.io/otel/sdk/log`. (#5464) - Fix panic in baggage creation when a member contains `0x80` char in key or value. (#5494) - Correct comments for the priority of the `WithEndpoint` and `WithEndpointURL` options and their corresponding environment variables in `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc`. (#5508) - Retry trace and span ID generation if it generated an invalid one in `go.opentelemetry.io/otel/sdk/trace`. (#5514) - Fix stale timestamps reported by the last-value aggregation. (#5517) - Indicate the `Exporter` in `go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp` must be created by the `New` method. (#5521) - Improved performance in all `{Bool,Int64,Float64,String}SliceValue` functions of `go.opentelemetry.io/attributes` by reducing the number of allocations. (#5549) |
||
David Ashpole
|
0485de287e
|
Move time.Now call into exemplar reservoir to improve performance (#5545)
Part of addressing https://github.com/open-telemetry/opentelemetry-go/issues/5542. ### Motivation This removes the `time.Now()` call from filtered-out Exemplars by only invoking `time.Now()` after the filtering decision is made. This improvement is especially noticeable for measurements without any attributes. ``` goos: linux goarch: amd64 pkg: go.opentelemetry.io/otel/sdk/metric cpu: AMD EPYC 7B12 │ old.txt │ new.txt │ │ sec/op │ sec/op vs base │ SyncMeasure/NoView/Int64Counter/Attributes/0-24 158.20n ± 4% 99.83n ± 1% -36.90% (p=0.000 n=10) SyncMeasure/NoView/Int64Counter/Attributes/1-24 333.3n ± 4% 274.8n ± 1% -17.55% (p=0.000 n=10) SyncMeasure/NoView/Int64Counter/Attributes/10-24 1.640µ ± 1% 1.600µ ± 1% -2.41% (p=0.000 n=10) SyncMeasure/NoView/Float64Counter/Attributes/0-24 159.0n ± 3% 101.3n ± 0% -36.27% (p=0.000 n=10) SyncMeasure/NoView/Float64Counter/Attributes/1-24 340.0n ± 2% 272.0n ± 1% -20.00% (p=0.000 n=10) SyncMeasure/NoView/Float64Counter/Attributes/10-24 1.661µ ± 1% 1.597µ ± 0% -3.85% (p=0.000 n=10) SyncMeasure/NoView/Int64UpDownCounter/Attributes/0-24 159.8n ± 1% 103.1n ± 0% -35.50% (p=0.000 n=10) SyncMeasure/NoView/Int64UpDownCounter/Attributes/1-24 339.5n ± 1% 273.1n ± 0% -19.57% (p=0.000 n=10) SyncMeasure/NoView/Int64UpDownCounter/Attributes/10-24 1.656µ ± 0% 1.589µ ± 0% -4.05% (p=0.000 n=10) SyncMeasure/NoView/Float64UpDownCounter/Attributes/0-24 159.3n ± 2% 100.8n ± 0% -36.74% (p=0.000 n=10) SyncMeasure/NoView/Float64UpDownCounter/Attributes/1-24 337.9n ± 2% 271.8n ± 1% -19.55% (p=0.000 n=10) SyncMeasure/NoView/Float64UpDownCounter/Attributes/10-24 1.657µ ± 0% 1.593µ ± 1% -3.83% (p=0.000 n=10) SyncMeasure/NoView/Int64Histogram/Attributes/0-24 144.65n ± 4% 89.38n ± 0% -38.21% (p=0.000 n=10) SyncMeasure/NoView/Int64Histogram/Attributes/1-24 235.7n ± 2% 183.5n ± 0% -22.15% (p=0.000 n=10) SyncMeasure/NoView/Int64Histogram/Attributes/10-24 900.8n ± 1% 836.8n ± 0% -7.10% (p=0.000 n=10) SyncMeasure/NoView/Float64Histogram/Attributes/0-24 145.60n ± 5% 93.48n ± 1% -35.80% (p=0.000 n=10) SyncMeasure/NoView/Float64Histogram/Attributes/1-24 240.9n ± 1% 183.0n ± 0% -24.06% (p=0.000 n=10) SyncMeasure/NoView/Float64Histogram/Attributes/10-24 905.6n ± 1% 826.3n ± 0% -8.76% (p=0.000 n=10) SyncMeasure/DropView/Int64Counter/Attributes/0-24 20.33n ± 0% 20.35n ± 0% ~ (p=0.302 n=10) SyncMeasure/DropView/Int64Counter/Attributes/1-24 26.46n ± 0% 26.45n ± 1% ~ (p=0.868 n=10) SyncMeasure/DropView/Int64Counter/Attributes/10-24 26.50n ± 0% 26.47n ± 0% ~ (p=0.208 n=10) SyncMeasure/DropView/Float64Counter/Attributes/0-24 20.34n ± 1% 20.27n ± 0% -0.34% (p=0.009 n=10) SyncMeasure/DropView/Float64Counter/Attributes/1-24 26.55n ± 0% 26.60n ± 1% ~ (p=0.109 n=10) SyncMeasure/DropView/Float64Counter/Attributes/10-24 26.59n ± 1% 26.57n ± 1% ~ (p=0.926 n=10) SyncMeasure/DropView/Int64UpDownCounter/Attributes/0-24 20.38n ± 1% 20.38n ± 0% ~ (p=0.725 n=10) SyncMeasure/DropView/Int64UpDownCounter/Attributes/1-24 26.39n ± 0% 26.44n ± 0% ~ (p=0.238 n=10) SyncMeasure/DropView/Int64UpDownCounter/Attributes/10-24 26.52n ± 0% 26.42n ± 0% -0.36% (p=0.049 n=10) SyncMeasure/DropView/Float64UpDownCounter/Attributes/0-24 20.30n ± 0% 20.25n ± 0% ~ (p=0.196 n=10) SyncMeasure/DropView/Float64UpDownCounter/Attributes/1-24 26.57n ± 0% 26.54n ± 1% ~ (p=0.540 n=10) SyncMeasure/DropView/Float64UpDownCounter/Attributes/10-24 26.57n ± 0% 26.51n ± 1% ~ (p=0.643 n=10) SyncMeasure/DropView/Int64Histogram/Attributes/0-24 20.37n ± 0% 20.36n ± 1% ~ (p=1.000 n=10) SyncMeasure/DropView/Int64Histogram/Attributes/1-24 26.41n ± 0% 26.50n ± 0% +0.32% (p=0.007 n=10) SyncMeasure/DropView/Int64Histogram/Attributes/10-24 26.44n ± 0% 26.55n ± 1% +0.42% (p=0.012 n=10) SyncMeasure/DropView/Float64Histogram/Attributes/0-24 20.30n ± 0% 20.45n ± 0% +0.74% (p=0.000 n=10) SyncMeasure/DropView/Float64Histogram/Attributes/1-24 26.52n ± 0% 26.48n ± 0% ~ (p=0.127 n=10) SyncMeasure/DropView/Float64Histogram/Attributes/10-24 26.55n ± 0% 26.48n ± 0% -0.26% (p=0.002 n=10) SyncMeasure/AttrFilterView/Int64Counter/Attributes/0-24 170.5n ± 2% 110.8n ± 0% -35.03% (p=0.000 n=10) SyncMeasure/AttrFilterView/Int64Counter/Attributes/1-24 402.5n ± 1% 331.5n ± 1% -17.64% (p=0.000 n=10) SyncMeasure/AttrFilterView/Int64Counter/Attributes/10-24 1.363µ ± 1% 1.281µ ± 1% -6.02% (p=0.000 n=10) SyncMeasure/AttrFilterView/Float64Counter/Attributes/0-24 170.6n ± 1% 111.5n ± 1% -34.64% (p=0.000 n=10) SyncMeasure/AttrFilterView/Float64Counter/Attributes/1-24 397.1n ± 1% 335.9n ± 0% -15.41% (p=0.000 n=10) SyncMeasure/AttrFilterView/Float64Counter/Attributes/10-24 1.371µ ± 1% 1.279µ ± 1% -6.71% (p=0.000 n=10) SyncMeasure/AttrFilterView/Int64UpDownCounter/Attributes/0-24 170.1n ± 1% 112.2n ± 0% -34.09% (p=0.000 n=10) SyncMeasure/AttrFilterView/Int64UpDownCounter/Attributes/1-24 397.5n ± 1% 330.2n ± 0% -16.93% (p=0.000 n=10) SyncMeasure/AttrFilterView/Int64UpDownCounter/Attributes/10-24 1.371µ ± 1% 1.289µ ± 1% -5.95% (p=0.000 n=10) SyncMeasure/AttrFilterView/Float64UpDownCounter/Attributes/0-24 171.4n ± 2% 112.9n ± 0% -34.13% (p=0.000 n=10) SyncMeasure/AttrFilterView/Float64UpDownCounter/Attributes/1-24 397.0n ± 3% 336.4n ± 0% -15.24% (p=0.000 n=10) SyncMeasure/AttrFilterView/Float64UpDownCounter/Attributes/10-24 1.383µ ± 1% 1.305µ ± 1% -5.61% (p=0.000 n=10) SyncMeasure/AttrFilterView/Int64Histogram/Attributes/0-24 157.30n ± 2% 98.58n ± 1% -37.33% (p=0.000 n=6+10) ``` ### Changes * Introduce `exemplar.Filter`, which is a filter function based on the context. It will not be user-facing, so we can always add other parameters later if needed. * Introduce `exemplar.FilteredReservoir`, which is similar to a reservoir, except it does not receive a timestamp. It gets the current time after the filter decision has been made. It uses generics to avoid the call to exemplar.NewValue(), since it is internal-only. * The `exemplar.Reservoir` is left as-is, so that it can be made public when exemplars are stable. It still includes a timestamp argument. * Unit tests are updated to expect a much lower number of calls to time.Now * `exemplar.Drop` is now an `exemplar.FilteredReservoir` instead of a `Reservoir`, since we don't need a Reservoir to store things in if the measurement is always dropped. Co-authored-by: Sam Xie <sam@samxie.me> Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com> |
||
Fabrice Vaillant
|
f3a2d96022
|
Reduces allocation in attributes (#5549)
Remove one allocation in all SliceValue function (going from 3 to 2). Here is benchstat results ``` goos: linux goarch: amd64 pkg: go.opentelemetry.io/otel/internal/attribute cpu: 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz │ old.txt │ new.txt │ │ sec/op │ sec/op vs base │ BoolSliceValue-8 128.4n ± 22% 103.8n ± 25% -19.12% (p=0.007 n=10) Int64SliceValue-8 167.9n ± 7% 130.8n ± 5% -22.13% (p=0.000 n=10) Float64SliceValue-8 133.8n ± 14% 122.6n ± 4% -8.33% (p=0.000 n=10) StringSliceValue-8 166.4n ± 9% 158.5n ± 10% -4.75% (p=0.037 n=10) geomean 148.0n 127.5n -13.88% │ old.txt │ new.txt │ │ B/op │ B/op vs base │ BoolSliceValue-8 32.000 ± 0% 8.000 ± 0% -75.00% (p=0.000 n=10) Int64SliceValue-8 88.00 ± 0% 64.00 ± 0% -27.27% (p=0.000 n=10) Float64SliceValue-8 88.00 ± 0% 64.00 ± 0% -27.27% (p=0.000 n=10) StringSliceValue-8 152.0 ± 0% 128.0 ± 0% -15.79% (p=0.000 n=10) geomean 78.34 45.25 -42.23% │ old.txt │ new.txt │ │ allocs/op │ allocs/op vs base │ BoolSliceValue-8 3.000 ± 0% 2.000 ± 0% -33.33% (p=0.000 n=10) Int64SliceValue-8 3.000 ± 0% 2.000 ± 0% -33.33% (p=0.000 n=10) Float64SliceValue-8 3.000 ± 0% 2.000 ± 0% -33.33% (p=0.000 n=10) StringSliceValue-8 3.000 ± 0% 2.000 ± 0% -33.33% (p=0.000 n=10) geomean 3.000 2.000 -33.33% ``` |
||
Sam Xie
|
418f19d341
|
Indicate the otlploghttp exporter must be created by the New method (#5521)
The empty Exporter would cause panics. |
||
Srijan Rastogi
|
af317f05ef
|
Add WithHeaders option for Zipkin exporter (#5530)
- Added `WithHeaders` option func, which allows user to set custom http request headers while exporting spans. - Closes: #3474 --------- Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com> |
||
Johannes Tax
|
4e94f405ab
|
Populate service.instance.id with a default value when OTEL_GO_X_RESOURCE is set (#5520)
As discussed in a previous SIG meeting, this PR adds support for setting a default value for [`service.instance.id`](https://github.com/open-telemetry/semantic-conventions/tree/main/docs/resource#service-experimental) according to semantic conventions: > Implementations, such as SDKs, are recommended to generate a random Version 1 or Version 4 [RFC 4122](https://www.ietf.org/rfc/rfc4122.txt) UUID, but are free to use an inherent unique ID as the source of this value if stability is desirable. In that case, the ID SHOULD be used as source of a UUID Version 5 and SHOULD use the following UUID as the namespace: `4d63009a-8d0f-11ee-aad7-4c796ed8e320`. This PR follows the recommendation and populates `service.instance.id` with a random Version 4 UUID. The functionality is guarded by the `OTEL_GO_X_RESOURCE` feature flag environment variable. There are plans to declare `service.instance.id` stable and also make it a required attribute (similar to `service.name`). Once this happens, the functionality can be made available regardless of whether `OTEL_GO_X_RESOURCE` is set. Closes https://github.com/open-telemetry/opentelemetry-go-contrib/issues/5423 --------- Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com> Co-authored-by: Tyler Yahn <codingalias@gmail.com> |
||
David Ashpole
|
773aec217d
|
Fix timestamp handling for the lastvalue aggregation (#5517)
Fixes https://github.com/open-telemetry/opentelemetry-go/issues/5510 From https://opentelemetry.io/docs/specs/otel/metrics/sdk/#metricreader: > The ending timestamp (i.e. TimeUnixNano) MUST always be equal to time the metric data point took effect, which is equal to when [MetricReader.Collect](https://opentelemetry.io/docs/specs/otel/metrics/sdk/#collect) was invoked. These rules apply to all metrics, not just those whose [point kinds](https://opentelemetry.io/docs/specs/otel/metrics/data-model/#point-kinds) includes an aggregation temporality field. Before https://github.com/open-telemetry/opentelemetry-go/pull/5305, we used the measurement time as the timestamp, but it didn't matter because the collection time is always the same as the measurement time for asynchronous instruments. We didn't catch the issue when we implemented synchronous instruments. This PR changes the (end) timestamp handling for the Last Value aggregation to match the (end) timestamp handling for sum and histogram aggregations. As described in the spec above, we take the timestamp when computing the aggregation during Collect. |
||
Fools
|
ffe855df33
|
Fix IDGenerator may generate zero TraceId / SpanId (#5514)
# Description Fix #5462 ## Type of change add a loop to generate the spanID and traceID. the loop will not stop until it generate a valid ID - [x] Bug fix (non-breaking change which fixes an issue) --------- Co-authored-by: Damien Mathieu <42@dmathieu.com> Co-authored-by: Robert Pająk <pellared@hotmail.com> |
||
Sam Xie
|
f5e613757f
|
Correct the comment for the priority of options and environments on otlptracegrpc (#5508)
part of #5379 --------- Co-authored-by: David Ashpole <dashpole@google.com> Co-authored-by: Chester Cheung <cheung.zhy.csu@gmail.com> Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com> |
||
Fabio Bozzo
|
478f85bb15
|
fix(baggage): validate chars panic with 0x80 (#5494)
The validation rule for baggage key/values chars has a N+1 problem with the unicode value: `0x80`. For instance, `baggage.NewMemberRaw` could be called with a string value including the rune `128` and return no error. Then `baggage.New` would panic on `validateValueChar`: ``` === RUN TestValidateValueChar --- FAIL: TestValidateValueChar (0.00s) panic: runtime error: index out of range [128] with length 128 [recovered] panic: runtime error: index out of range [128] with length 128 ``` --------- Co-authored-by: Sam Xie <sam@samxie.me> |
||
ttoad
|
30e82e01b6
|
trace: Use non-generic to replace newEvictedQueue in trace.start to reduce memory usage. (#5497)
benchstat: ``` goos: darwin goarch: arm64 pkg: go.opentelemetry.io/otel/sdk/trace │ old │ new │ │ sec/op │ sec/op vs base │ TraceStart-10 950.6n ± 1% 641.0n ± 0% -32.57% (p=0.000 n=10) │ old │ new │ │ B/op │ B/op vs base │ TraceStart-10 1040.0 ± 0% 704.0 ± 0% -32.31% (p=0.000 n=10) │ old │ new │ │ allocs/op │ allocs/op vs base │ TraceStart-10 20.00 ± 0% 14.00 ± 0% -30.00% (p=0.000 n=10) ``` --------- Co-authored-by: Damien Mathieu <damien.mathieu@elastic.co> Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com> |
||
Damien Mathieu
|
5331939a74
|
Introduce logtest.AssertRecordEqual (#5499)
This is a follow-up to the comments in https://github.com/open-telemetry/opentelemetry-go/pull/5468#discussion_r1624173196, introducing `logtest.AssertRecordEqual` so bridges can compare log records more easily. --------- Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com> |
||
Robert Pająk
|
6082e830c2
|
sdk/log: Remove slice allocation from SimpleProcessor.OnEmit (#5493)
The reason for this improvement (apart that, in general, it is good to have better performance) is there may be good use case to use a `SimpleProcessor` to emit logs efficiently to standard output. It could be one of the most efficient solutions (from application performance perspective) and thanks to such configuration the user would not lose any logs if the application suddenly crashes. For instance, a useful configuration could be a simple processor with an OTLP file exporter (https://github.com/open-telemetry/opentelemetry-go/issues/5408). I think we might consider changing the following portion of `SimpleProcessor` documentation (but I would prefer to do it as separate PR): > // This Processor is not recommended for production use. The synchronous // nature of this Processor make it good for testing, debugging, or // showing examples of other features, but it can be slow and have a high // computation resource usage overhead. [NewBatchProcessor] is recommended // for production use instead. ``` goos: linux goarch: amd64 pkg: go.opentelemetry.io/otel/sdk/log cpu: Intel(R) Core(TM) i9-10885H CPU @ 2.40GHz │ old.txt │ new.txt │ │ sec/op │ sec/op vs base │ Processor/Simple-16 449.4n ± 7% 156.2n ± 5% -65.25% (p=0.000 n=10) Processor/ModifyTimestampSimple-16 468.0n ± 6% 171.3n ± 15% -63.40% (p=0.000 n=10) Processor/ModifyAttributesSimple-16 515.8n ± 3% 233.2n ± 8% -54.77% (p=0.000 n=10) geomean 476.9n 184.1n -61.40% │ old.txt │ new.txt │ │ B/op │ B/op vs base │ Processor/Simple-16 417.0 ± 0% 0.0 ± 0% -100.00% (p=0.000 n=10) Processor/ModifyTimestampSimple-16 417.0 ± 0% 0.0 ± 0% -100.00% (p=0.000 n=10) Processor/ModifyAttributesSimple-16 465.00 ± 0% 48.00 ± 0% -89.68% (p=0.000 n=10) geomean 432.4 ? ¹ ² ¹ summaries must be >0 to compute geomean ² ratios must be >0 to compute geomean │ old.txt │ new.txt │ │ allocs/op │ allocs/op vs base │ Processor/Simple-16 1.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) Processor/ModifyTimestampSimple-16 1.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) Processor/ModifyAttributesSimple-16 2.000 ± 0% 1.000 ± 0% -50.00% (p=0.000 n=10) geomean 1.260 ? ¹ ² ¹ summaries must be >0 to compute geomean ² ratios must be >0 to compute geomean ``` --------- Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com> |
||
Tyler Yahn
|
6a0fa3c911
|
Upgrade semconv use to v1.26.0 (#5490)
Follow up to #5476 |
||
Damien Mathieu
|
a2505aa68c
|
log/logtest: provide record with their context (#5468)
So the instrumentation tests can check the provided context. See https://github.com/open-telemetry/opentelemetry-go-contrib/pull/5707 --------- Co-authored-by: Robert Pająk <pellared@hotmail.com> Co-authored-by: Sam Xie <sam@samxie.me> |
||
Aaron Clawson
|
db74d18729
|
Add semconv/v1.26.0 , removes deprecated semconvs (#5476)
Based on #5394 This removes `event.go`, `resource.go`, and `trace.go` from generation because they now only contain references to the attribute registry. Thus, they will generate empty files. This also does not include any deprecated semantic convention. Users of deprecated semantic conventions should continue to use them from the previous versions that have been published. [v1.26.0 semantic conventions release notes](https://github.com/open-telemetry/semantic-conventions/releases/tag/v1.26.0): <div data-pjax="true" data-test-selector="body-content" data-view-component="true" class="markdown-body my-3"><h2>v1.26.0</h2> <h3>🛑 Breaking changes 🛑</h3> <ul> <li> <p><code>db</code>: Rename <code>db.statement</code> to <code>db.query.text</code> and introduce <code>db.query.parameter.<key></code> (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2123681817" data-permission-text="Title is private" data-url="https://github.com/open-telemetry/semantic-conventions/issues/716" data-hovercard-type="issue" data-hovercard-url="/open-telemetry/semantic-conventions/issues/716/hovercard" href="https://github.com/open-telemetry/semantic-conventions/issues/716">#716</a>)</p> </li> <li> <p><code>db</code>: Renames <code>db.sql.table</code>, <code>db.cassandra.table</code>, <code>db.mongodb.collection</code>, and <code>db.cosmosdb.container</code> attributes to <code>db.collection.name</code> (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2221821104" data-permission-text="Title is private" data-url="https://github.com/open-telemetry/semantic-conventions/issues/870" data-hovercard-type="pull_request" data-hovercard-url="/open-telemetry/semantic-conventions/pull/870/hovercard" href="https://github.com/open-telemetry/semantic-conventions/pull/870">#870</a>)</p> </li> <li> <p><code>db</code>: Rename <code>db.operation</code> to <code>db.operation.name</code>. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2226761377" data-permission-text="Title is private" data-url="https://github.com/open-telemetry/semantic-conventions/issues/884" data-hovercard-type="issue" data-hovercard-url="/open-telemetry/semantic-conventions/issues/884/hovercard" href="https://github.com/open-telemetry/semantic-conventions/issues/884">#884</a>)</p> </li> <li> <p><code>messaging</code>: Rename <code>messaging.operation</code> to <code>messaging.operation.type</code>, add <code>messaging.operation.name</code>. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2227637055" data-permission-text="Title is private" data-url="https://github.com/open-telemetry/semantic-conventions/issues/890" data-hovercard-type="issue" data-hovercard-url="/open-telemetry/semantic-conventions/issues/890/hovercard" href="https://github.com/open-telemetry/semantic-conventions/issues/890">#890</a>)</p> </li> <li> <p><code>db</code>: Deprecate the <code>db.user</code> attribute. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2226817211" data-permission-text="Title is private" data-url="https://github.com/open-telemetry/semantic-conventions/issues/885" data-hovercard-type="issue" data-hovercard-url="/open-telemetry/semantic-conventions/issues/885/hovercard" href="https://github.com/open-telemetry/semantic-conventions/issues/885">#885</a>)</p> </li> <li> <p><code>db</code>: Rename <code>db.name</code> and <code>db.redis.database_index</code> to <code>db.namespace</code>, deprecate <code>db.mssql.instance_name</code>. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2226817211" data-permission-text="Title is private" data-url="https://github.com/open-telemetry/semantic-conventions/issues/885" data-hovercard-type="issue" data-hovercard-url="/open-telemetry/semantic-conventions/issues/885/hovercard" href="https://github.com/open-telemetry/semantic-conventions/issues/885">#885</a>)</p> </li> <li> <p><code>db</code>: Remove <code>db.instance.id</code>. For Elasticsearch, replace with <code>db.elasticsearch.node.name</code>. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2266411070" data-permission-text="Title is private" data-url="https://github.com/open-telemetry/semantic-conventions/issues/972" data-hovercard-type="pull_request" data-hovercard-url="/open-telemetry/semantic-conventions/pull/972/hovercard" href="https://github.com/open-telemetry/semantic-conventions/pull/972">#972</a>)</p> </li> <li> <p><code>db</code>: Clarify database span name format and fallback values. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2266545339" data-permission-text="Title is private" data-url="https://github.com/open-telemetry/semantic-conventions/issues/974" data-hovercard-type="pull_request" data-hovercard-url="/open-telemetry/semantic-conventions/pull/974/hovercard" href="https://github.com/open-telemetry/semantic-conventions/pull/974">#974</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2123611008" data-permission-text="Title is private" data-url="https://github.com/open-telemetry/semantic-conventions/issues/704" data-hovercard-type="issue" data-hovercard-url="/open-telemetry/semantic-conventions/issues/704/hovercard" href="https://github.com/open-telemetry/semantic-conventions/issues/704">#704</a>)</p> </li> <li> <p><code>db</code>: Rename <code>db.client.connections.*</code> metric namespace to <code>db.client.connection.*</code> and rename <code>db.client.connection.usage</code> to <code>db.client.connection.count</code>.<br> (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1815993771" data-permission-text="Title is private" data-url="https://github.com/open-telemetry/semantic-conventions/issues/201" data-hovercard-type="issue" data-hovercard-url="/open-telemetry/semantic-conventions/issues/201/hovercard" href="https://github.com/open-telemetry/semantic-conventions/issues/201">#201</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2262290114" data-permission-text="Title is private" data-url="https://github.com/open-telemetry/semantic-conventions/issues/967" data-hovercard-type="issue" data-hovercard-url="/open-telemetry/semantic-conventions/issues/967/hovercard" href="https://github.com/open-telemetry/semantic-conventions/issues/967">#967</a>)</p> </li> <li> <p><code>db</code>: Rename <code>pool.name</code> to <code>db.client.connections.pool.name</code> and <code>state</code> to <code>db.client.connections.state</code>. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2232095641" data-permission-text="Title is private" data-url="https://github.com/open-telemetry/semantic-conventions/issues/909" data-hovercard-type="pull_request" data-hovercard-url="/open-telemetry/semantic-conventions/pull/909/hovercard" href="https://github.com/open-telemetry/semantic-conventions/pull/909">#909</a>)</p> </li> <li> <p><code>system</code>: Deprecate <code>shared</code> from <code>system.memory.state</code> values and make it a standalone metric (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1993746916" data-permission-text="Title is private" data-url="https://github.com/open-telemetry/semantic-conventions/issues/522" data-hovercard-type="issue" data-hovercard-url="/open-telemetry/semantic-conventions/issues/522/hovercard" href="https://github.com/open-telemetry/semantic-conventions/issues/522">#522</a>)</p> </li> <li> <p><code>device.app.lifecycle</code>: Reformat and update the <code>device.app.lifecycle</code> event description adds constraints for the possible values of the <code>android.state</code> and <code>ios.state</code>.<br> (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2170421333" data-permission-text="Title is private" data-url="https://github.com/open-telemetry/semantic-conventions/issues/794" data-hovercard-type="pull_request" data-hovercard-url="/open-telemetry/semantic-conventions/pull/794/hovercard" href="https://github.com/open-telemetry/semantic-conventions/pull/794">#794</a>)<br> Removes the <code>ios.lifecycle.events</code> and <code>android.lifecycle.events</code> attributes from the global registry and adds constraints for the possible values of the <code>android.state</code> and <code>ios.state</code> attributes.</p> </li> <li> <p><code>messaging</code>: Rename <code>messaging.client_id</code> to <code>messaging.client.id</code> (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2250463504" data-permission-text="Title is private" data-url="https://github.com/open-telemetry/semantic-conventions/issues/935" data-hovercard-type="issue" data-hovercard-url="/open-telemetry/semantic-conventions/issues/935/hovercard" href="https://github.com/open-telemetry/semantic-conventions/issues/935">#935</a>)</p> </li> <li> <p><code>rpc</code>: Rename<code>message.*</code> attributes under <code>rpc</code> to <code>rpc.message.*</code>. Deprecate old <code>message.*</code> attributes. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2211426432" data-permission-text="Title is private" data-url="https://github.com/open-telemetry/semantic-conventions/issues/854" data-hovercard-type="pull_request" data-hovercard-url="/open-telemetry/semantic-conventions/pull/854/hovercard" href="https://github.com/open-telemetry/semantic-conventions/pull/854">#854</a>)</p> </li> </ul> <h3>🚀 New components 🚀</h3> <ul> <li><code>gen-ai</code>: Introducing semantic conventions for GenAI clients. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1897516973" data-permission-text="Title is private" data-url="https://github.com/open-telemetry/semantic-conventions/issues/327" data-hovercard-type="issue" data-hovercard-url="/open-telemetry/semantic-conventions/issues/327/hovercard" href="https://github.com/open-telemetry/semantic-conventions/issues/327">#327</a>)</li> </ul> <h3>💡 Enhancements 💡</h3> <ul> <li> <p><code>all</code>: Markdown snippets are now generated by jinja templates in the <code>templates</code> directory. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2276527861" data-permission-text="Title is private" data-url="https://github.com/open-telemetry/semantic-conventions/issues/1000" data-hovercard-type="pull_request" data-hovercard-url="/open-telemetry/semantic-conventions/pull/1000/hovercard" href="https://github.com/open-telemetry/semantic-conventions/pull/1000">#1000</a>)</p> </li> <li> <p><code>db, messaging, gen_ai</code>: Clarify that <code>db.system</code>, <code>messaging.system</code>, <code>gen_ai.system</code> attributes capture the client perception and may differ from the actual product name. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2184898831" data-permission-text="Title is private" data-url="https://github.com/open-telemetry/semantic-conventions/issues/813" data-hovercard-type="issue" data-hovercard-url="/open-telemetry/semantic-conventions/issues/813/hovercard" href="https://github.com/open-telemetry/semantic-conventions/issues/813">#813</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2286519206" data-permission-text="Title is private" data-url="https://github.com/open-telemetry/semantic-conventions/issues/1016" data-hovercard-type="pull_request" data-hovercard-url="/open-telemetry/semantic-conventions/pull/1016/hovercard" href="https://github.com/open-telemetry/semantic-conventions/pull/1016">#1016</a>)</p> </li> <li> <p><code>messaging</code>: Show all applicable attributes in individual messaging semantic conventions. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2221751255" data-permission-text="Title is private" data-url="https://github.com/open-telemetry/semantic-conventions/issues/869" data-hovercard-type="issue" data-hovercard-url="/open-telemetry/semantic-conventions/issues/869/hovercard" href="https://github.com/open-telemetry/semantic-conventions/issues/869">#869</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2286733771" data-permission-text="Title is private" data-url="https://github.com/open-telemetry/semantic-conventions/issues/1018" data-hovercard-type="pull_request" data-hovercard-url="/open-telemetry/semantic-conventions/pull/1018/hovercard" href="https://github.com/open-telemetry/semantic-conventions/pull/1018">#1018</a>)</p> </li> <li> <p><code>process</code>: Add additional attributes to process attribute registry (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2015129430" data-permission-text="Title is private" data-url="https://github.com/open-telemetry/semantic-conventions/issues/564" data-hovercard-type="pull_request" data-hovercard-url="/open-telemetry/semantic-conventions/pull/564/hovercard" href="https://github.com/open-telemetry/semantic-conventions/pull/564">#564</a>)</p> </li> <li> <p><code>messaging</code>: Add a GCP Pub/Sub unary pull example and the new GCP messaging attributes: - <code>messaging.gcp_pubsub.message.ack_deadline</code>, - <code>messaging.gcp_pubsub.message.ack_id</code>, - <code>messaging.gcp_pubsub.message.delivery_attempt</code> (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1995123229" data-permission-text="Title is private" data-url="https://github.com/open-telemetry/semantic-conventions/issues/527" data-hovercard-type="issue" data-hovercard-url="/open-telemetry/semantic-conventions/issues/527/hovercard" href="https://github.com/open-telemetry/semantic-conventions/issues/527">#527</a>)</p> </li> <li> <p><code>db</code>: Add <code>db.client.operation.duration</code> metric (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1991797441" data-permission-text="Title is private" data-url="https://github.com/open-telemetry/semantic-conventions/issues/512" data-hovercard-type="issue" data-hovercard-url="/open-telemetry/semantic-conventions/issues/512/hovercard" href="https://github.com/open-telemetry/semantic-conventions/issues/512">#512</a>)</p> </li> <li> <p><code>messaging</code>: Adds `messaging.destination.partition.id`` to the messaging attributes (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2185047744" data-permission-text="Title is private" data-url="https://github.com/open-telemetry/semantic-conventions/issues/814" data-hovercard-type="pull_request" data-hovercard-url="/open-telemetry/semantic-conventions/pull/814/hovercard" href="https://github.com/open-telemetry/semantic-conventions/pull/814">#814</a>)</p> </li> <li> <p><code>exception</code>: Replace constraints with requirement levels on exceptions. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2216070269" data-permission-text="Title is private" data-url="https://github.com/open-telemetry/semantic-conventions/issues/862" data-hovercard-type="pull_request" data-hovercard-url="/open-telemetry/semantic-conventions/pull/862/hovercard" href="https://github.com/open-telemetry/semantic-conventions/pull/862">#862</a>)</p> </li> <li> <p><code>process</code>: Replace constraints with requirement_level in process attributes. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2216082891" data-permission-text="Title is private" data-url="https://github.com/open-telemetry/semantic-conventions/issues/863" data-hovercard-type="pull_request" data-hovercard-url="/open-telemetry/semantic-conventions/pull/863/hovercard" href="https://github.com/open-telemetry/semantic-conventions/pull/863">#863</a>)</p> </li> <li> <p><code>db</code>: Reorganize DB conventions to be shared across span and metric conventions. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2232098784" data-permission-text="Title is private" data-url="https://github.com/open-telemetry/semantic-conventions/issues/910" data-hovercard-type="pull_request" data-hovercard-url="/open-telemetry/semantic-conventions/pull/910/hovercard" href="https://github.com/open-telemetry/semantic-conventions/pull/910">#910</a>)</p> </li> <li> <p><code>all</code>: Migrate Attribute Registry to be completely autogenerated. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1811747563" data-permission-text="Title is private" data-url="https://github.com/open-telemetry/semantic-conventions/issues/197" data-hovercard-type="issue" data-hovercard-url="/open-telemetry/semantic-conventions/issues/197/hovercard" href="https://github.com/open-telemetry/semantic-conventions/issues/197">#197</a>)<br> Migrate to using weaver for markdown generation (snippet + registry).<br> The entirety of the registry now is generated using weaver with templates<br> under the <code>templates/</code> directory. Snippets still require a hardcoded<br> command.</p> </li> <li> <p><code>http</code>: List all HTTP client and server attributes in the corresponding table, remove common attributes from yaml and markdown. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2249267191" data-permission-text="Title is private" data-url="https://github.com/open-telemetry/semantic-conventions/issues/928" data-hovercard-type="issue" data-hovercard-url="/open-telemetry/semantic-conventions/issues/928/hovercard" href="https://github.com/open-telemetry/semantic-conventions/issues/928">#928</a>)</p> </li> <li> <p><code>other</code>: Document patterns and suggestions for semconv code generation. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2005434950" data-permission-text="Title is private" data-url="https://github.com/open-telemetry/semantic-conventions/issues/551" data-hovercard-type="issue" data-hovercard-url="/open-telemetry/semantic-conventions/issues/551/hovercard" href="https://github.com/open-telemetry/semantic-conventions/issues/551">#551</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2260022392" data-permission-text="Title is private" data-url="https://github.com/open-telemetry/semantic-conventions/issues/953" data-hovercard-type="pull_request" data-hovercard-url="/open-telemetry/semantic-conventions/pull/953/hovercard" href="https://github.com/open-telemetry/semantic-conventions/pull/953">#953</a>)</p> </li> <li> <p><code>db</code>: Show applicable common attributes in individual database semantic conventions. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2266443235" data-permission-text="Title is private" data-url="https://github.com/open-telemetry/semantic-conventions/issues/973" data-hovercard-type="pull_request" data-hovercard-url="/open-telemetry/semantic-conventions/pull/973/hovercard" href="https://github.com/open-telemetry/semantic-conventions/pull/973">#973</a>)</p> </li> <li> <p><code>db</code>: Add <code>error.type</code> attribute to the database span and operation duration metric. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2266561839" data-permission-text="Title is private" data-url="https://github.com/open-telemetry/semantic-conventions/issues/975" data-hovercard-type="pull_request" data-hovercard-url="/open-telemetry/semantic-conventions/pull/975/hovercard" href="https://github.com/open-telemetry/semantic-conventions/pull/975">#975</a>)</p> </li> <li> <p><code>db</code>: Parameterized query text does not need to be sanitized by default (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2266574593" data-permission-text="Title is private" data-url="https://github.com/open-telemetry/semantic-conventions/issues/976" data-hovercard-type="pull_request" data-hovercard-url="/open-telemetry/semantic-conventions/pull/976/hovercard" href="https://github.com/open-telemetry/semantic-conventions/pull/976">#976</a>)</p> </li> <li> <p><code>http</code>: List experimental HTTP attributes applicable to HTTP client and server spans. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2272874112" data-permission-text="Title is private" data-url="https://github.com/open-telemetry/semantic-conventions/issues/989" data-hovercard-type="pull_request" data-hovercard-url="/open-telemetry/semantic-conventions/pull/989/hovercard" href="https://github.com/open-telemetry/semantic-conventions/pull/989">#989</a>)</p> </li> <li> <p><code>db</code>: Finalizes the migration requirement for instrumentations to follow when updating to stable database semconv. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2124200768" data-permission-text="Title is private" data-url="https://github.com/open-telemetry/semantic-conventions/issues/719" data-hovercard-type="issue" data-hovercard-url="/open-telemetry/semantic-conventions/issues/719/hovercard" href="https://github.com/open-telemetry/semantic-conventions/issues/719">#719</a>)</p> </li> <li> <p><code>http</code>: New <code>url.template</code> attribute added to URL, HTTP client attributes are extended with optional low-cardinality <code>url.template</code> (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2107516610" data-permission-text="Title is private" data-url="https://github.com/open-telemetry/semantic-conventions/issues/675" data-hovercard-type="pull_request" data-hovercard-url="/open-telemetry/semantic-conventions/pull/675/hovercard" href="https://github.com/open-telemetry/semantic-conventions/pull/675">#675</a>)</p> </li> <li> <p><code>db</code>: Add note to <code>db.collection.name</code>, <code>db.namespace</code>, and <code>db.operation.name</code> about capturing those without attempting to do any case normalization.<br> (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2226822323" data-permission-text="Title is private" data-url="https://github.com/open-telemetry/semantic-conventions/issues/886" data-hovercard-type="issue" data-hovercard-url="/open-telemetry/semantic-conventions/issues/886/hovercard" href="https://github.com/open-telemetry/semantic-conventions/issues/886">#886</a>)</p> </li> <li> <p><code>events</code>: Provides additional definitions of log events and their structure. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2139735298" data-permission-text="Title is private" data-url="https://github.com/open-telemetry/semantic-conventions/issues/755" data-hovercard-type="issue" data-hovercard-url="/open-telemetry/semantic-conventions/issues/755/hovercard" href="https://github.com/open-telemetry/semantic-conventions/issues/755">#755</a>)</p> </li> <li> <p><code>k8s</code>: add container.status.last_terminated_reason resource attribute (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2243002863" data-permission-text="Title is private" data-url="https://github.com/open-telemetry/semantic-conventions/issues/922" data-hovercard-type="issue" data-hovercard-url="/open-telemetry/semantic-conventions/issues/922/hovercard" href="https://github.com/open-telemetry/semantic-conventions/issues/922">#922</a>)</p> </li> </ul> <h3>🧰 Bug fixes 🧰</h3> <ul> <li><code>http</code>: Add previously deprecated http attributes to registry (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2288411532" data-permission-text="Title is private" data-url="https://github.com/open-telemetry/semantic-conventions/issues/1025" data-hovercard-type="pull_request" data-hovercard-url="/open-telemetry/semantic-conventions/pull/1025/hovercard" href="https://github.com/open-telemetry/semantic-conventions/pull/1025">#1025</a>)<br> These attributes were deprecated in 1.13</li> <li><code>net</code>: Add previously deprecated net attributes to registry (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2289802107" data-permission-text="Title is private" data-url="https://github.com/open-telemetry/semantic-conventions/issues/1029" data-hovercard-type="pull_request" data-hovercard-url="/open-telemetry/semantic-conventions/pull/1029/hovercard" href="https://github.com/open-telemetry/semantic-conventions/pull/1029">#1029</a>)<br> These attributes were deprecated in 1.13</li> </ul></div> ### Follow up work - [ ] Update all dependencies on semconv to v1.26.0 --------- Co-authored-by: Tyler Yahn <codingalias@gmail.com> Co-authored-by: Aaron Clawson <MadVikingGod@users.noreply.github.com> Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com> |
||
ttoad
|
86df763d90
|
trace: Span in noop.Start is no longer allocated (#5457)
trace/noop/noop.Span should be instance. This will reduce memory waste. Benchmark results with changes: new.txt ``` goos: darwin goarch: arm64 pkg: go.opentelemetry.io/otel/trace/noop BenchmarkNoopInstance-10 29894822 39.94 ns/op 48 B/op 1 allocs/op BenchmarkNoopInstance-10 29675424 39.99 ns/op 48 B/op 1 allocs/op BenchmarkNoopInstance-10 30064700 39.98 ns/op 48 B/op 1 allocs/op BenchmarkNoopInstance-10 29962016 40.03 ns/op 48 B/op 1 allocs/op BenchmarkNoopInstance-10 30060465 40.02 ns/op 48 B/op 1 allocs/op BenchmarkNoopInstance-10 29916855 40.04 ns/op 48 B/op 1 allocs/op BenchmarkNoopInstance-10 29829998 40.28 ns/op 48 B/op 1 allocs/op BenchmarkNoopInstance-10 30084706 39.99 ns/op 48 B/op 1 allocs/op BenchmarkNoopInstance-10 30087441 40.02 ns/op 48 B/op 1 allocs/op BenchmarkNoopInstance-10 29864365 40.14 ns/op 48 B/op 1 allocs/op ``` without changes on `main`: old.txt ``` goos: darwin goarch: arm64 pkg: go.opentelemetry.io/otel/trace/noop BenchmarkNoopInstance-10 14813442 67.64 ns/op 128 B/op 2 allocs/op BenchmarkNoopInstance-10 17714486 68.17 ns/op 128 B/op 2 allocs/op BenchmarkNoopInstance-10 17701257 67.66 ns/op 128 B/op 2 allocs/op BenchmarkNoopInstance-10 17805859 67.69 ns/op 128 B/op 2 allocs/op BenchmarkNoopInstance-10 17912841 67.43 ns/op 128 B/op 2 allocs/op BenchmarkNoopInstance-10 17864120 67.58 ns/op 128 B/op 2 allocs/op BenchmarkNoopInstance-10 17663130 68.41 ns/op 128 B/op 2 allocs/op BenchmarkNoopInstance-10 17740423 67.57 ns/op 128 B/op 2 allocs/op BenchmarkNoopInstance-10 17751040 67.56 ns/op 128 B/op 2 allocs/op BenchmarkNoopInstance-10 17738064 67.91 ns/op 128 B/op 2 allocs/op ``` benchstat: ``` goos: darwin goarch: arm64 pkg: go.opentelemetry.io/otel/trace/noop │ old.txt │ new.txt │ │ sec/op │ sec/op vs base │ NoopInstance-10 67.65n ± 1% 40.02n ± 0% -40.84% (p=0.000 n=10) │ old.txt │ new.txt │ │ B/op │ B/op vs base │ NoopInstance-10 128.00 ± 0% 48.00 ± 0% -62.50% (p=0.000 n=10) │ old.txt │ new.txt │ │ allocs/op │ allocs/op vs base │ NoopInstance-10 2.000 ± 0% 1.000 ± 0% -50.00% (p=0.000 n=10) ``` Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com> |
||
Anton Manakin
|
4fc7162e89
|
sdk/log: Fix counting number of dropped attributes of log.Record (#5464)
Applying attribute limits in `Record` uses value receiver. But it should add count of dropped attrs. In this PR I add using of pointer receiver. Also it's slightly faster with pointer receiver: ``` goos: darwin goarch: arm64 pkg: go.opentelemetry.io/otel/sdk/log │ old.txt │ new.txt │ │ sec/op │ sec/op vs base │ SetAddAttributes-10 175.7n ± 3% 159.8n ± 4% -9.08% (p=0.000 n=10) │ old.txt │ new.txt │ │ B/op │ B/op vs base │ SetAddAttributes-10 48.00 ± 0% 48.00 ± 0% ~ (p=1.000 n=10) ¹ ¹ all samples are equal │ old.txt │ new.txt │ │ allocs/op │ allocs/op vs base │ SetAddAttributes-10 1.000 ± 0% 1.000 ± 0% ~ (p=1.000 n=10) ¹ ¹ all samples are equal ``` |
||
Tyler Yahn
|
047df28b88
|
Guard rng in exemplar rand computation (#5456)
Fix #5455 The `math/rand.Rand` type is not safe for concurrent access. Concurrent measurements, and therefore concurrent exemplar computation, are allowed. Ensure this concurrent design does not lead to data races with `rng`. |
||
Tyler Yahn
|
baa8efe132
|
Document instrument name requirements (#5435)
Fix #5377 --------- Co-authored-by: Sam Xie <sam@samxie.me> |
||
Tyler Yahn
|
5bfa9c55be
|
Log warning when a trace attribute/event/link is discarded due to limits (#5434)
Fix #5343 - Update the `evictionQueue` to log when it drops a value - Update the `evictionQueue` to be declared over an `[T any]` parameter so it knows what to log when it is dropping a value and to reduce the `interface{}` allocation - Add a `clone` method to replace the now unneeded `interfaceArrayTo*Array` functions. - Update the `recordingSpan` to log once that is dropped an attribute when limits are reached. |
||
Tyler Yahn
|
c3569d85d9
|
Export the Instrument IsEmpty method (#5431)
From https://github.com/open-telemetry/opentelemetry-go-contrib/pull/5654#discussion_r1617971674 Constructing a view requires an `Instrument` to be constructed. Given `NewView` will not return an error directly when an empty instrument is passed, it may be ideal for users to check this prior to making the call. Instead of having all use-cases copy this code, export it so they can just call the method. |
||
Tyler Yahn
|
525fedbb26
|
Identify global Tracer s and Meter s with their schema URLs (#5426)
Fix #5403 |
||
Tyler Yahn
|
be1b9cfc37
|
Log a warning when log Record attribute is dropped (#5376)
Fix #5317 According to the [specification](https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/logs/sdk.md#logrecord-limits), there should be a message printed in the SDK's log to indicate to the user that an attribute was discarded due to such a limit. To prevent excessive logging, the message must be printed at most once per `LogRecord` (i.e., not per discarded attribute). This change centralizes the `Record` dropped field writes and calls a global logging function. This will at most log once per any `Record` dropping attributes, meeting the specification requirement. This does not log once per `Record` when an attribute is dropped. To do that we would need to maintain state within the `Record` (i.e. `sync.Mutex` or `sync.Once`). These types cannot be copied, meaning the `Record` would take on this "no copy" requirement. This seems too restrictive and with the permissive specification allowing a single log line, that is the solution added. --------- Co-authored-by: Robert Pająk <pellared@hotmail.com> |
||
renovate[bot]
|
7c5e64cccc
|
chore(deps): update dependency codespell to v2.3.0 (#5409)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Robert Pająk <pellared@hotmail.com> |
||
Tyler Yahn
|
5661ff0ded
|
Release v1.27.0/v0.49.0/v0.3.0 (#5392)
This release includes the first beta release of the OpenTelemetry Logs Bridge API and SDK for Go. ### Added - Add example for `go.opentelemetry.io/otel/exporters/stdout/stdoutlog`. (#5242) - Add `RecordFactory` in `go.opentelemetry.io/otel/sdk/log/logtest` to facilitate testing exporter and processor implementations. (#5258) - Add `RecordFactory` in `go.opentelemetry.io/otel/log/logtest` to facilitate testing bridge implementations. (#5263) - The count of dropped records from the `BatchProcessor` in `go.opentelemetry.io/otel/sdk/log` is logged. (#5276) - Add metrics in the `otel-collector` example. (#5283) - Add the synchronous gauge instrument to `go.opentelemetry.io/otel/metric`. (#5304) - An `int64` or `float64` synchronous gauge instrument can now be created from a `Meter`. - All implementations of the API (`go.opentelemetry.io/otel/metric/noop`, `go.opentelemetry.io/otel/sdk/metric`) are updated to support this instrument. - Add logs to `go.opentelemetry.io/otel/example/dice`. (#5349) ### Changed - The `Shutdown` method of `Exporter` in `go.opentelemetry.io/otel/exporters/stdout/stdouttrace` ignores the context cancellation and always returns `nil`. (#5189) - The `ForceFlush` and `Shutdown` methods of the exporter returned by `New` in `go.opentelemetry.io/otel/exporters/stdout/stdoutmetric` ignore the context cancellation and always return `nil`. (#5189) - Apply the value length limits to `Record` attributes in `go.opentelemetry.io/otel/sdk/log`. (#5230) - De-duplicate map attributes added to a `Record` in `go.opentelemetry.io/otel/sdk/log`. (#5230) - `go.opentelemetry.io/otel/exporters/stdout/stdoutlog` won't print timestamps when `WithoutTimestamps` option is set. (#5241) - The `go.opentelemetry.io/otel/exporters/stdout/stdoutlog` exporter won't print `AttributeValueLengthLimit` and `AttributeCountLimit` fields now, instead it prints the `DroppedAttributes` field. (#5272) - Improved performance in the `Stringer` implementation of `go.opentelemetry.io/otel/baggage.Member` by reducing the number of allocations. (#5286) - Set the start time for last-value aggregates in `go.opentelemetry.io/otel/sdk/metric`. (#5305) - The `Span` in `go.opentelemetry.io/otel/sdk/trace` will record links without span context if either non-empty `TraceState` or attributes are provided. (#5315) - Upgrade all dependencies of `go.opentelemetry.io/otel/semconv/v1.24.0` to `go.opentelemetry.io/otel/semconv/v1.25.0`. (#5374) ### Fixed - Comparison of unordered maps for `go.opentelemetry.io/otel/log.KeyValue` and `go.opentelemetry.io/otel/log.Value`. (#5306) - Fix the empty output of `go.opentelemetry.io/otel/log.Value` in `go.opentelemetry.io/otel/exporters/stdout/stdoutlog`. (#5311) - Split the behavior of `Recorder` in `go.opentelemetry.io/otel/log/logtest` so it behaves as a `LoggerProvider` only. (#5365) - Fix wrong package name of the error message when parsing endpoint URL in `go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp`. (#5371) - Identify the `Logger` returned from the global `LoggerProvider` in `go.opentelemetry.io/otel/log/global` with its schema URL. (#5375) |