Skip to content

feat: add OTel preserve_names for scrape-time suffix handling - #1956

Merged
zeitlinger merged 3 commits into
mainfrom
scrape-time-suffix-otel
Mar 20, 2026
Merged

feat: add OTel preserve_names for scrape-time suffix handling#1956
zeitlinger merged 3 commits into
mainfrom
scrape-time-suffix-otel

Conversation

@zeitlinger

@zeitlingerzeitlinger commented Mar 17, 2026

Copy link
Copy Markdown
Member

Summary

Adds preserve_names configuration to the OpenTelemetry exporter.
When enabled, metric names are passed through exactly as the user
wrote them instead of stripping _total and unit suffixes.
Part of #1942.

Key changes

  • Add preserve_names to ExporterOpenTelemetryProperties
  • MetricDataFactory uses originalName + preserve_names to
    decide naming
  • OtelAutoConfig wires the new property

Key table

User providesOTelOTel preserve_names
Counter("events")eventsevents
Counter("events_total")eventsevents_total
Counter("req").unit(BYTES)name req, unit Byname req, unit By
Counter("req_bytes").unit(BYTES)name req, unit Byname req_bytes, unit By
Gauge("events_total")events_totalevents_total

PR stack

  1. Core model + OM1/protobuf writers (feat: move suffix handling to scrape time #1955)
  2. This PR — OTel preserve_names
  3. OM2 writer no-suffix (independent)

Test plan

  • mise run compile passes
  • Tests for preserve_names=true with units, unit already in
    name, and without unit
  • OtelAutoConfigTest covers new property wiring

Part of #1912.

@zeitlinger
zeitlinger changed the base branch from scrape-time-suffix-core to mainMarch 17, 2026 10:32
@zeitlinger
zeitlinger marked this pull request as ready for review March 17, 2026 10:32
Add preserve_names configuration to the OpenTelemetry exporter. When
enabled, metric names are passed through exactly as the user wrote them
instead of stripping _total and unit suffixes.
- Add preserve_names to ExporterOpenTelemetryProperties
- MetricDataFactory uses originalName + preserve_names to decide naming
- OtelAutoConfig wires the new property
- Tests for preserve_names with units, unit-in-name, and without unit
Part of #1942
Signed-off-by: Gregor Zeitlinger <gregor.zeitlinger@grafana.com>
…ests
Avoids brittle reflective access to OpenTelemetryExtension internals.
Signed-off-by: Gregor Zeitlinger <gregor.zeitlinger@grafana.com>
@zeitlinger
zeitlingerforce-pushed the scrape-time-suffix-otel branch from 9cbe09d to c822bafCompareMarch 20, 2026 09:40
Signed-off-by: Gregor Zeitlinger <gregor.zeitlinger@grafana.com>
@zeitlinger
zeitlinger merged commit f794288 into mainMar 20, 2026
13 checks passed
@zeitlinger
zeitlinger deleted the scrape-time-suffix-otel branch March 20, 2026 11:34
@github-actionsgithub-actionsBot mentioned this pull request Mar 20, 2026
zeitlinger pushed a commit that referenced this pull request Apr 27, 2026
🤖 I have created a release *beep* *boop*
---
##
[1.6.0](v1.5.1...v1.6.0)
(2026-04-25)
### Features
* Add logic for handling content negotation flag with OM2
([#1986](#1986))
([0fa1ad7](0fa1ad7))
* Add OM2 native histogram text output
([#2042](#2042))
([dec8e5b](dec8e5b))
* add OTel preserve_names for scrape-time suffix handling
([#1956](#1956))
([f794288](f794288))
* compositeValues and exemplarCompliance flags for OM2 writer
([#1991](#1991))
([ff48ae8](ff48ae8))
* move suffix handling to scrape time
([#1955](#1955))
([5a5106c](5a5106c))
* OM2 writer outputs names as provided, no suffix appending
([#1957](#1957))
([5ce2b57](5ce2b57))
### Bug Fixes
* **deps:** update dependency com.google.guava:guava to v33.6.0-jre
([#2021](#2021))
([1382693](1382693))
* **deps:** update dependency commons-io:commons-io to v2.22.0
([#2044](#2044))
([9e05c1d](9e05c1d))
* **deps:** update dependency
io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha
to v2.27.0-alpha
([#2022](#2022))
([30ac534](30ac534))
* **deps:** update dependency
io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha
to v2.27.0-alpha
([#2023](#2023))
([2d51a32](2d51a32))
* **deps:** update dependency io.prometheus:prometheus-metrics-bom to
v1.5.1 ([#2004](#2004))
([650ce4b](650ce4b))
* **deps:** update dependency org.apache.tomcat.embed:tomcat-embed-core
to v11.0.21
([#2005](#2005))
([7a36df7](7a36df7))
* **deps:** update dependency
org.springframework.boot:spring-boot-starter-parent to v4.0.5
([#2006](#2006))
([0106c18](0106c18))
* **deps:** update dependency
org.springframework.boot:spring-boot-starter-parent to v4.0.6
([#2046](#2046))
([40a9db8](40a9db8))
* **deps:** update jetty monorepo to v12.1.8
([#2007](#2007))
([acab5b2](acab5b2))
* **deps:** update protobuf
([#2024](#2024))
([8e2214e](8e2214e))
* pass release tag as input to deploy workflow
([#1982](#1982))
([165c921](165c921))
* pin grafana/otel-lgtm to 0.7.2 in OATs acceptance test
([#1992](#1992))
([f17ad9a](f17ad9a))
* Relax metric name validation in Dropwizard5
([#1985](#1985))
([deb782f](deb782f))
* stabilize flaky timer and thread count tests
([#1973](#1973))
([ce5867b](ce5867b))
* Tighten OM2 summary and start timestamp output
([#2041](#2041))
([5699469](5699469))
* trigger Maven deploy from release-please via workflow_dispatch
([#1981](#1981))
([698f956](698f956))
---
> [!IMPORTANT]
> Close and reopen this PR to trigger CI checks.
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Sign up for freeto 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.

2 participants

@zeitlinger@jaydeluca