Tyler Yahn
5358fd737d
Upgrade semconv dependencies to v1.37.0 ( #7260 )
...
Resolve https://github.com/open-telemetry/opentelemetry-go/issues/7255
2025-08-28 11:29:52 +02:00
renovate[bot]
25d02741f7
fix(deps): update module github.com/stretchr/testify to v1.11.1 ( #7261 )
...
This PR contains the following updates:
| Package | Change | Age | Confidence |
|---|---|---|---|
|
[github.com/stretchr/testify](https://redirect.github.com/stretchr/testify )
| `v1.11.0` -> `v1.11.1` |
[](https://docs.renovatebot.com/merge-confidence/ )
|
[](https://docs.renovatebot.com/merge-confidence/ )
|
---
> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.
---
### Release Notes
<details>
<summary>stretchr/testify (github.com/stretchr/testify)</summary>
###
[`v1.11.1`](https://redirect.github.com/stretchr/testify/releases/tag/v1.11.1 )
[Compare
Source](https://redirect.github.com/stretchr/testify/compare/v1.11.0...v1.11.1 )
This release fixes
[#​1785](https://redirect.github.com/stretchr/testify/issues/1785 )
introduced in v1.11.0 where expected argument values implementing the
stringer interface (`String() string`) with a method which mutates their
value, when passed to mock.Mock.On (`m.On("Method",
<expected>).Return()`) or actual argument values passed to
mock.Mock.Called may no longer match one another where they previously
did match. The behaviour prior to v1.11.0 where the stringer is always
called is restored. Future testify releases may not call the stringer
method at all in this case.
#### What's Changed
- Backport
[#​1786](https://redirect.github.com/stretchr/testify/issues/1786 )
to release/1.11: mock: revert to pre-v1.11.0 argument matching behavior
for mutating stringers by
[@​brackendawson](https://redirect.github.com/brackendawson ) in
[#​1788](https://redirect.github.com/stretchr/testify/pull/1788 )
**Full Changelog**:
<https://github.com/stretchr/testify/compare/v1.11.0...v1.11.1 >
</details>
---
### Configuration
📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about these
updates again.
---
- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box
---
This PR was generated by [Mend Renovate](https://mend.io/renovate/ ).
View the [repository job
log](https://developer.mend.io/github/open-telemetry/opentelemetry-go ).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MS44Mi43IiwidXBkYXRlZEluVmVyIjoiNDEuODIuNyIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiU2tpcCBDaGFuZ2Vsb2ciLCJkZXBlbmRlbmNpZXMiXX0=-->
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: dmathieu <damien.mathieu@elastic.co >
2025-08-27 20:20:20 +02:00
Tyler Yahn
c8b89e9780
Propagate context to self-observability measurements in sdk/trace ( #7209 )
...
Ensures metric functionality that integrates with trace context (e.g.
exemplars) correctly receive the trace context and anything else the
user has passed.
2025-08-26 08:58:35 -07:00
Joe Schafer
49be00144e
trace: optimize id parsing and string functions ( #6791 )
...
With specialized routines, we can avoid the allocation of
hex.DecodeString since we know the structure of the IDs.
We can use `==` instead of bytes.Equal for arrays. From the Go [spec]:
> Array types are comparable if their array element types are
comparable. Two
> array values are equal if their corresponding element values are
equal. The
> elements are compared in ascending index order, and comparison stops
as soon
> as two element values differ (or all elements have been compared).
[spec]: https://go.dev/ref/spec#Comparison_operators
### Benchstat
To generate:
```sh
mkdir private
cd sdk
go test -run=xxxxMatchNothingxxxx -bench=. -count=10 go.opentelemetry.io/otel/sdk/trace -timeout=30m | tee ../private/base.txt
go test -run=xxxxMatchNothingxxxx -bench=. -count=10 go.opentelemetry.io/otel/sdk/trace -timeout=30m | tee ../private/new.txt
benchstat ../private/base.txt ../private/new.txt
```
### Results as of 2025-08-21
```
goos: darwin
goarch: arm64
pkg: go.opentelemetry.io/otel/sdk/trace
cpu: Apple M2 Max
│ ../private/base.txt │ ../private/new.txt │
│ sec/op │ sec/op vs base │
Truncate/Unlimited-12 0.2274n ± 2% 0.2262n ± 1% ~ (p=0.971 n=10)
Truncate/Zero-12 0.3252n ± 1% 0.3267n ± 1% ~ (p=0.171 n=10)
Truncate/Short-12 0.2250n ± 1% 0.2247n ± 1% ~ (p=0.897 n=10)
Truncate/ASCII-12 0.7280n ± 0% 0.7297n ± 0% ~ (p=0.159 n=10)
Truncate/ValidUTF-8-12 1.373n ± 3% 1.376n ± 9% ~ (p=0.084 n=10)
Truncate/InvalidUTF-8-12 9.605n ± 4% 9.724n ± 7% ~ (p=0.289 n=10)
Truncate/MixedUTF-8-12 17.54n ± 2% 17.56n ± 1% ~ (p=0.839 n=10)
RecordingSpanSetAttributes/WithLimit/false-12 2.046µ ± 1% 2.055µ ± 1% ~ (p=0.383 n=10)
RecordingSpanSetAttributes/WithLimit/true-12 4.329µ ± 0% 4.335µ ± 0% ~ (p=0.108 n=10)
SpanEnd-12 90.10n ± 30% 102.26n ± 20% ~ (p=0.143 n=10)
TraceStart/with_a_simple_span-12 300.4n ± 7% 290.1n ± 4% ~ (p=0.353 n=10)
TraceStart/with_several_links-12 416.8n ± 3% 407.0n ± 2% -2.34% (p=0.014 n=10)
TraceStart/with_attributes-12 460.6n ± 1% 446.5n ± 2% -3.04% (p=0.000 n=10)
SpanLimits/AttributeValueLengthLimit-12 4.425µ ± 3% 4.254µ ± 1% -3.86% (p=0.000 n=10)
SpanLimits/AttributeCountLimit-12 4.138µ ± 1% 3.986µ ± 1% -3.65% (p=0.000 n=10)
SpanLimits/EventCountLimit-12 3.926µ ± 1% 3.780µ ± 1% -3.73% (p=0.000 n=10)
SpanLimits/LinkCountLimit-12 3.879µ ± 1% 3.738µ ± 1% -3.64% (p=0.000 n=10)
SpanLimits/AttributePerEventCountLimit-12 4.249µ ± 1% 4.216µ ± 1% ~ (p=0.066 n=10)
SpanLimits/AttributePerLinkCountLimit-12 4.175µ ± 1% 4.226µ ± 0% +1.22% (p=0.037 n=10)
SpanSetAttributesOverCapacity-12 1.648µ ± 0% 1.635µ ± 6% ~ (p=0.382 n=10)
StartEndSpan/AlwaysSample-12 305.3n ± 1% 298.9n ± 2% -2.10% (p=0.045 n=10)
StartEndSpan/NeverSample-12 137.0n ± 0% 132.9n ± 0% -3.03% (p=0.000 n=10)
SpanWithAttributes_4/AlwaysSample-12 516.3n ± 1% 507.6n ± 0% -1.68% (p=0.000 n=10)
SpanWithAttributes_4/NeverSample-12 228.7n ± 1% 221.8n ± 1% -3.00% (p=0.000 n=10)
SpanWithAttributes_8/AlwaysSample-12 706.6n ± 1% 689.0n ± 0% -2.50% (p=0.000 n=10)
SpanWithAttributes_8/NeverSample-12 313.0n ± 1% 307.1n ± 0% -1.87% (p=0.000 n=10)
SpanWithAttributes_all/AlwaysSample-12 565.0n ± 1% 560.8n ± 0% -0.75% (p=0.002 n=10)
SpanWithAttributes_all/NeverSample-12 251.2n ± 1% 247.5n ± 4% -1.45% (p=0.034 n=10)
SpanWithAttributes_all_2x/AlwaysSample-12 823.4n ± 1% 812.0n ± 1% -1.39% (p=0.028 n=10)
SpanWithAttributes_all_2x/NeverSample-12 368.8n ± 1% 360.6n ± 0% -2.22% (p=0.000 n=10)
SpanWithEvents_4/AlwaysSample-12 709.3n ± 0% 699.6n ± 0% -1.37% (p=0.000 n=10)
SpanWithEvents_4/NeverSample-12 139.4n ± 0% 137.0n ± 0% -1.72% (p=0.000 n=10)
SpanWithEvents_8/AlwaysSample-12 1.091µ ± 1% 1.073µ ± 0% -1.60% (p=0.000 n=10)
SpanWithEvents_8/NeverSample-12 142.1n ± 0% 140.1n ± 0% -1.41% (p=0.000 n=10)
SpanWithEvents_WithStackTrace/AlwaysSample-12 424.6n ± 0% 417.9n ± 0% -1.57% (p=0.000 n=10)
SpanWithEvents_WithStackTrace/NeverSample-12 151.3n ± 0% 148.1n ± 0% -2.15% (p=0.000 n=10)
SpanWithEvents_WithTimestamp/AlwaysSample-12 412.6n ± 0% 407.6n ± 0% -1.19% (p=0.000 n=10)
SpanWithEvents_WithTimestamp/NeverSample-12 174.5n ± 0% 172.7n ± 0% -1.03% (p=0.000 n=10)
TraceIDFromHex-12 57.22n ± 0% 15.88n ± 0% -72.25% (p=0.000 n=10)
SpanIDFromHex-12 35.000n ± 0% 8.676n ± 0% -75.21% (p=0.000 n=10)
TraceID_DotString-12 42.39n ± 0% 24.22n ± 0% -42.85% (p=0.000 n=10)
SpanID_DotString-12 31.41n ± 0% 16.98n ± 0% -45.94% (p=0.000 n=10)
SpanProcessorOnEnd/batch:_10,_spans:_10-12 164.0n ± 0% 163.8n ± 0% -0.12% (p=0.021 n=10)
SpanProcessorOnEnd/batch:_10,_spans:_100-12 1.640µ ± 0% 1.637µ ± 0% -0.18% (p=0.016 n=10)
SpanProcessorOnEnd/batch:_100,_spans:_10-12 164.0n ± 0% 163.7n ± 0% -0.18% (p=0.000 n=10)
SpanProcessorOnEnd/batch:_100,_spans:_100-12 1.641µ ± 0% 1.636µ ± 0% -0.30% (p=0.000 n=10)
SpanProcessorVerboseLogging-12 6.413µ ± 2% 6.444µ ± 5% ~ (p=0.424 n=10)
geomean 204.9n 187.0n -8.69%
│ ../private/base.txt │ ../private/new.txt │
│ B/op │ B/op vs base │
Truncate/Unlimited-12 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹
Truncate/Zero-12 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹
Truncate/Short-12 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹
Truncate/ASCII-12 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹
Truncate/ValidUTF-8-12 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹
Truncate/InvalidUTF-8-12 16.00 ± 0% 16.00 ± 0% ~ (p=1.000 n=10) ¹
Truncate/MixedUTF-8-12 32.00 ± 0% 32.00 ± 0% ~ (p=1.000 n=10) ¹
RecordingSpanSetAttributes/WithLimit/false-12 6.891Ki ± 0% 6.891Ki ± 0% ~ (p=1.000 n=10) ¹
RecordingSpanSetAttributes/WithLimit/true-12 7.023Ki ± 0% 7.023Ki ± 0% ~ (p=1.000 n=10) ¹
SpanEnd-12 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹
TraceStart/with_a_simple_span-12 528.0 ± 0% 528.0 ± 0% ~ (p=1.000 n=10) ¹
TraceStart/with_several_links-12 704.0 ± 0% 704.0 ± 0% ~ (p=1.000 n=10) ¹
TraceStart/with_attributes-12 784.0 ± 0% 784.0 ± 0% ~ (p=1.000 n=10) ¹
SpanLimits/AttributeValueLengthLimit-12 10.56Ki ± 0% 10.56Ki ± 0% ~ (p=1.000 n=10) ¹
SpanLimits/AttributeCountLimit-12 9.844Ki ± 0% 9.844Ki ± 0% ~ (p=1.000 n=10) ¹
SpanLimits/EventCountLimit-12 9.422Ki ± 0% 9.422Ki ± 0% ~ (p=1.000 n=10) ¹
SpanLimits/LinkCountLimit-12 9.031Ki ± 0% 9.031Ki ± 0% ~ (p=1.000 n=10) ¹
SpanLimits/AttributePerEventCountLimit-12 10.47Ki ± 0% 10.47Ki ± 0% ~ (p=1.000 n=10) ¹
SpanLimits/AttributePerLinkCountLimit-12 10.47Ki ± 0% 10.47Ki ± 0% ~ (p=1.000 n=10) ¹
SpanSetAttributesOverCapacity-12 592.0 ± 0% 592.0 ± 0% ~ (p=1.000 n=10) ¹
StartEndSpan/AlwaysSample-12 528.0 ± 0% 528.0 ± 0% ~ (p=1.000 n=10) ¹
StartEndSpan/NeverSample-12 144.0 ± 0% 144.0 ± 0% ~ (p=1.000 n=10) ¹
SpanWithAttributes_4/AlwaysSample-12 1.016Ki ± 0% 1.016Ki ± 0% ~ (p=1.000 n=10) ¹
SpanWithAttributes_4/NeverSample-12 400.0 ± 0% 400.0 ± 0% ~ (p=1.000 n=10) ¹
SpanWithAttributes_8/AlwaysSample-12 1.516Ki ± 0% 1.516Ki ± 0% ~ (p=1.000 n=10) ¹
SpanWithAttributes_8/NeverSample-12 656.0 ± 0% 656.0 ± 0% ~ (p=1.000 n=10) ¹
SpanWithAttributes_all/AlwaysSample-12 1.141Ki ± 0% 1.141Ki ± 0% ~ (p=1.000 n=10) ¹
SpanWithAttributes_all/NeverSample-12 464.0 ± 0% 464.0 ± 0% ~ (p=1.000 n=10) ¹
SpanWithAttributes_all_2x/AlwaysSample-12 1.891Ki ± 0% 1.891Ki ± 0% ~ (p=1.000 n=10) ¹
SpanWithAttributes_all_2x/NeverSample-12 848.0 ± 0% 848.0 ± 0% ~ (p=1.000 n=10) ¹
SpanWithEvents_4/AlwaysSample-12 1.016Ki ± 0% 1.016Ki ± 0% ~ (p=1.000 n=10) ¹
SpanWithEvents_4/NeverSample-12 144.0 ± 0% 144.0 ± 0% ~ (p=1.000 n=10) ¹
SpanWithEvents_8/AlwaysSample-12 1.641Ki ± 0% 1.641Ki ± 0% ~ (p=1.000 n=10) ¹
SpanWithEvents_8/NeverSample-12 144.0 ± 0% 144.0 ± 0% ~ (p=1.000 n=10) ¹
SpanWithEvents_WithStackTrace/AlwaysSample-12 624.0 ± 0% 624.0 ± 0% ~ (p=1.000 n=10) ¹
SpanWithEvents_WithStackTrace/NeverSample-12 160.0 ± 0% 160.0 ± 0% ~ (p=1.000 n=10) ¹
SpanWithEvents_WithTimestamp/AlwaysSample-12 648.0 ± 0% 648.0 ± 0% ~ (p=1.000 n=10) ¹
SpanWithEvents_WithTimestamp/NeverSample-12 184.0 ± 0% 184.0 ± 0% ~ (p=1.000 n=10) ¹
TraceIDFromHex-12 16.00 ± 0% 0.00 ± 0% -100.00% (p=0.000 n=10)
SpanIDFromHex-12 8.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10)
SpanProcessorOnEnd/batch:_10,_spans:_10-12 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹
SpanProcessorOnEnd/batch:_10,_spans:_100-12 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹
SpanProcessorOnEnd/batch:_100,_spans:_10-12 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹
SpanProcessorOnEnd/batch:_100,_spans:_100-12 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹
SpanProcessorVerboseLogging-12 9.562Ki ± 0% 9.562Ki ± 0% ~ (p=1.000 n=10) ¹
geomean ² ? ² ³
¹ all samples are equal
² summaries must be >0 to compute geomean
³ ratios must be >0 to compute geomean
│ ../private/base.txt │ ../private/new.txt │
│ allocs/op │ allocs/op vs base │
Truncate/Unlimited-12 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹
Truncate/Zero-12 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹
Truncate/Short-12 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹
Truncate/ASCII-12 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹
Truncate/ValidUTF-8-12 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹
Truncate/InvalidUTF-8-12 1.000 ± 0% 1.000 ± 0% ~ (p=1.000 n=10) ¹
Truncate/MixedUTF-8-12 1.000 ± 0% 1.000 ± 0% ~ (p=1.000 n=10) ¹
RecordingSpanSetAttributes/WithLimit/false-12 3.000 ± 0% 3.000 ± 0% ~ (p=1.000 n=10) ¹
RecordingSpanSetAttributes/WithLimit/true-12 10.00 ± 0% 10.00 ± 0% ~ (p=1.000 n=10) ¹
SpanEnd-12 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹
TraceStart/with_a_simple_span-12 2.000 ± 0% 2.000 ± 0% ~ (p=1.000 n=10) ¹
TraceStart/with_several_links-12 3.000 ± 0% 3.000 ± 0% ~ (p=1.000 n=10) ¹
TraceStart/with_attributes-12 4.000 ± 0% 4.000 ± 0% ~ (p=1.000 n=10) ¹
SpanLimits/AttributeValueLengthLimit-12 41.00 ± 0% 41.00 ± 0% ~ (p=1.000 n=10) ¹
SpanLimits/AttributeCountLimit-12 38.00 ± 0% 38.00 ± 0% ~ (p=1.000 n=10) ¹
SpanLimits/EventCountLimit-12 35.00 ± 0% 35.00 ± 0% ~ (p=1.000 n=10) ¹
SpanLimits/LinkCountLimit-12 35.00 ± 0% 35.00 ± 0% ~ (p=1.000 n=10) ¹
SpanLimits/AttributePerEventCountLimit-12 38.00 ± 0% 38.00 ± 0% ~ (p=1.000 n=10) ¹
SpanLimits/AttributePerLinkCountLimit-12 38.00 ± 0% 38.00 ± 0% ~ (p=1.000 n=10) ¹
SpanSetAttributesOverCapacity-12 3.000 ± 0% 3.000 ± 0% ~ (p=1.000 n=10) ¹
StartEndSpan/AlwaysSample-12 2.000 ± 0% 2.000 ± 0% ~ (p=1.000 n=10) ¹
StartEndSpan/NeverSample-12 2.000 ± 0% 2.000 ± 0% ~ (p=1.000 n=10) ¹
SpanWithAttributes_4/AlwaysSample-12 4.000 ± 0% 4.000 ± 0% ~ (p=1.000 n=10) ¹
SpanWithAttributes_4/NeverSample-12 3.000 ± 0% 3.000 ± 0% ~ (p=1.000 n=10) ¹
SpanWithAttributes_8/AlwaysSample-12 4.000 ± 0% 4.000 ± 0% ~ (p=1.000 n=10) ¹
SpanWithAttributes_8/NeverSample-12 3.000 ± 0% 3.000 ± 0% ~ (p=1.000 n=10) ¹
SpanWithAttributes_all/AlwaysSample-12 4.000 ± 0% 4.000 ± 0% ~ (p=1.000 n=10) ¹
SpanWithAttributes_all/NeverSample-12 3.000 ± 0% 3.000 ± 0% ~ (p=1.000 n=10) ¹
SpanWithAttributes_all_2x/AlwaysSample-12 4.000 ± 0% 4.000 ± 0% ~ (p=1.000 n=10) ¹
SpanWithAttributes_all_2x/NeverSample-12 3.000 ± 0% 3.000 ± 0% ~ (p=1.000 n=10) ¹
SpanWithEvents_4/AlwaysSample-12 5.000 ± 0% 5.000 ± 0% ~ (p=1.000 n=10) ¹
SpanWithEvents_4/NeverSample-12 2.000 ± 0% 2.000 ± 0% ~ (p=1.000 n=10) ¹
SpanWithEvents_8/AlwaysSample-12 6.000 ± 0% 6.000 ± 0% ~ (p=1.000 n=10) ¹
SpanWithEvents_8/NeverSample-12 2.000 ± 0% 2.000 ± 0% ~ (p=1.000 n=10) ¹
SpanWithEvents_WithStackTrace/AlwaysSample-12 4.000 ± 0% 4.000 ± 0% ~ (p=1.000 n=10) ¹
SpanWithEvents_WithStackTrace/NeverSample-12 3.000 ± 0% 3.000 ± 0% ~ (p=1.000 n=10) ¹
SpanWithEvents_WithTimestamp/AlwaysSample-12 5.000 ± 0% 5.000 ± 0% ~ (p=1.000 n=10) ¹
SpanWithEvents_WithTimestamp/NeverSample-12 4.000 ± 0% 4.000 ± 0% ~ (p=1.000 n=10) ¹
TraceIDFromHex-12 1.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10)
SpanIDFromHex-12 1.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10)
SpanProcessorOnEnd/batch:_10,_spans:_10-12 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹
SpanProcessorOnEnd/batch:_10,_spans:_100-12 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹
SpanProcessorOnEnd/batch:_100,_spans:_10-12 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹
SpanProcessorOnEnd/batch:_100,_spans:_100-12 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹
SpanProcessorVerboseLogging-12 36.00 ± 0% 36.00 ± 0% ~ (p=1.000 n=10) ¹
geomean ² ? ² ³
¹ all samples are equal
² summaries must be >0 to compute geomean
³ ratios must be >0 to compute geomean
```
Issue: #6721
2025-08-26 14:54:11 +02:00
Cijo Thomas
2512a6b087
Clarify overflow attribute description in doc.go to indicate it is boolean true ( #7247 )
...
and not string "true"
---------
Co-authored-by: Robert Pająk <pellared@hotmail.com >
Co-authored-by: Damien Mathieu <42@dmathieu.com >
2025-08-26 11:04:11 +02:00
Joe Stephenson
a8e15000b6
sdk/log: Deduplicate key-value collections in Record.SetBody ( #7002 )
...
Fixes #6982
```
goos: darwin
goarch: arm64
pkg: go.opentelemetry.io/otel/sdk/log
cpu: Apple M2 Pro
│ old.txt │ new.txt │
│ sec/op │ sec/op vs base │
SetBody/SetBody-12 196.5n ± 14% 365.9n ± 4% +86.26% (p=0.000 n=10)
│ old.txt │ new.txt │
│ B/op │ B/op vs base │
SetBody/SetBody-12 363.0 ± 0% 363.0 ± 0% ~ (p=1.000 n=10) ¹
¹ all samples are equal
│ old.txt │ new.txt │
│ allocs/op │ allocs/op vs base │
SetBody/SetBody-12 4.000 ± 0% 4.000 ± 0% ~ (p=1.000 n=10) ¹
¹ all samples are equal
```
---------
Co-authored-by: Robert Pająk <pellared@hotmail.com >
2025-08-25 18:25:57 +02:00
Yevhenii Solomchenko
3cd63fab03
sdk/metric: Add Documentation for Cardinality Limits ( #7179 )
...
Fixes #6979
Towards #6887
## What
- Documentation includes a section on cardinality limits.
- Adding guidance around what cardinality is, why it is important to
consider, how to control it, and what defaults the SDK provides
---------
Co-authored-by: Robert Pająk <pellared@hotmail.com >
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com >
2025-08-25 18:15:56 +02:00
Tyler Yahn
4b2bef6dd9
[chore] Upgrade semconv pkg use to v1.36.0 ( #7237 )
...
Fix #7236
2025-08-25 16:33:34 +02:00
renovate[bot]
713a1d9a2a
fix(deps): update module github.com/stretchr/testify to v1.11.0 ( #7242 )
...
This PR contains the following updates:
| Package | Change | Age | Confidence |
|---|---|---|---|
|
[github.com/stretchr/testify](https://redirect.github.com/stretchr/testify )
| `v1.10.0` -> `v1.11.0` |
[](https://docs.renovatebot.com/merge-confidence/ )
|
[](https://docs.renovatebot.com/merge-confidence/ )
|
---
> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.
---
### Release Notes
<details>
<summary>stretchr/testify (github.com/stretchr/testify)</summary>
###
[`v1.11.0`](https://redirect.github.com/stretchr/testify/releases/tag/v1.11.0 )
[Compare
Source](https://redirect.github.com/stretchr/testify/compare/v1.10.0...v1.11.0 )
#### What's Changed
##### Functional Changes
v1.11.0 Includes a number of performance improvements.
- Call stack perf change for CallerInfo by
[@​mikeauclair](https://redirect.github.com/mikeauclair ) in
[#​1614](https://redirect.github.com/stretchr/testify/pull/1614 )
- Lazily render mock diff output on successful match by
[@​mikeauclair](https://redirect.github.com/mikeauclair ) in
[#​1615](https://redirect.github.com/stretchr/testify/pull/1615 )
- assert: check early in Eventually, EventuallyWithT, and Never by
[@​cszczepaniak](https://redirect.github.com/cszczepaniak ) in
[#​1427](https://redirect.github.com/stretchr/testify/pull/1427 )
- assert: add IsNotType by
[@​bartventer](https://redirect.github.com/bartventer ) in
[#​1730](https://redirect.github.com/stretchr/testify/pull/1730 )
- assert.JSONEq: shortcut if same strings by
[@​dolmen](https://redirect.github.com/dolmen ) in
[#​1754](https://redirect.github.com/stretchr/testify/pull/1754 )
- assert.YAMLEq: shortcut if same strings by
[@​dolmen](https://redirect.github.com/dolmen ) in
[#​1755](https://redirect.github.com/stretchr/testify/pull/1755 )
- assert: faster and simpler isEmpty using reflect.Value.IsZero by
[@​dolmen](https://redirect.github.com/dolmen ) in
[#​1761](https://redirect.github.com/stretchr/testify/pull/1761 )
- suite: faster methods filtering (internal refactor) by
[@​dolmen](https://redirect.github.com/dolmen ) in
[#​1758](https://redirect.github.com/stretchr/testify/pull/1758 )
##### Fixes
- assert.ErrorAs: log target type by
[@​craig65535](https://redirect.github.com/craig65535 ) in
[#​1345](https://redirect.github.com/stretchr/testify/pull/1345 )
- Fix failure message formatting for Positive and Negative asserts in
[#​1062](https://redirect.github.com/stretchr/testify/pull/1062 )
- Improve ErrorIs message when error is nil but an error was expected by
[@​tsioftas](https://redirect.github.com/tsioftas ) in
[#​1681](https://redirect.github.com/stretchr/testify/pull/1681 )
- fix Subset/NotSubset when calling with mixed input types by
[@​siliconbrain](https://redirect.github.com/siliconbrain ) in
[#​1729](https://redirect.github.com/stretchr/testify/pull/1729 )
- Improve ErrorAs failure message when error is nil by
[@​ccoVeille](https://redirect.github.com/ccoVeille ) in
[#​1734](https://redirect.github.com/stretchr/testify/pull/1734 )
- mock.AssertNumberOfCalls: improve error msg by
[@​3scalation](https://redirect.github.com/3scalation ) in
[#​1743](https://redirect.github.com/stretchr/testify/pull/1743 )
##### Documentation, Build & CI
- docs: Fix typo in README by
[@​alexandear](https://redirect.github.com/alexandear ) in
[#​1688](https://redirect.github.com/stretchr/testify/pull/1688 )
- Replace deprecated io/ioutil with io and os by
[@​alexandear](https://redirect.github.com/alexandear ) in
[#​1684](https://redirect.github.com/stretchr/testify/pull/1684 )
- Document consequences of calling t.FailNow() by
[@​greg0ire](https://redirect.github.com/greg0ire ) in
[#​1710](https://redirect.github.com/stretchr/testify/pull/1710 )
- chore: update docs for Unset
[#​1621](https://redirect.github.com/stretchr/testify/issues/1621 )
by [@​techfg](https://redirect.github.com/techfg ) in
[#​1709](https://redirect.github.com/stretchr/testify/pull/1709 )
- README: apply gofmt to examples by
[@​alexandear](https://redirect.github.com/alexandear ) in
[#​1687](https://redirect.github.com/stretchr/testify/pull/1687 )
- refactor: use %q and %T to simplify fmt.Sprintf by
[@​alexandear](https://redirect.github.com/alexandear ) in
[#​1674](https://redirect.github.com/stretchr/testify/pull/1674 )
- Propose Christophe Colombier (ccoVeille) as approver by
[@​brackendawson](https://redirect.github.com/brackendawson ) in
[#​1716](https://redirect.github.com/stretchr/testify/pull/1716 )
- Update documentation for the Error function in assert or require
package by [@​architagr](https://redirect.github.com/architagr ) in
[#​1675](https://redirect.github.com/stretchr/testify/pull/1675 )
- assert: remove deprecated build constraints by
[@​alexandear](https://redirect.github.com/alexandear ) in
[#​1671](https://redirect.github.com/stretchr/testify/pull/1671 )
- assert: apply gofumpt to internal test suite by
[@​ccoVeille](https://redirect.github.com/ccoVeille ) in
[#​1739](https://redirect.github.com/stretchr/testify/pull/1739 )
- CI: fix shebang in .ci.\*.sh scripts by
[@​dolmen](https://redirect.github.com/dolmen ) in
[#​1746](https://redirect.github.com/stretchr/testify/pull/1746 )
- assert,require: enable parallel testing on (almost) all top tests by
[@​dolmen](https://redirect.github.com/dolmen ) in
[#​1747](https://redirect.github.com/stretchr/testify/pull/1747 )
- suite.Passed: add one more status test report by
[@​Ararsa-Derese](https://redirect.github.com/Ararsa-Derese ) in
[#​1706](https://redirect.github.com/stretchr/testify/pull/1706 )
- Add Helper() method in internal mocks and assert.CollectT by
[@​dolmen](https://redirect.github.com/dolmen ) in
[#​1423](https://redirect.github.com/stretchr/testify/pull/1423 )
- assert.Same/NotSame: improve usage of Sprintf by
[@​ccoVeille](https://redirect.github.com/ccoVeille ) in
[#​1742](https://redirect.github.com/stretchr/testify/pull/1742 )
- mock: enable parallel testing on internal testsuite by
[@​dolmen](https://redirect.github.com/dolmen ) in
[#​1756](https://redirect.github.com/stretchr/testify/pull/1756 )
- suite: cleanup use of 'testing' internals at runtime by
[@​dolmen](https://redirect.github.com/dolmen ) in
[#​1751](https://redirect.github.com/stretchr/testify/pull/1751 )
- assert: check test failure message for Empty and NotEmpty by
[@​ccoVeille](https://redirect.github.com/ccoVeille ) in
[#​1745](https://redirect.github.com/stretchr/testify/pull/1745 )
- deps: fix dependency cycle with objx (again) by
[@​dolmen](https://redirect.github.com/dolmen ) in
[#​1567](https://redirect.github.com/stretchr/testify/pull/1567 )
- assert.Empty: comprehensive doc of "Empty"-ness rules by
[@​dolmen](https://redirect.github.com/dolmen ) in
[#​1753](https://redirect.github.com/stretchr/testify/pull/1753 )
- doc: improve godoc of top level 'testify' package by
[@​dolmen](https://redirect.github.com/dolmen ) in
[#​1760](https://redirect.github.com/stretchr/testify/pull/1760 )
- assert.ErrorAs: simplify retrieving the type name by
[@​ccoVeille](https://redirect.github.com/ccoVeille ) in
[#​1740](https://redirect.github.com/stretchr/testify/pull/1740 )
- assert.EqualValues: improve test coverage to 100% by
[@​dolmen](https://redirect.github.com/dolmen ) in
[#​1763](https://redirect.github.com/stretchr/testify/pull/1763 )
- suite.Run: simplify running of Setup/TeardownSuite by
[@​renzoarreaza](https://redirect.github.com/renzoarreaza ) in
[#​1769](https://redirect.github.com/stretchr/testify/pull/1769 )
- assert.CallerInfo: micro optimization by using LastIndexByte by
[@​dolmen](https://redirect.github.com/dolmen ) in
[#​1767](https://redirect.github.com/stretchr/testify/pull/1767 )
- assert.CallerInfo: micro cleanup by
[@​dolmen](https://redirect.github.com/dolmen ) in
[#​1768](https://redirect.github.com/stretchr/testify/pull/1768 )
- assert: refactor Test*FileExists and Test*DirExists tests to enable
parallel testing by [@​dolmen](https://redirect.github.com/dolmen )
in
[#​1766](https://redirect.github.com/stretchr/testify/pull/1766 )
- suite.Run: refactor handling of stats for improved readability by
[@​dolmen](https://redirect.github.com/dolmen ) in
[#​1764](https://redirect.github.com/stretchr/testify/pull/1764 )
- tests: improve captureTestingT helper by
[@​ccoVeille](https://redirect.github.com/ccoVeille ) in
[#​1741](https://redirect.github.com/stretchr/testify/pull/1741 )
- build(deps): bump actions/checkout from 4 to 5 by
[@​dependabot](https://redirect.github.com/dependabot )\[bot] in
[#​1778](https://redirect.github.com/stretchr/testify/pull/1778 )
#### New Contributors
- [@​greg0ire](https://redirect.github.com/greg0ire ) made their
first contribution in
[#​1710](https://redirect.github.com/stretchr/testify/pull/1710 )
- [@​techfg](https://redirect.github.com/techfg ) made their first
contribution in
[#​1709](https://redirect.github.com/stretchr/testify/pull/1709 )
- [@​mikeauclair](https://redirect.github.com/mikeauclair ) made
their first contribution in
[#​1614](https://redirect.github.com/stretchr/testify/pull/1614 )
- [@​cszczepaniak](https://redirect.github.com/cszczepaniak ) made
their first contribution in
[#​1427](https://redirect.github.com/stretchr/testify/pull/1427 )
- [@​architagr](https://redirect.github.com/architagr ) made their
first contribution in
[#​1675](https://redirect.github.com/stretchr/testify/pull/1675 )
- [@​tsioftas](https://redirect.github.com/tsioftas ) made their
first contribution in
[#​1681](https://redirect.github.com/stretchr/testify/pull/1681 )
- [@​siliconbrain](https://redirect.github.com/siliconbrain ) made
their first contribution in
[#​1729](https://redirect.github.com/stretchr/testify/pull/1729 )
- [@​bartventer](https://redirect.github.com/bartventer ) made
their first contribution in
[#​1730](https://redirect.github.com/stretchr/testify/pull/1730 )
- [@​Ararsa-Derese](https://redirect.github.com/Ararsa-Derese )
made their first contribution in
[#​1706](https://redirect.github.com/stretchr/testify/pull/1706 )
- [@​renzoarreaza](https://redirect.github.com/renzoarreaza ) made
their first contribution in
[#​1769](https://redirect.github.com/stretchr/testify/pull/1769 )
- [@​3scalation](https://redirect.github.com/3scalation ) made
their first contribution in
[#​1743](https://redirect.github.com/stretchr/testify/pull/1743 )
**Full Changelog**:
<https://github.com/stretchr/testify/compare/v1.10.0...v1.11.0 >
</details>
---
### Configuration
📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about these
updates again.
---
- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box
---
This PR was generated by [Mend Renovate](https://mend.io/renovate/ ).
View the [repository job
log](https://developer.mend.io/github/open-telemetry/opentelemetry-go ).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MS44Mi43IiwidXBkYXRlZEluVmVyIjoiNDEuODIuNyIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiU2tpcCBDaGFuZ2Vsb2ciLCJkZXBlbmRlbmNpZXMiXX0=-->
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: flc1125 <four_leaf_clover@foxmail.com >
2025-08-25 14:38:44 +02:00
ian
9818ea8b0d
refactor(logger): Flatten logger.initSelfObservability into logger.newLoggerr and use t.Cleanup instead of defer ( #7228 )
...
- Flatten `logger.initSelfObservability` into `logger.newLoggerr`
- use `t.Cleanup` instead of `defer`
---------
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com >
2025-08-24 12:28:55 -07:00
Bryan Boreham
8b17b897d2
sdk/trace: More trace id tests ( #7155 )
...
* Check that IDs round-trip between binary and hex string formats.
`TestIDsRoundTrip` is patterned after `TestNewIDs`.
* Check that bad values give the expected errors.
* Use larger values in `TestWithIDGenerator`. Previously, nearly all the
bits were zero so a mistake in encoding/decoding higher bits could be
missed.
Start with arbitrary values with more bits set.
(Span ID still has top half as zero due to taking an uint64)
* Modify `testIDGenerator` so this ^^ change runs on 32-bit platforms.
The idea for more tests arose while considering #6791 .
Does not need a CHANGELOG entry - test only.
---------
Signed-off-by: Bryan Boreham <bjboreham@gmail.com >
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com >
2025-08-21 09:23:32 -07:00
Tyler Yahn
bb5b0a8e61
Use t.Cleanup instead of defer in sdk/trace ( #7208 )
...
Let the testing system ensure proper cleanup ordering and execution. Do
not wait to function return to run all the `defer`s from the loops.
2025-08-18 12:42:16 +02:00
Tyler Yahn
bb8d6f74b0
Fix callbackAttributesOpt variable name ( #7210 )
2025-08-18 11:46:16 +02:00
Tyler Yahn
e39a02f568
Fix minor grammatical error in sdk/trace/internal/x README.md ( #7211 )
2025-08-18 10:44:47 +02:00
Tyler Yahn
150f6b4dbc
Flatten tracer.initSelfObservability into TracerProvider.Tracer ( #7205 )
...
- Do not use [side-effect
programming](https://en.wikipedia.org/wiki/Side_effect_(computer_science) )
to setup a `tracer`. Make the setup explicit, unique, and local.
- Add the `newInst` function to ensure DRY and scope instrument creation
2025-08-18 10:37:38 +02:00
Tyler Yahn
9488493043
sdk/trace: do not defer if not self-observing ( #7206 )
...
Allow branch prediction to help avoid tail function call instead of the
other way around.
2025-08-18 10:25:36 +02:00
Yevhenii Solomchenko
6d45339855
sdk/metric: package example includes Cardinality Limits ( #7165 )
...
Part of #6979
Towards #6887
## What
- Examples demonstrate how to configure and use the feature.
2025-08-12 09:38:55 +02:00
Yevhenii Solomchenko
5a046207d2
sdk/metric: Deprecate the sdk/metric/x Feature Supporting Cardinality Limits ( #7166 )
...
Fixes #6980
Towards #6887
## What
- Any references to sdk/metric/x in documentation, tests, or examples
are updated to redirect users to use the cardinality limit feature in
the SDK.
---------
Co-authored-by: Robert Pająk <pellared@hotmail.com >
2025-08-12 09:29:54 +02:00
Yevhenii Solomchenko
97343af813
sdk/metric: Add Unit Tests for Cardinality Limits ( #7164 )
...
Fixes https://github.com/open-telemetry/opentelemetry-go/issues/6978
Towards https://github.com/open-telemetry/opentelemetry-go/issues/6887
## What
- Unit tests cover all scenarios for cardinality limits.
- Tests validate configuration, enforcement, and default behavior.
## Notes
I've added more user-oriented usage tests. The targeted unit tests
already exist in the
`sdk/metric/internal/aggregate/_test` files.
---------
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com >
Co-authored-by: Robert Pająk <pellared@hotmail.com >
2025-08-12 09:22:43 +02:00
David Ashpole
fcc3417677
sdk/trace: self-observability: batch span processor metrics ( #6393 )
...
Fixes https://github.com/open-telemetry/opentelemetry-go/issues/7005
Adds `otel.sdk.processor.span.queue.size`,
`otel.sdk.processor.span.queue.capacity`, and
`otel.sdk.processor.span.processed.count` metrics to the trace batch
span processor.
These are defined in
https://github.com/open-telemetry/semantic-conventions/blob/cb11bb9bac24f4b0e95ad0f61ce01813d8ceada8/docs/otel/sdk-metrics.md ,
and are experimental. Because of this, metrics are behind the
OTEL_GO_X_SELF_OBSERVABILITY feature gate.
Given the feature is experimental, it always uses the global
meterprovider when enabled.
---------
Co-authored-by: Robert Pająk <pellared@hotmail.com >
2025-08-11 16:15:00 -04:00
Robert Pająk
1938d30a2c
sdk/log: Add EventNameProcessor example ( #7128 )
...
Per
https://cloud-native.slack.com/archives/C01NPAXACKT/p1754314627390359
Also it was on my mind for a few months
---------
Co-authored-by: Cijo Thomas <cithomas@microsoft.com >
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com >
2025-08-11 16:56:14 +02:00
Matthieu MOREL
68841fa6db
chore: enable unused-receiver rule from revive ( #7130 )
...
#### Description
Enable and fixes
[unused-receiver](https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#unused-receiver )
rule from revive
Signed-off-by: Matthieu MOREL <matthieu.morel35@gmail.com >
2025-08-08 15:38:22 -07:00
Matthieu MOREL
6d3e127cae
chore: enable ptrToRefParam from go-critic ( #7131 )
...
#### Description
Enable and fixes
[ptrToRefParam](https://go-critic.com/overview.html#ptrtorefparam ) rule
from go-critic
Signed-off-by: Matthieu MOREL <matthieu.morel35@gmail.com >
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com >
2025-08-07 11:52:16 -07:00
renovate[bot]
05bc453d3f
fix(deps): update golang.org/x ( #7138 )
2025-08-07 16:43:09 +02:00
Mahendra Bishnoi
ffa3b4af64
sdk/log: self-observability: log created metric ( #7121 )
...
Fixes https://github.com/open-telemetry/opentelemetry-go/issues/7015
Adds experimental `otel.sdk.log.created` metric to logger. Since this is
experimental, metric is behind the OTEL_GO_X_SELF_OBSERVABILITY feature
gate.
Metric defined in
https://github.com/open-telemetry/semantic-conventions/blob/v1.36.0/docs/otel/sdk-metrics.md .
Given the feature is experimental, it always uses the global
meterprovider when enabled.
2025-08-07 10:14:13 +02:00
David Ashpole
b7610a72a7
Testing: Run sync measure benchmarks in parallel ( #7113 )
...
I am looking into
https://promlabs.com/blog/2025/07/17/why-i-recommend-native-prometheus-instrumentation-over-opentelemetry/#comparing-counter-increment-performance ,
which seems to suggest the OTel metrics SDK performs poorly when a
counter is incremented concurrently. It is potentially a bit of an
artificial benchmark, but does suggest there is some contention beyond
just the fact that they are incrementing an atomic integer...
Original benchmarks from the blog post:
https://github.com/promlabs/prometheus-otel-benchmarks/blob/main/otel_test.go
```
$ go test -run=xxxxxMatchNothingxxxxx -cpu=24 -test.benchtime=1s -bench=BenchmarkSyncMeasure/NoView/
goos: linux
goarch: amd64
pkg: go.opentelemetry.io/otel/sdk/metric
cpu: Intel(R) Xeon(R) CPU @ 2.20GHz
BenchmarkSyncMeasure/NoView/Int64Counter/Attributes/0-24 3946789 313.2 ns/op
BenchmarkSyncMeasure/NoView/Int64Counter/Attributes/1-24 3420992 374.4 ns/op
BenchmarkSyncMeasure/NoView/Int64Counter/Attributes/10-24 574608 1745 ns/op
BenchmarkSyncMeasure/NoView/Float64Counter/Attributes/0-24 3996166 281.1 ns/op
BenchmarkSyncMeasure/NoView/Float64Counter/Attributes/1-24 3091573 367.1 ns/op
BenchmarkSyncMeasure/NoView/Float64Counter/Attributes/10-24 705693 1660 ns/op
BenchmarkSyncMeasure/NoView/Int64UpDownCounter/Attributes/0-24 4098727 296.4 ns/op
BenchmarkSyncMeasure/NoView/Int64UpDownCounter/Attributes/1-24 3029276 355.4 ns/op
BenchmarkSyncMeasure/NoView/Int64UpDownCounter/Attributes/10-24 605174 1803 ns/op
BenchmarkSyncMeasure/NoView/Float64UpDownCounter/Attributes/0-24 4057765 298.6 ns/op
BenchmarkSyncMeasure/NoView/Float64UpDownCounter/Attributes/1-24 3384812 366.9 ns/op
BenchmarkSyncMeasure/NoView/Float64UpDownCounter/Attributes/10-24 714900 1742 ns/op
BenchmarkSyncMeasure/NoView/Int64Histogram/Attributes/0-24 3274644 364.3 ns/op
BenchmarkSyncMeasure/NoView/Int64Histogram/Attributes/1-24 3780115 316.1 ns/op
BenchmarkSyncMeasure/NoView/Int64Histogram/Attributes/10-24 1294364 993.5 ns/op
BenchmarkSyncMeasure/NoView/Float64Histogram/Attributes/0-24 3543817 343.2 ns/op
BenchmarkSyncMeasure/NoView/Float64Histogram/Attributes/1-24 3523102 335.8 ns/op
BenchmarkSyncMeasure/NoView/Float64Histogram/Attributes/10-24 1329352 956.3 ns/op
PASS
ok go.opentelemetry.io/otel/sdk/metric 27.504s
```
```
$ go test -run=xxxxxMatchNothingxxxxx -cpu=1 -test.benchtime=1s -bench=BenchmarkSyncMeasure/NoView/
goos: linux
goarch: amd64
pkg: go.opentelemetry.io/otel/sdk/metric
cpu: Intel(R) Xeon(R) CPU @ 2.20GHz
BenchmarkSyncMeasure/NoView/Int64Counter/Attributes/0 9905773 121.3 ns/op
BenchmarkSyncMeasure/NoView/Int64Counter/Attributes/1 4079145 296.5 ns/op
BenchmarkSyncMeasure/NoView/Int64Counter/Attributes/10 781627 1531 ns/op
BenchmarkSyncMeasure/NoView/Float64Counter/Attributes/0 10017988 120.2 ns/op
BenchmarkSyncMeasure/NoView/Float64Counter/Attributes/1 4055418 296.4 ns/op
BenchmarkSyncMeasure/NoView/Float64Counter/Attributes/10 761139 1540 ns/op
BenchmarkSyncMeasure/NoView/Int64UpDownCounter/Attributes/0 10017126 121.1 ns/op
BenchmarkSyncMeasure/NoView/Int64UpDownCounter/Attributes/1 4037232 295.3 ns/op
BenchmarkSyncMeasure/NoView/Int64UpDownCounter/Attributes/10 757010 1539 ns/op
BenchmarkSyncMeasure/NoView/Float64UpDownCounter/Attributes/0 10122925 119.0 ns/op
BenchmarkSyncMeasure/NoView/Float64UpDownCounter/Attributes/1 4070942 293.8 ns/op
BenchmarkSyncMeasure/NoView/Float64UpDownCounter/Attributes/10 788176 1542 ns/op
BenchmarkSyncMeasure/NoView/Int64Histogram/Attributes/0 10794142 110.8 ns/op
BenchmarkSyncMeasure/NoView/Int64Histogram/Attributes/1 5929494 201.0 ns/op
BenchmarkSyncMeasure/NoView/Int64Histogram/Attributes/10 1449292 825.4 ns/op
BenchmarkSyncMeasure/NoView/Float64Histogram/Attributes/0 10875385 110.1 ns/op
BenchmarkSyncMeasure/NoView/Float64Histogram/Attributes/1 5903116 202.4 ns/op
BenchmarkSyncMeasure/NoView/Float64Histogram/Attributes/10 1459578 827.4 ns/op
PASS
ok go.opentelemetry.io/otel/sdk/metric 25.688s
```
Results are significantly worse (almost > 2x in some cases) with
parallelism, but don't initially seem as bad as the blog post suggests.
I only have 24 cores, so I can't test higher numbers.
Do we want to have parallel benchmarks in addition to our current
non-parallel ones?
2025-08-06 08:50:18 -04:00
Matthieu MOREL
d464abf1f3
chore: enable unused-parameter rule from revive ( #7122 )
...
#### Description
Enable and fixes
[unused-parameter](https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#unused-parameter )
rule from revive
Signed-off-by: Matthieu MOREL <matthieu.morel35@gmail.com >
2025-08-04 12:48:04 -07:00
Yevhenii Solomchenko
d5b5b05984
sdk/metric: Apply Cardinality Limits to Aggregations ( #7081 )
...
Fixes https://github.com/open-telemetry/opentelemetry-go/issues/6977
Towards https://github.com/open-telemetry/opentelemetry-go/issues/6887
## What
- Cardinality limits are enforced during aggregation.
- Exceeding the limit results in dropping excess data or other specified
behavior.
- Performance benchmarks confirm no significant degradation due to the
limit enforcement.
## Notes
Tests will be added in a separate PR, as mentioned in
https://github.com/open-telemetry/opentelemetry-go/issues/6978
---------
Co-authored-by: Damien Mathieu <42@dmathieu.com >
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com >
2025-08-04 09:13:21 -07:00
Matthieu MOREL
1bae8f7347
chore: enable extra-rules from gofumpt ( #7114 )
...
#### Description
Enable extra rules from
[gofumpt](https://golangci-lint.run/usage/formatters/#gofumpt ) that also
fixes paramTypeCombine from go-critic
Also defines `go.opentelemetry.io/otel` as in
https://github.com/open-telemetry/opentelemetry-go-contrib/pull/7637
Signed-off-by: Matthieu MOREL <matthieu.morel35@gmail.com >
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com >
2025-08-03 08:24:33 -07:00
Robert Pająk
30a00f2103
Fix names in experimental readmes ( #7106 )
2025-07-30 15:51:06 +02:00
Matthieu MOREL
982391315f
chore: enable gocritic linter ( #7095 )
...
#### Description
Enable and fixes several rules from
[gocritic](https://golangci-lint.run/usage/linters/#gocritic ) linter
---------
Signed-off-by: Matthieu MOREL <matthieu.morel35@gmail.com >
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com >
2025-07-29 09:20:32 -07:00
Lev Zakharov
9bf6470d8e
sdk/metric: use runtime.GOMAXPROCS(0) instead of runtime.NumCPU() in DefaultExemplarReservoirProviderSelector for the FixedSizeReservoirProvider default size ( #7094 )
...
This PR changes `DefaultExemplarReservoirProviderSelector` in
`go.opentelemetry.io/otel/sdk/metric` to use `runtime.GOMAXPROCS(0)`
instead of `runtime.NumCPU()` for the `FixedSizeReservoirProvider`
default size.
**Motivation**
The [runtime.NumCPU](https://pkg.go.dev/runtime#NumCPU ) returns the
number of logical CPUs usable by the current process. In Kubernetes, the
method will return the total number of cores on the node, not the actual
number of cores available to the container. Since it is common practice
to allocate only a small fraction of the total CPU on a node to a
container, the current implementation may result in an excessive
`FixedSizeReservoir` size, which in turn negatively impacts the
resources consumed.
---------
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com >
Co-authored-by: Tyler Yahn <codingalias@gmail.com >
2025-07-29 08:13:21 -07:00
Mikhail Mazurskiy
5e1c62a2d5
Modernize ( #7089 )
...
Use
https://pkg.go.dev/golang.org/x/tools/gopls/internal/analysis/modernize
to update code to new style.
---------
Co-authored-by: Flc゛ <four_leaf_clover@foxmail.com >
Co-authored-by: Damien Mathieu <42@dmathieu.com >
2025-07-29 10:19:11 +02:00
Robert Pająk
1737ab8666
docs: unify doc comments for functions returning bool ( #7064 )
...
Fixes https://github.com/open-telemetry/opentelemetry-go/issues/7063
If also fixes Go Doc comment for `SpanID.IsEmpty`.
The pattern is based on the way the Go standard library documents
functions returning a boolean.
2025-07-23 07:58:50 +02:00
Robert Pająk
50868ef62e
sdk/metric: do not document default cardinality limit ( #7065 )
...
Per
https://github.com/open-telemetry/opentelemetry-go/issues/7035#issuecomment-3102047364
2025-07-23 07:48:41 +02:00
Robert Pająk
186def7c56
sdk/trace: self-observability: span metrics ( #7027 )
...
Fixes https://github.com/open-telemetry/opentelemetry-go/issues/7003
Implement following self-observability metrics from
https://github.com/open-telemetry/semantic-conventions/blob/v1.36.0/docs/otel/sdk-metrics.md
for https://pkg.go.dev/go.opentelemetry.io/otel/sdk/trace :
- `otel.sdk.span.live`
- `otel.sdk.span.started`
2025-07-22 11:36:06 +02:00
Yevhenii Solomchenko
c23a0667de
sdk/metric: Add WithCardinalityLimit option ( #6996 )
...
Fixes #6976
Towards #6887
## What
- A new configuration field for cardinality limits is added to the SDK.
- Users can set cardinality limits via code
- Default value of 0(no limit) is applied if no value is provided.
- Unit tests validate the configuration behavior.
## Additional
- Issue created regarding the missing environment variable for the
cardinality limit:
[opentelemetry-specification#4586](https://github.com/open-telemetry/opentelemetry-specification/issues/4586 )
---------
Co-authored-by: Robert Pająk <pellared@hotmail.com >
Co-authored-by: Damien Mathieu <42@dmathieu.com >
Co-authored-by: Cijo Thomas <cithomas@microsoft.com >
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com >
2025-07-21 10:45:48 +02:00
Robert Pająk
a6782b9ca9
sdk/trace: remove unused version function ( #7036 )
...
The unexported `version()` function in `sdk/trace` is not used anywhere.
Not mentioning that the value it is returning is wrong.
There is already a `Version` function in `sdk` (which is in the same Go
module).
2025-07-16 20:24:48 +02:00
Joe Stephenson
5da6cd28a8
sdk/log: Add WithAllowKeyDuplication logger provider option ( #6968 )
...
Closes #5133
This couldn't be added as an option on a processor, as that would
involve moving all the attribute deduplication. logic outside of the
record type. Instead this PR provides the same functionality but it is
set when creating the log provider
The below benchstat report shows the performance improvement when
`allowDupKeys` is set
```
goos: darwin
goarch: arm64
pkg: go.opentelemetry.io/otel/sdk/log
cpu: Apple M2 Pro
│ withoutDedup.txt │ withDedup.txt │
│ sec/op │ sec/op vs base │
SetAddAttributes/SetAttributes-12 141.3n ± 2% 167.4n ± 5% +18.51% (p=0.000 n=10)
SetAddAttributes/AddAttributes-12 117.5n ± 2% 124.8n ± 5% +6.17% (p=0.000 n=10)
geomean 128.9n 144.5n +12.17%
│ withoutDedup.txt │ withDedup.txt │
│ B/op │ B/op vs base │
SetAddAttributes/SetAttributes-12 48.00 ± 0% 48.00 ± 0% ~ (p=1.000 n=10) ¹
SetAddAttributes/AddAttributes-12 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹
geomean ² +0.00% ²
¹ all samples are equal
² summaries must be >0 to compute geomean
│ withoutDedup.txt │ withDedup.txt │
│ allocs/op │ allocs/op vs base │
SetAddAttributes/SetAttributes-12 1.000 ± 0% 1.000 ± 0% ~ (p=1.000 n=10) ¹
SetAddAttributes/AddAttributes-12 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹
geomean ² +0.00% ²
¹ all samples are equal
² summaries must be >0 to compute geomean
```
2025-07-11 09:54:13 +02:00
renovate[bot]
73b2cd39b0
fix(deps): update golang.org/x ( #6989 )
...
This PR contains the following updates:
| Package | Change | Age | Confidence |
|---|---|---|---|
| golang.org/x/mod | `v0.25.0` -> `v0.26.0` |
[](https://docs.renovatebot.com/merge-confidence/ )
|
[](https://docs.renovatebot.com/merge-confidence/ )
|
| golang.org/x/sync | `v0.15.0` -> `v0.16.0` |
[](https://docs.renovatebot.com/merge-confidence/ )
|
[](https://docs.renovatebot.com/merge-confidence/ )
|
| golang.org/x/sys | `v0.33.0` -> `v0.34.0` |
[](https://docs.renovatebot.com/merge-confidence/ )
|
[](https://docs.renovatebot.com/merge-confidence/ )
|
| golang.org/x/text | `v0.26.0` -> `v0.27.0` |
[](https://docs.renovatebot.com/merge-confidence/ )
|
[](https://docs.renovatebot.com/merge-confidence/ )
|
---
> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.
---
### Configuration
📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.
👻 **Immortal**: This PR will be recreated if closed unmerged. Get
[config
help](https://redirect.github.com/renovatebot/renovate/discussions ) if
that's undesired.
---
- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box
---
This PR was generated by [Mend Renovate](https://mend.io/renovate/ ).
View the [repository job
log](https://developer.mend.io/github/open-telemetry/opentelemetry-go ).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MS4yMy4yIiwidXBkYXRlZEluVmVyIjoiNDEuMjMuMiIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiU2tpcCBDaGFuZ2Vsb2ciLCJkZXBlbmRlbmNpZXMiXX0=-->
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-09 15:32:07 -07:00
Corentin
86640ceae0
Clarify DefaultMaxQueueSize and DefaultScheduleDelay usage ( #6974 )
...
### Description
OpenTelemetry uses `DefaultScheduleDelay` and `DefaultExportTimeout`
values as milliseconds but Go time package will understand them as
nanoseconds.
I understand that this is a stable library and that those value will
probably never change, so can we at least clarify their usage?
Right above the defaults declaration it says `// Defaults for
BatchSpanProcessorOptions.` which is confusing.
We used `trace.DefaultScheduleDelay` as a fallback value for our tracing
setup.
This confusion led to high CPU usage due to the frequent batch exports.
### Confusing behavior
```go
processor := trace.NewBatchSpanProcessor(exporter,
// set timeout to 5000 ns instead of the expected 5000 ms
trace.WithBatchTimeout(trace.DefaultScheduleDelay),
// set timeout to 30000 ns instead of the expected 30000 ms
trace.WithExportTimeout(trace.DefaultExportTimeout),
)
```
### Correct way to use those values
```go
processor := trace.NewBatchSpanProcessor(exporter,
trace.WithBatchTimeout(trace.DefaultScheduleDelay * time.Millisecond),
trace.WithExportTimeout(trace.DefaultExportTimeout * time.Millisecond),
)
```
---------
Co-authored-by: Damien Mathieu <42@dmathieu.com >
Co-authored-by: Robert Pająk <pellared@hotmail.com >
2025-07-09 11:18:17 +02:00
Sebastiaan van Stijn
78f873f083
sdk/trace: ReadOnlySpan.InstrumentationLibrary: fix deprecation comment ( #6960 )
...
Commit 575e1bb270 deprecated the Library
type in favor of Scope, but did not add an empty line before the
deprecation comment. Go's formatting rules require an empty line;
omitting the empty line can cause some tools to not detect the
deprecation.
Signed-off-by: Sebastiaan van Stijn <github@gone.nl >
Co-authored-by: Robert Pająk <pellared@hotmail.com >
2025-07-03 14:48:26 +02:00
Robert Pająk
69e81088ad
Release 1.37.0/0.59.0/0.13.0 ( #6925 )
...
### Added
- The `go.opentelemetry.io/otel/semconv/v1.33.0` package.
The package contains semantic conventions from the `v1.33.0` version of
the OpenTelemetry Semantic Conventions.
See the [migration documentation](./semconv/v1.33.0/MIGRATION.md) for
information on how to upgrade from
`go.opentelemetry.io/otel/semconv/v1.32.0.`(#6799 )
- The `go.opentelemetry.io/otel/semconv/v1.34.0` package.
The package contains semantic conventions from the `v1.34.0` version of
the OpenTelemetry Semantic Conventions. (#6812 )
- Add metric's schema URL as `otel_scope_schema_url` label in
`go.opentelemetry.io/otel/exporters/prometheus`. (#5947 )
- Add metric's scope attributes as `otel_scope_[attribute]` labels in
`go.opentelemetry.io/otel/exporters/prometheus`. (#5947 )
- Add `EventName` to `EnabledParameters` in
`go.opentelemetry.io/otel/log`. (#6825 )
- Add `EventName` to `EnabledParameters` in
`go.opentelemetry.io/otel/sdk/log`. (#6825 )
- Changed handling of `go.opentelemetry.io/otel/exporters/prometheus`
metric renaming to add unit suffixes when it doesn't match one of the
pre-defined values in the unit suffix map. (#6839 )
### Changed
- The semantic conventions have been upgraded from `v1.26.0` to
`v1.34.0` in `go.opentelemetry.io/otel/bridge/opentracing`. (#6827 )
- The semantic conventions have been upgraded from `v1.26.0` to
`v1.34.0` in `go.opentelemetry.io/otel/exporters/zipkin`. (#6829 )
- The semantic conventions have been upgraded from `v1.26.0` to
`v1.34.0` in `go.opentelemetry.io/otel/metric`. (#6832 )
- The semantic conventions have been upgraded from `v1.26.0` to
`v1.34.0` in `go.opentelemetry.io/otel/sdk/resource`. (#6834 )
- The semantic conventions have been upgraded from `v1.26.0` to
`v1.34.0` in `go.opentelemetry.io/otel/sdk/trace`. (#6835 )
- The semantic conventions have been upgraded from `v1.26.0` to
`v1.34.0` in `go.opentelemetry.io/otel/trace`. (#6836 )
- `Record.Resource` now returns `*resource.Resource` instead of
`resource.Resource` in `go.opentelemetry.io/otel/sdk/log`. (#6864 )
- Retry now shows error cause for context timeout in
`go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc`,
`go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc`,
`go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc`,
`go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp`,
`go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp`,
`go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp`. (#6898 )
### Fixed
- Stop stripping trailing slashes from configured endpoint URL in
`go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc`.
(#6710 )
- Stop stripping trailing slashes from configured endpoint URL in
`go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp`.
(#6710 )
- Stop stripping trailing slashes from configured endpoint URL in
`go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc`.
(#6710 )
- Stop stripping trailing slashes from configured endpoint URL in
`go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp`.
(#6710 )
- Validate exponential histogram scale range for Prometheus
compatibility in `go.opentelemetry.io/otel/exporters/prometheus`.
(#6822 )
- Context cancellation during metric pipeline produce does not corrupt
data in `go.opentelemetry.io/otel/sdk/metric`. (#6914 )
### Removed
- `go.opentelemetry.io/otel/exporters/prometheus` no longer exports
`otel_scope_info` metric. (#6770 )
2025-06-25 08:41:12 +02:00
Damien Mathieu
351a51f1ed
Use existing schema URLs in tests ( #6924 )
...
The 1.2.0 schema URL isn't avaibable (anymore?). So link checks are
failing.
This upgrades the schema URLs to 1.21.0.
See
https://cloud-native.slack.com/archives/C02UN96HZH6/p1750664367346769
---------
Co-authored-by: Robert Pająk <pellared@hotmail.com >
2025-06-24 09:02:21 +02:00
Alec Holmes
2da77b1195
Ensure context cancellation during metric pipeline produce does not corrupt data ( #6914 )
...
This fixes issue #6344 , in which an attempted clean shutdown of the
metrics SDK using PeriodicReader's Shutdown method can produce and emit
wildly incorrect data point values that are orders of magnitude too
large.
The root of the issue is that the pipeline produce method changed in
this PR cannot safely return early, which was happening in the callback
loops that were checking for context cancellation. Early return is not
safe since callbacks and aggregations are tightly coupled in practice:
invoking callbacks without also invoking aggregations corrupts internal
data point value accounting.
The linked issue more concretely walks through the sequence of steps
that were causing this issue.
---------
Co-authored-by: Damien Mathieu <42@dmathieu.com >
2025-06-20 09:46:30 +02:00
Joe Stephenson
94ab03f569
Remove internal matchers ( #6907 )
...
Modifies the only remaining use of the internal matchers to use
`require` and closes #6541
2025-06-17 16:49:22 +02:00
Sam Xie
a4055c21bc
Use the cause of the context error in OTLP retry ( #6898 )
...
Part of #6588
For a demo code like this
```go
package main
import (
"context"
"fmt"
"log"
"time"
"go.opentelemetry.io/otel"
"go.opentelemetry.io/otel/exporters/otlp/otlptrace"
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"
sdktrace "go.opentelemetry.io/otel/sdk/trace"
)
func main() {
ctx := context.Background()
exp, err := newExporter(ctx)
if err != nil {
log.Fatalf("failed to initialize trace exporter: %v", err)
}
tp, err := newTracerProvider(exp)
if err != nil {
log.Fatalf("failed to initialize trace provider: %v", err)
}
defer func() { _ = tp.Shutdown(ctx) }()
otel.SetTracerProvider(tp)
generateSpan()
select {}
}
func generateSpan() {
log.Println("Generating a dummy span")
_, span := otel.Tracer("").Start(context.Background(), "dummy")
defer span.End()
}
func newTracerProvider(exp sdktrace.SpanExporter) (*sdktrace.TracerProvider, error) {
return sdktrace.NewTracerProvider(
sdktrace.WithBatcher(exp),
), nil
}
func newExporter(ctx context.Context) (*otlptrace.Exporter, error) {
traceExporter, err := otlptrace.New(
ctx,
otlptracegrpc.NewClient(
otlptracegrpc.WithEndpoint("127.0.0.1:4317"),
otlptracegrpc.WithInsecure(),
otlptracegrpc.WithRetry(otlptracegrpc.RetryConfig{
Enabled: true,
InitialInterval: 1 * time.Second,
MaxInterval: 30 * time.Second,
MaxElapsedTime: time.Minute,
}),
),
)
if err != nil {
return nil, fmt.Errorf("failed to create trace exporter: %w", err)
}
return traceExporter, nil
}
```
the error result from
```
traces export: context deadline exceeded: rpc error: code = Unavailable desc = connection error: desc = "transport: Error while dialing: dial tcp 127.0.0.1:4317: connect: connection refused"
```
become
```
traces export: exporter export timeout: rpc error: code = Unavailable desc = connection error: desc = "transport: Error while dialing: dial tcp 127.0.0.1:4317: connect: connection refused"
```
2025-06-12 19:02:35 +02:00
Robert Pająk
a99f9b56ce
sdk/log: Record.Resource to return *resource.Resource ( #6864 )
...
Fixes https://github.com/open-telemetry/opentelemetry-go/issues/6863
From https://pkg.go.dev/go.opentelemetry.io/otel/sdk/resource#Resource :
> Resource is an immutable object
> [...]
> Resources should be passed and stored as pointers
(`*resource.Resource`)
In all other places the exported API uses `*resource.Resource` and not
`resource.Resource`.
2025-06-04 07:05:17 +02:00
Joe Stephenson
dc210e99a4
sdk/trace: Remove internaltest package ( #6846 )
...
Closes #6540
Closes #6535
2025-05-30 09:00:23 +02:00
Tyler Yahn
33eb582188
Upgrade semconv to 1.34.0 in sdk/trace ( #6835 )
2025-05-28 11:10:10 -07:00