1
0
mirror of https://github.com/open-telemetry/opentelemetry-go.git synced 2026-06-19 21:45:50 +02:00

1264 Commits

Author SHA1 Message Date
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` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fstretchr%2ftestify/v1.11.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fstretchr%2ftestify/v1.11.0/v1.11.1?slim=true)](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
[#&#8203;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
[#&#8203;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
[@&#8203;brackendawson](https://redirect.github.com/brackendawson) in
[#&#8203;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` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fstretchr%2ftestify/v1.11.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fstretchr%2ftestify/v1.10.0/v1.11.0?slim=true)](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
[@&#8203;mikeauclair](https://redirect.github.com/mikeauclair) in
[#&#8203;1614](https://redirect.github.com/stretchr/testify/pull/1614)
- Lazily render mock diff output on successful match by
[@&#8203;mikeauclair](https://redirect.github.com/mikeauclair) in
[#&#8203;1615](https://redirect.github.com/stretchr/testify/pull/1615)
- assert: check early in Eventually, EventuallyWithT, and Never by
[@&#8203;cszczepaniak](https://redirect.github.com/cszczepaniak) in
[#&#8203;1427](https://redirect.github.com/stretchr/testify/pull/1427)
- assert: add IsNotType by
[@&#8203;bartventer](https://redirect.github.com/bartventer) in
[#&#8203;1730](https://redirect.github.com/stretchr/testify/pull/1730)
- assert.JSONEq: shortcut if same strings by
[@&#8203;dolmen](https://redirect.github.com/dolmen) in
[#&#8203;1754](https://redirect.github.com/stretchr/testify/pull/1754)
- assert.YAMLEq: shortcut if same strings by
[@&#8203;dolmen](https://redirect.github.com/dolmen) in
[#&#8203;1755](https://redirect.github.com/stretchr/testify/pull/1755)
- assert: faster and simpler isEmpty using reflect.Value.IsZero by
[@&#8203;dolmen](https://redirect.github.com/dolmen) in
[#&#8203;1761](https://redirect.github.com/stretchr/testify/pull/1761)
- suite: faster methods filtering (internal refactor) by
[@&#8203;dolmen](https://redirect.github.com/dolmen) in
[#&#8203;1758](https://redirect.github.com/stretchr/testify/pull/1758)

##### Fixes

- assert.ErrorAs: log target type by
[@&#8203;craig65535](https://redirect.github.com/craig65535) in
[#&#8203;1345](https://redirect.github.com/stretchr/testify/pull/1345)
- Fix failure message formatting for Positive and Negative asserts in
[#&#8203;1062](https://redirect.github.com/stretchr/testify/pull/1062)
- Improve ErrorIs message when error is nil but an error was expected by
[@&#8203;tsioftas](https://redirect.github.com/tsioftas) in
[#&#8203;1681](https://redirect.github.com/stretchr/testify/pull/1681)
- fix Subset/NotSubset when calling with mixed input types by
[@&#8203;siliconbrain](https://redirect.github.com/siliconbrain) in
[#&#8203;1729](https://redirect.github.com/stretchr/testify/pull/1729)
- Improve ErrorAs failure message when error is nil by
[@&#8203;ccoVeille](https://redirect.github.com/ccoVeille) in
[#&#8203;1734](https://redirect.github.com/stretchr/testify/pull/1734)
- mock.AssertNumberOfCalls: improve error msg by
[@&#8203;3scalation](https://redirect.github.com/3scalation) in
[#&#8203;1743](https://redirect.github.com/stretchr/testify/pull/1743)

##### Documentation, Build & CI

- docs: Fix typo in README by
[@&#8203;alexandear](https://redirect.github.com/alexandear) in
[#&#8203;1688](https://redirect.github.com/stretchr/testify/pull/1688)
- Replace deprecated io/ioutil with io and os by
[@&#8203;alexandear](https://redirect.github.com/alexandear) in
[#&#8203;1684](https://redirect.github.com/stretchr/testify/pull/1684)
- Document consequences of calling t.FailNow() by
[@&#8203;greg0ire](https://redirect.github.com/greg0ire) in
[#&#8203;1710](https://redirect.github.com/stretchr/testify/pull/1710)
- chore: update docs for Unset
[#&#8203;1621](https://redirect.github.com/stretchr/testify/issues/1621)
by [@&#8203;techfg](https://redirect.github.com/techfg) in
[#&#8203;1709](https://redirect.github.com/stretchr/testify/pull/1709)
- README: apply gofmt to examples by
[@&#8203;alexandear](https://redirect.github.com/alexandear) in
[#&#8203;1687](https://redirect.github.com/stretchr/testify/pull/1687)
- refactor: use %q and %T to simplify fmt.Sprintf by
[@&#8203;alexandear](https://redirect.github.com/alexandear) in
[#&#8203;1674](https://redirect.github.com/stretchr/testify/pull/1674)
- Propose Christophe Colombier (ccoVeille) as approver by
[@&#8203;brackendawson](https://redirect.github.com/brackendawson) in
[#&#8203;1716](https://redirect.github.com/stretchr/testify/pull/1716)
- Update documentation for the Error function in assert or require
package by [@&#8203;architagr](https://redirect.github.com/architagr) in
[#&#8203;1675](https://redirect.github.com/stretchr/testify/pull/1675)
- assert: remove deprecated build constraints by
[@&#8203;alexandear](https://redirect.github.com/alexandear) in
[#&#8203;1671](https://redirect.github.com/stretchr/testify/pull/1671)
- assert: apply gofumpt to internal test suite by
[@&#8203;ccoVeille](https://redirect.github.com/ccoVeille) in
[#&#8203;1739](https://redirect.github.com/stretchr/testify/pull/1739)
- CI: fix shebang in .ci.\*.sh scripts by
[@&#8203;dolmen](https://redirect.github.com/dolmen) in
[#&#8203;1746](https://redirect.github.com/stretchr/testify/pull/1746)
- assert,require: enable parallel testing on (almost) all top tests by
[@&#8203;dolmen](https://redirect.github.com/dolmen) in
[#&#8203;1747](https://redirect.github.com/stretchr/testify/pull/1747)
- suite.Passed: add one more status test report by
[@&#8203;Ararsa-Derese](https://redirect.github.com/Ararsa-Derese) in
[#&#8203;1706](https://redirect.github.com/stretchr/testify/pull/1706)
- Add Helper() method in internal mocks and assert.CollectT by
[@&#8203;dolmen](https://redirect.github.com/dolmen) in
[#&#8203;1423](https://redirect.github.com/stretchr/testify/pull/1423)
- assert.Same/NotSame: improve usage of Sprintf by
[@&#8203;ccoVeille](https://redirect.github.com/ccoVeille) in
[#&#8203;1742](https://redirect.github.com/stretchr/testify/pull/1742)
- mock: enable parallel testing on internal testsuite by
[@&#8203;dolmen](https://redirect.github.com/dolmen) in
[#&#8203;1756](https://redirect.github.com/stretchr/testify/pull/1756)
- suite: cleanup use of 'testing' internals at runtime by
[@&#8203;dolmen](https://redirect.github.com/dolmen) in
[#&#8203;1751](https://redirect.github.com/stretchr/testify/pull/1751)
- assert: check test failure message for Empty and NotEmpty by
[@&#8203;ccoVeille](https://redirect.github.com/ccoVeille) in
[#&#8203;1745](https://redirect.github.com/stretchr/testify/pull/1745)
- deps: fix dependency cycle with objx (again) by
[@&#8203;dolmen](https://redirect.github.com/dolmen) in
[#&#8203;1567](https://redirect.github.com/stretchr/testify/pull/1567)
- assert.Empty: comprehensive doc of "Empty"-ness rules by
[@&#8203;dolmen](https://redirect.github.com/dolmen) in
[#&#8203;1753](https://redirect.github.com/stretchr/testify/pull/1753)
- doc: improve godoc of top level 'testify' package by
[@&#8203;dolmen](https://redirect.github.com/dolmen) in
[#&#8203;1760](https://redirect.github.com/stretchr/testify/pull/1760)
- assert.ErrorAs: simplify retrieving the type name by
[@&#8203;ccoVeille](https://redirect.github.com/ccoVeille) in
[#&#8203;1740](https://redirect.github.com/stretchr/testify/pull/1740)
- assert.EqualValues: improve test coverage to 100% by
[@&#8203;dolmen](https://redirect.github.com/dolmen) in
[#&#8203;1763](https://redirect.github.com/stretchr/testify/pull/1763)
- suite.Run: simplify running of Setup/TeardownSuite by
[@&#8203;renzoarreaza](https://redirect.github.com/renzoarreaza) in
[#&#8203;1769](https://redirect.github.com/stretchr/testify/pull/1769)
- assert.CallerInfo: micro optimization by using LastIndexByte by
[@&#8203;dolmen](https://redirect.github.com/dolmen) in
[#&#8203;1767](https://redirect.github.com/stretchr/testify/pull/1767)
- assert.CallerInfo: micro cleanup by
[@&#8203;dolmen](https://redirect.github.com/dolmen) in
[#&#8203;1768](https://redirect.github.com/stretchr/testify/pull/1768)
- assert: refactor Test*FileExists and Test*DirExists tests to enable
parallel testing by [@&#8203;dolmen](https://redirect.github.com/dolmen)
in
[#&#8203;1766](https://redirect.github.com/stretchr/testify/pull/1766)
- suite.Run: refactor handling of stats for improved readability by
[@&#8203;dolmen](https://redirect.github.com/dolmen) in
[#&#8203;1764](https://redirect.github.com/stretchr/testify/pull/1764)
- tests: improve captureTestingT helper by
[@&#8203;ccoVeille](https://redirect.github.com/ccoVeille) in
[#&#8203;1741](https://redirect.github.com/stretchr/testify/pull/1741)
- build(deps): bump actions/checkout from 4 to 5 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;1778](https://redirect.github.com/stretchr/testify/pull/1778)

#### New Contributors

- [@&#8203;greg0ire](https://redirect.github.com/greg0ire) made their
first contribution in
[#&#8203;1710](https://redirect.github.com/stretchr/testify/pull/1710)
- [@&#8203;techfg](https://redirect.github.com/techfg) made their first
contribution in
[#&#8203;1709](https://redirect.github.com/stretchr/testify/pull/1709)
- [@&#8203;mikeauclair](https://redirect.github.com/mikeauclair) made
their first contribution in
[#&#8203;1614](https://redirect.github.com/stretchr/testify/pull/1614)
- [@&#8203;cszczepaniak](https://redirect.github.com/cszczepaniak) made
their first contribution in
[#&#8203;1427](https://redirect.github.com/stretchr/testify/pull/1427)
- [@&#8203;architagr](https://redirect.github.com/architagr) made their
first contribution in
[#&#8203;1675](https://redirect.github.com/stretchr/testify/pull/1675)
- [@&#8203;tsioftas](https://redirect.github.com/tsioftas) made their
first contribution in
[#&#8203;1681](https://redirect.github.com/stretchr/testify/pull/1681)
- [@&#8203;siliconbrain](https://redirect.github.com/siliconbrain) made
their first contribution in
[#&#8203;1729](https://redirect.github.com/stretchr/testify/pull/1729)
- [@&#8203;bartventer](https://redirect.github.com/bartventer) made
their first contribution in
[#&#8203;1730](https://redirect.github.com/stretchr/testify/pull/1730)
- [@&#8203;Ararsa-Derese](https://redirect.github.com/Ararsa-Derese)
made their first contribution in
[#&#8203;1706](https://redirect.github.com/stretchr/testify/pull/1706)
- [@&#8203;renzoarreaza](https://redirect.github.com/renzoarreaza) made
their first contribution in
[#&#8203;1769](https://redirect.github.com/stretchr/testify/pull/1769)
- [@&#8203;3scalation](https://redirect.github.com/3scalation) made
their first contribution in
[#&#8203;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` |
[![age](https://developer.mend.io/api/mc/badges/age/go/golang.org%2fx%2fmod/v0.26.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/golang.org%2fx%2fmod/v0.25.0/v0.26.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| golang.org/x/sync | `v0.15.0` -> `v0.16.0` |
[![age](https://developer.mend.io/api/mc/badges/age/go/golang.org%2fx%2fsync/v0.16.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/golang.org%2fx%2fsync/v0.15.0/v0.16.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| golang.org/x/sys | `v0.33.0` -> `v0.34.0` |
[![age](https://developer.mend.io/api/mc/badges/age/go/golang.org%2fx%2fsys/v0.34.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/golang.org%2fx%2fsys/v0.33.0/v0.34.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| golang.org/x/text | `v0.26.0` -> `v0.27.0` |
[![age](https://developer.mend.io/api/mc/badges/age/go/golang.org%2fx%2ftext/v0.27.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/golang.org%2fx%2ftext/v0.26.0/v0.27.0?slim=true)](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