Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Prometheus exporter: concurrent collect bugfix #3899

Merged
merged 37 commits into from
Jun 29, 2023

Conversation

hexdigest
Copy link
Contributor

@hexdigest hexdigest commented Mar 17, 2023

This PR fixes the following problem which is caused by the concurrent Collect method execution:

fatal error: concurrent map writes

goroutine 112 [running]:
go.opentelemetry.io/otel/exporters/prometheus.validateMetrics({0xc0004fc1e0, 0x28}, {0x0, 0x0}, 0xc00024e4c8, 0xc000122008?)
        /go/pkg/mod/go.opentelemetry.io/otel/exporters/prometheus@v0.36.0/exporter.go:384 +0x5fd
go.opentelemetry.io/otel/exporters/prometheus.addSumMetric[...](0x7f27d20dd108?, {{0xc0003693b0?, 0x40f7c7?, 0x28?}, 0x80?, 0xb8?}, {{0x1390626, 0x22}, {0x0, 0x0}, ...}, ...)
        /go/pkg/mod/go.opentelemetry.io/otel/exporters/prometheus@v0.36.0/exporter.go:214 +0xcd
go.opentelemetry.io/otel/exporters/prometheus.(*collector).Collect(0xc00009e730, 0xc0004f5f60?)
        /go/pkg/mod/go.opentelemetry.io/otel/exporters/prometheus@v0.36.0/exporter.go:160 +0xc6e
github.com/prometheus/client_golang/prometheus.(*Registry).Gather.func1()

Also fixes #3917

@linux-foundation-easycla
Copy link

linux-foundation-easycla bot commented Mar 17, 2023

CLA Signed

The committers listed above are authorized under a signed CLA.

Copy link
Contributor

@MrAlias MrAlias left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is missing tests to validate the bug this is supposed to address is resolved.

exporters/prometheus/exporter.go Outdated Show resolved Hide resolved
@Aneurysm9
Copy link
Member

Is this type expected to be safe for concurrent use? I don't believe we document that any exporters are safe for concurrent use. What is the scenario that causes this error to be observed?

@hexdigest
Copy link
Contributor Author

Is this type expected to be safe for concurrent use? I don't believe we document that any exporters are safe for concurrent use.

Neither prometheus nor opentelemetry explicitly documented anything about concurrency:

https://github.com/prometheus/client_golang/blob/27f0506d6ebbb117b6b697d0552ee5be2502c5f2/prometheus/registry.go#L140:L160

What is the scenario that causes this error to be observed?

We use OpenTelemetry with Prometheus in an absolutely standard way. I think that it just happen that collector came concurrently which is very unlikely but still possible.

@hexdigest
Copy link
Contributor Author

hexdigest commented Mar 18, 2023

@MrAlias @Aneurysm9

Digging deeper I found out that concurrent map access isn't the only problem, there are other critical sections. So I cleaned up the code and used sync.Mutex instead of just protecting the map. Please take a look at the PR and if it's ok I'll complete it with tests.

This particular collector must be concurrent safe just because there's no mechanism protecting the third-party collector on the Prometheus side, as result a couple of concurrent requests to the prometheus handler might crash the app.

In the Prometheus itself the metrics map is protected by the mutex:
https://github.com/prometheus/client_golang/blob/fae2f6306b16a7265d5569c5507623dfaba09053/prometheus/vec.go#L320:L323

So any Prometheus collector must be concurrent-safe.

exporters/prometheus/exporter.go Outdated Show resolved Hide resolved
exporters/prometheus/exporter.go Outdated Show resolved Hide resolved
@codecov
Copy link

codecov bot commented Mar 20, 2023

Codecov Report

Merging #3899 (914a931) into main (64e76f8) will decrease coverage by 0.1%.
The diff coverage is 74.3%.

Additional details and impacted files

Impacted file tree graph

@@           Coverage Diff           @@
##            main   #3899     +/-   ##
=======================================
- Coverage   83.6%   83.6%   -0.1%     
=======================================
  Files        181     181             
  Lines      14162   14184     +22     
=======================================
+ Hits       11840   11858     +18     
- Misses      2096    2098      +2     
- Partials     226     228      +2     
Impacted Files Coverage Δ
exporters/prometheus/exporter.go 84.4% <74.3%> (+0.5%) ⬆️

... and 1 file with indirect coverage changes

Copy link
Contributor

@MrAlias MrAlias left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is still missing regression tests.

@hexdigest
Copy link
Contributor Author

This is still missing regression tests.

@MrAlias I added a test for concurrent collect. When I ran it against the main branch it gave me exactly same panic I reported above:

WARNING: DATA RACE
Read at 0x00c00051a880 by goroutine 125:
  github.com/prometheus/client_model/go.(*MetricFamily).GetType()
      /home/max/go/pkg/mod/github.com/prometheus/client_model@v0.3.0/go/metrics.pb.go:823 +0xcf
  go.opentelemetry.io/otel/exporters/prometheus.validateMetrics()
      /tmp/opentelemetry-go/exporters/prometheus/exporter.go:394 +0xdf
  go.opentelemetry.io/otel/exporters/prometheus.addSumMetric[...]()
      /tmp/opentelemetry-go/exporters/prometheus/exporter.go:217 +0x113
  go.opentelemetry.io/otel/exporters/prometheus.(*collector).Collect()
      /tmp/opentelemetry-go/exporters/prometheus/exporter.go:163 +0x1711
  go.opentelemetry.io/otel/exporters/prometheus.TestConcurrentCollect.func1()
      /tmp/opentelemetry-go/exporters/prometheus/exporter_test.go:712 +0x3e

Previous write at 0x00c00051a880 by goroutine 123:
  go.opentelemetry.io/otel/exporters/prometheus.validateMetrics()
      /tmp/opentelemetry-go/exporters/prometheus/exporter.go:387 +0x956
  go.opentelemetry.io/otel/exporters/prometheus.addSumMetric[...]()
      /tmp/opentelemetry-go/exporters/prometheus/exporter.go:217 +0x113
  go.opentelemetry.io/otel/exporters/prometheus.(*collector).Collect()
      /tmp/opentelemetry-go/exporters/prometheus/exporter.go:163 +0x1711
  go.opentelemetry.io/otel/exporters/prometheus.TestConcurrentCollect.func1()
      /tmp/opentelemetry-go/exporters/prometheus/exporter_test.go:712 +0x3e

PTAL

CHANGELOG.md Outdated Show resolved Hide resolved
exporters/prometheus/exporter.go Outdated Show resolved Hide resolved
exporters/prometheus/exporter.go Outdated Show resolved Hide resolved
@hexdigest
Copy link
Contributor Author

Just curious how many more months it will take to fix several panics in this package.

@pellared
Copy link
Member

pellared commented Jun 20, 2023

Just curious how many more months it will take to fix several panics in this package.

@hexdigest I am planning to merge this today as there was enough time for other contributors to review. Can you just update the TestNotNilScopeinfoInCollect test failure which is caused by recent changes (#4210)?

Copy link
Contributor

@dashpole dashpole left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry I wasn't able to get to this sooner, i'm just getting back from leave. This is a great improvement overall, and a needed fix. Comments are non-blocking.

exporters/prometheus/exporter.go Show resolved Hide resolved
exporters/prometheus/exporter.go Outdated Show resolved Hide resolved
@pellared
Copy link
Member

@hexdigest Are you able to fix the build and consider addressing @dashpole comments?

@hexdigest
Copy link
Contributor Author

@hexdigest Are you able to fix the build and consider addressing @dashpole comments?

Yep, I will

@hexdigest
Copy link
Contributor Author

@hexdigest Are you able to fix the build and consider addressing @dashpole comments?

The problem is that this is the only trick path I found to reproduce the issue in the test:
invalid instrument name: ���: must start with a letter

And now it's being checked somewhere else I suppose, so I might just remove this test.

@pellared
Copy link
Member

I am fine with removing the test as it is a very edge case and personally I do not know how to reproduce it.

@pellared
Copy link
Member

pellared commented Jun 28, 2023

@hexdigest I quickly checked https://github.com/prometheus/client_golang/ and tried to fix the test in browser. fcfb775

I hope it helps...

I am quite busy at the moment 😬

exporters/prometheus/exporter_test.go Show resolved Hide resolved
exporters/prometheus/exporter_test.go Show resolved Hide resolved
exporters/prometheus/exporter_test.go Outdated Show resolved Hide resolved
@pellared
Copy link
Member

pellared commented Jun 29, 2023

@hexdigest Let us know if you do not have time or do not want to address the comments. I can merge this PR and address the comments myself by creating a new PR.

@hexdigest
Copy link
Contributor Author

hexdigest commented Jun 29, 2023 via email

@pellared pellared mentioned this pull request Jun 29, 2023
4 tasks
@pellared pellared merged commit 4570292 into open-telemetry:main Jun 29, 2023
20 of 21 checks passed
Kavindu-Dodan added a commit to open-feature/flagd that referenced this pull request Sep 8, 2023
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
|
[go.opentelemetry.io/otel](https://togithub.com/open-telemetry/opentelemetry-go)
| require | minor | `v1.16.0` -> `v1.17.0` |
|
[go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc](https://togithub.com/open-telemetry/opentelemetry-go)
| require | minor | `v0.39.0` -> `v0.40.0` |
|
[go.opentelemetry.io/otel/exporters/otlp/otlptrace](https://togithub.com/open-telemetry/opentelemetry-go)
| require | minor | `v1.16.0` -> `v1.17.0` |
|
[go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc](https://togithub.com/open-telemetry/opentelemetry-go)
| require | minor | `v1.16.0` -> `v1.17.0` |
|
[go.opentelemetry.io/otel/exporters/prometheus](https://togithub.com/open-telemetry/opentelemetry-go)
| require | minor | `v0.39.0` -> `v0.40.0` |
|
[go.opentelemetry.io/otel/metric](https://togithub.com/open-telemetry/opentelemetry-go)
| require | minor | `v1.16.0` -> `v1.17.0` |
|
[go.opentelemetry.io/otel/sdk](https://togithub.com/open-telemetry/opentelemetry-go)
| require | minor | `v1.16.0` -> `v1.17.0` |
|
[go.opentelemetry.io/otel/sdk/metric](https://togithub.com/open-telemetry/opentelemetry-go)
| require | minor | `v0.39.0` -> `v0.40.0` |
|
[go.opentelemetry.io/otel/trace](https://togithub.com/open-telemetry/opentelemetry-go)
| require | minor | `v1.16.0` -> `v1.17.0` |

---

### Release Notes

<details>
<summary>open-telemetry/opentelemetry-go
(go.opentelemetry.io/otel)</summary>

###
[`v1.17.0`](https://togithub.com/open-telemetry/opentelemetry-go/releases/tag/v1.17.0):
/v0.40.0/v0.5.0

[Compare
Source](https://togithub.com/open-telemetry/opentelemetry-go/compare/v1.16.0...v1.17.0)

##### Added

- Export the `ManualReader` struct in
`go.opentelemetry.io/otel/sdk/metric`.
([#&#8203;4244](https://togithub.com/open-telemetry/opentelemetry-go/issues/4244))
- Export the `PeriodicReader` struct in
`go.opentelemetry.io/otel/sdk/metric`.
([#&#8203;4244](https://togithub.com/open-telemetry/opentelemetry-go/issues/4244))
-   Add support for exponential histogram aggregations.
A histogram can be configured as an exponential histogram using a view
with `"go.opentelemetry.io/otel/sdk/metric".ExponentialHistogram` as the
aggregation.
([#&#8203;4245](https://togithub.com/open-telemetry/opentelemetry-go/issues/4245))
- Export the `Exporter` struct in
`go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc`.
([#&#8203;4272](https://togithub.com/open-telemetry/opentelemetry-go/issues/4272))
- Export the `Exporter` struct in
`go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp`.
([#&#8203;4272](https://togithub.com/open-telemetry/opentelemetry-go/issues/4272))
- The exporters in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric`
now support the `OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE`
environment variable.
([#&#8203;4287](https://togithub.com/open-telemetry/opentelemetry-go/issues/4287))
- Add `WithoutCounterSuffixes` option in
`go.opentelemetry.io/otel/exporters/prometheus` to disable addition of
`_total` suffixes.
([#&#8203;4306](https://togithub.com/open-telemetry/opentelemetry-go/issues/4306))
- Add info and debug logging to the metric SDK in
`go.opentelemetry.io/otel/sdk/metric`.
([#&#8203;4315](https://togithub.com/open-telemetry/opentelemetry-go/issues/4315))
-   The `go.opentelemetry.io/otel/semconv/v1.21.0` package.
The package contains semantic conventions from the `v1.21.0` version of
the OpenTelemetry Semantic Conventions.
([#&#8203;4362](https://togithub.com/open-telemetry/opentelemetry-go/issues/4362))
- Accept 201 to 299 HTTP status as success in
`go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp` and
`go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp`.
([#&#8203;4365](https://togithub.com/open-telemetry/opentelemetry-go/issues/4365))
- Document the `Temporality` and `Aggregation` methods of the
`"go.opentelemetry.io/otel/sdk/metric".Exporter"` need to be concurrent
safe.
([#&#8203;4381](https://togithub.com/open-telemetry/opentelemetry-go/issues/4381))
- Expand the set of units supported by the Prometheus exporter, and
don't add unit suffixes if they are already present in
`go.opentelemetry.op/otel/exporters/prometheus`
([#&#8203;4374](https://togithub.com/open-telemetry/opentelemetry-go/issues/4374))
- Move the `Aggregation` interface and its implementations from
`go.opentelemetry.io/otel/sdk/metric/aggregation` to
`go.opentelemetry.io/otel/sdk/metric`.
([#&#8203;4435](https://togithub.com/open-telemetry/opentelemetry-go/issues/4435))
- The exporters in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric`
now support the
`OTEL_EXPORTER_OTLP_METRICS_DEFAULT_HISTOGRAM_AGGREGATION` environment
variable.
([#&#8203;4437](https://togithub.com/open-telemetry/opentelemetry-go/issues/4437))
- Add the `NewAllowKeysFilter` and `NewDenyKeysFilter` functions to
`go.opentelemetry.io/otel/attribute` to allow convenient creation of
allow-keys and deny-keys filters.
([#&#8203;4444](https://togithub.com/open-telemetry/opentelemetry-go/issues/4444))

##### Changed

- Starting from `v1.21.0` of semantic conventions,
`go.opentelemetry.io/otel/semconv/{version}/httpconv` and
`go.opentelemetry.io/otel/semconv/{version}/netconv` packages will no
longer be published.
([#&#8203;4145](https://togithub.com/open-telemetry/opentelemetry-go/issues/4145))
- Log duplicate instrument conflict at a warning level instead of info
in `go.opentelemetry.io/otel/sdk/metric`.
([#&#8203;4202](https://togithub.com/open-telemetry/opentelemetry-go/issues/4202))
- Return an error on the creation of new instruments in
`go.opentelemetry.io/otel/sdk/metric` if their name doesn't pass regexp
validation.
([#&#8203;4210](https://togithub.com/open-telemetry/opentelemetry-go/issues/4210))
- `NewManualReader` in `go.opentelemetry.io/otel/sdk/metric` returns
`*ManualReader` instead of `Reader`.
([#&#8203;4244](https://togithub.com/open-telemetry/opentelemetry-go/issues/4244))
- `NewPeriodicReader` in `go.opentelemetry.io/otel/sdk/metric` returns
`*PeriodicReader` instead of `Reader`.
([#&#8203;4244](https://togithub.com/open-telemetry/opentelemetry-go/issues/4244))
- Count the Collect time in the `PeriodicReader` timeout in
`go.opentelemetry.io/otel/sdk/metric`.
([#&#8203;4221](https://togithub.com/open-telemetry/opentelemetry-go/issues/4221))
- The function `New` in
`go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc`
returns `*Exporter` instead of
`"go.opentelemetry.io/otel/sdk/metric".Exporter`.
([#&#8203;4272](https://togithub.com/open-telemetry/opentelemetry-go/issues/4272))
- The function `New` in
`go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp`
returns `*Exporter` instead of
`"go.opentelemetry.io/otel/sdk/metric".Exporter`.
([#&#8203;4272](https://togithub.com/open-telemetry/opentelemetry-go/issues/4272))
- If an attribute set is omitted from an async callback, the previous
value will no longer be exported in
`go.opentelemetry.io/otel/sdk/metric`.
([#&#8203;4290](https://togithub.com/open-telemetry/opentelemetry-go/issues/4290))
- If an attribute set is observed multiple times in an async callback in
`go.opentelemetry.io/otel/sdk/metric`, the values will be summed instead
of the last observation winning.
([#&#8203;4289](https://togithub.com/open-telemetry/opentelemetry-go/issues/4289))
- Allow the explicit bucket histogram aggregation to be used for the
up-down counter, observable counter, observable up-down counter, and
observable gauge in the `go.opentelemetry.io/otel/sdk/metric` package.
([#&#8203;4332](https://togithub.com/open-telemetry/opentelemetry-go/issues/4332))
- Restrict `Meter`s in `go.opentelemetry.io/otel/sdk/metric` to only
register and collect instruments it created.
([#&#8203;4333](https://togithub.com/open-telemetry/opentelemetry-go/issues/4333))
- `PeriodicReader.Shutdown` and `PeriodicReader.ForceFlush` in
`go.opentelemetry.io/otel/sdk/metric` now apply the periodic reader's
timeout to the operation if the user provided context does not contain a
deadline.
([#&#8203;4356](https://togithub.com/open-telemetry/opentelemetry-go/issues/4356),
[#&#8203;4377](https://togithub.com/open-telemetry/opentelemetry-go/issues/4377))
- Upgrade all use of `go.opentelemetry.io/otel/semconv` to use
`v1.21.0`.
([#&#8203;4408](https://togithub.com/open-telemetry/opentelemetry-go/issues/4408))
- Increase instrument name maximum length from 63 to 255 characters in
`go.opentelemetry.io/otel/sdk/metric`.
([#&#8203;4434](https://togithub.com/open-telemetry/opentelemetry-go/issues/4434))
- Add `go.opentelemetry.op/otel/sdk/metric.WithProducer` as an `Option`
for `"go.opentelemetry.io/otel/sdk/metric".NewManualReader` and
`"go.opentelemetry.io/otel/sdk/metric".NewPeriodicReader`.
([#&#8203;4346](https://togithub.com/open-telemetry/opentelemetry-go/issues/4346))

##### Removed

- Remove `Reader.RegisterProducer` in `go.opentelemetry.io/otel/metric`.
Use the added `WithProducer` option instead.
([#&#8203;4346](https://togithub.com/open-telemetry/opentelemetry-go/issues/4346))
-   Remove `Reader.ForceFlush` in `go.opentelemetry.io/otel/metric`.
Notice that `PeriodicReader.ForceFlush` is still available.
([#&#8203;4375](https://togithub.com/open-telemetry/opentelemetry-go/issues/4375))

##### Fixed

- Correctly format log messages from the
`go.opentelemetry.io/otel/exporters/zipkin` exporter.
([#&#8203;4143](https://togithub.com/open-telemetry/opentelemetry-go/issues/4143))
- Log an error for calls to `NewView` in
`go.opentelemetry.io/otel/sdk/metric` that have empty criteria.
([#&#8203;4307](https://togithub.com/open-telemetry/opentelemetry-go/issues/4307))
- Fix `"go.opentelemetry.io/otel/sdk/resource".WithHostID()` to not set
an empty `host.id`.
([#&#8203;4317](https://togithub.com/open-telemetry/opentelemetry-go/issues/4317))
- Use the instrument identifying fields to cache aggregators and
determine duplicate instrument registrations in
`go.opentelemetry.io/otel/sdk/metric`.
([#&#8203;4337](https://togithub.com/open-telemetry/opentelemetry-go/issues/4337))
- Detect duplicate instruments for case-insensitive names in
`go.opentelemetry.io/otel/sdk/metric`.
([#&#8203;4338](https://togithub.com/open-telemetry/opentelemetry-go/issues/4338))
- The `ManualReader` will not panic if `AggregationSelector` returns
`nil` in `go.opentelemetry.io/otel/sdk/metric`.
([#&#8203;4350](https://togithub.com/open-telemetry/opentelemetry-go/issues/4350))
- If a `Reader`'s `AggregationSelector` returns `nil` or
`DefaultAggregation` the pipeline will use the default aggregation.
([#&#8203;4350](https://togithub.com/open-telemetry/opentelemetry-go/issues/4350))
- Log a suggested view that fixes instrument conflicts in
`go.opentelemetry.io/otel/sdk/metric`.
([#&#8203;4349](https://togithub.com/open-telemetry/opentelemetry-go/issues/4349))
- Fix possible panic, deadlock and race condition in batch span
processor in `go.opentelemetry.io/otel/sdk/trace`.
([#&#8203;4353](https://togithub.com/open-telemetry/opentelemetry-go/issues/4353))
- Improve context cancellation handling in batch span processor's
`ForceFlush` in `go.opentelemetry.io/otel/sdk/trace`.
([#&#8203;4369](https://togithub.com/open-telemetry/opentelemetry-go/issues/4369))
- Decouple `go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal`
from `go.opentelemetry.io/otel/exporters/otlp/internal` using gotmpl.
([#&#8203;4397](https://togithub.com/open-telemetry/opentelemetry-go/issues/4397),
[#&#8203;3846](https://togithub.com/open-telemetry/opentelemetry-go/issues/3846))
- Decouple
`go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc/internal`
from `go.opentelemetry.io/otel/exporters/otlp/internal` and
`go.opentelemetry.io/otel/exporters/otlp/otlpmetric/internal` using
gotmpl.
([#&#8203;4404](https://togithub.com/open-telemetry/opentelemetry-go/issues/4404),
[#&#8203;3846](https://togithub.com/open-telemetry/opentelemetry-go/issues/3846))
- Decouple
`go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp/internal`
from `go.opentelemetry.io/otel/exporters/otlp/internal` and
`go.opentelemetry.io/otel/exporters/otlp/otlpmetric/internal` using
gotmpl.
([#&#8203;4407](https://togithub.com/open-telemetry/opentelemetry-go/issues/4407),
[#&#8203;3846](https://togithub.com/open-telemetry/opentelemetry-go/issues/3846))
- Decouple
`go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc/internal`
from `go.opentelemetry.io/otel/exporters/otlp/internal` and
`go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal` using
gotmpl.
([#&#8203;4400](https://togithub.com/open-telemetry/opentelemetry-go/issues/4400),
[#&#8203;3846](https://togithub.com/open-telemetry/opentelemetry-go/issues/3846))
- Decouple
`go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp/internal`
from `go.opentelemetry.io/otel/exporters/otlp/internal` and
`go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal` using
gotmpl.
([#&#8203;4401](https://togithub.com/open-telemetry/opentelemetry-go/issues/4401),
[#&#8203;3846](https://togithub.com/open-telemetry/opentelemetry-go/issues/3846))
- Do not block the metric SDK when OTLP metric exports are blocked in
`go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc` and
`go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp`.
([#&#8203;3925](https://togithub.com/open-telemetry/opentelemetry-go/issues/3925),
[#&#8203;4395](https://togithub.com/open-telemetry/opentelemetry-go/issues/4395))
- Do not append `_total` if the counter already has that suffix for the
Prometheus exproter in `go.opentelemetry.io/otel/exporter/prometheus`.
([#&#8203;4373](https://togithub.com/open-telemetry/opentelemetry-go/issues/4373))
- Fix resource detection data race in
`go.opentelemetry.io/otel/sdk/resource`.
([#&#8203;4409](https://togithub.com/open-telemetry/opentelemetry-go/issues/4409))
- Use the first-seen instrument name during instrument name conflicts in
`go.opentelemetry.io/otel/sdk/metric`.
([#&#8203;4428](https://togithub.com/open-telemetry/opentelemetry-go/issues/4428))

##### Deprecated

- The `go.opentelemetry.io/otel/exporters/jaeger` package is deprecated.
    OpenTelemetry dropped support for Jaeger exporter in July 2023.
Use `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp`
or `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc`
instead.
([#&#8203;4423](https://togithub.com/open-telemetry/opentelemetry-go/issues/4423))
- The `go.opentelemetry.io/otel/example/jaeger` package is deprecated.
([#&#8203;4423](https://togithub.com/open-telemetry/opentelemetry-go/issues/4423))
- The `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/internal`
package is deprecated.
([#&#8203;4420](https://togithub.com/open-telemetry/opentelemetry-go/issues/4420))
- The
`go.opentelemetry.io/otel/exporters/otlp/otlpmetric/internal/oconf`
package is deprecated.
([#&#8203;4420](https://togithub.com/open-telemetry/opentelemetry-go/issues/4420))
- The
`go.opentelemetry.io/otel/exporters/otlp/otlpmetric/internal/otest`
package is deprecated.
([#&#8203;4420](https://togithub.com/open-telemetry/opentelemetry-go/issues/4420))
- The
`go.opentelemetry.io/otel/exporters/otlp/otlpmetric/internal/transform`
package is deprecated.
([#&#8203;4420](https://togithub.com/open-telemetry/opentelemetry-go/issues/4420))
- The `go.opentelemetry.io/otel/exporters/otlp/internal` package is
deprecated.
([#&#8203;4421](https://togithub.com/open-telemetry/opentelemetry-go/issues/4421))
- The `go.opentelemetry.io/otel/exporters/otlp/internal/envconfig`
package is deprecated.
([#&#8203;4421](https://togithub.com/open-telemetry/opentelemetry-go/issues/4421))
- The `go.opentelemetry.io/otel/exporters/otlp/internal/retry` package
is deprecated.
([#&#8203;4421](https://togithub.com/open-telemetry/opentelemetry-go/issues/4421))
- The `go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal`
package is deprecated.
([#&#8203;4425](https://togithub.com/open-telemetry/opentelemetry-go/issues/4425))
- The
`go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal/envconfig`
package is deprecated.
([#&#8203;4425](https://togithub.com/open-telemetry/opentelemetry-go/issues/4425))
- The
`go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal/otlpconfig`
package is deprecated.
([#&#8203;4425](https://togithub.com/open-telemetry/opentelemetry-go/issues/4425))
- The
`go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal/otlptracetest`
package is deprecated.
([#&#8203;4425](https://togithub.com/open-telemetry/opentelemetry-go/issues/4425))
- The `go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal/retry`
package is deprecated.
([#&#8203;4425](https://togithub.com/open-telemetry/opentelemetry-go/issues/4425))
- The `go.opentelemetry.io/otel/sdk/metric/aggregation` package is
deprecated.
Use the aggregation types added to `go.opentelemetry.io/otel/sdk/metric`
instead.
([#&#8203;4435](https://togithub.com/open-telemetry/opentelemetry-go/issues/4435))

##### New Contributors

- [@&#8203;serdarkalayci](https://togithub.com/serdarkalayci) made their
first contribution in
[open-telemetry/opentelemetry-go#4129
- [@&#8203;Jorropo](https://togithub.com/Jorropo) made their first
contribution in
[open-telemetry/opentelemetry-go#4226
- [@&#8203;hexdigest](https://togithub.com/hexdigest) made their first
contribution in
[open-telemetry/opentelemetry-go#3899
- [@&#8203;gkze](https://togithub.com/gkze) made their first
contribution in
[open-telemetry/opentelemetry-go#4402
- [@&#8203;jaredjenkins](https://togithub.com/jaredjenkins) made their
first contribution in
[open-telemetry/opentelemetry-go#4409
- [@&#8203;utezduyar](https://togithub.com/utezduyar) made their first
contribution in
[open-telemetry/opentelemetry-go#4456

**Full Changelog**:
open-telemetry/opentelemetry-go@v1.16.0...v1.17.0

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

👻 **Immortal**: This PR will be recreated if closed unmerged. Get
[config help](https://togithub.com/renovatebot/renovate/discussions) if
that's undesired.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/open-feature/flagd).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNi42Ni4wIiwidXBkYXRlZEluVmVyIjoiMzYuNjYuMCIsInRhcmdldEJyYW5jaCI6Im1haW4ifQ==-->

---------

Signed-off-by: Kavindu Dodanduwa <kavindudodanduwa@gmail.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Kavindu Dodanduwa <kavindudodanduwa@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Prometheus exporter: Improper error handling when createScopeInfoMetric returns error
6 participants