Skip to content

[CELEBORN-2359] Deduplicate # HELP/# TYPE lines in PrometheusServlet output#3734

Open
afterincomparableyum wants to merge 1 commit into
apache:mainfrom
afterincomparableyum:CELEBORN-2359
Open

[CELEBORN-2359] Deduplicate # HELP/# TYPE lines in PrometheusServlet output#3734
afterincomparableyum wants to merge 1 commit into
apache:mainfrom
afterincomparableyum:CELEBORN-2359

Conversation

@afterincomparableyum

@afterincomparableyum afterincomparableyum commented Jun 13, 2026

Copy link
Copy Markdown
Contributor

What changes were proposed in this pull request?

AbstractSource emits a # HELP and # TYPE line for every metric sample. When a metric family has multiple label sets — like ActiveConnectionCount (per application), RequestSlotsFailedCount (per status code), per-user/app resource consumption, or FlushWorkingQueueSize (per mountpoint) — the same family is exported with repeated # HELP and # TYPE lines. This violates the Prometheus exposition format.

The fix is to override PrometheusServlet.getMetricsSnapshot to keep only the first # HELP and # TYPE line per metric family while preserving all sample lines, producing valid Prometheus output.

I also added a PrometheusServletSuite covering a multi-label-set counter and a distinct gauge.

Why are the changes needed?

To dedup the help and type lines to no longer violate prometheus exposition format.

Does this PR resolve a correctness bug?

  • Yes

Does this PR introduce any user-facing change?

  • Yes

How was this patch tested?

CI/CD

…output

AbstractSource emits a `# HELP` and `# TYPE` line for every metric sample. When a metric family has multiple label sets — like ActiveConnectionCount (per application), RequestSlotsFailedCount (per status code), per-user/app resource consumption, or FlushWorkingQueueSize (per mountpoint) — the same family is exported with repeated `# HELP` and `# TYPE` lines. This violates the Prometheus exposition format.

The fix is to override PrometheusServlet.getMetricsSnapshot to keep only the first `# HELP` and `# TYPE` line per metric family while preserving all sample lines, producing valid Prometheus output.

I also added a PrometheusServletSuite covering a multi-label-set counter and a distinct gauge.
@github-actions github-actions Bot added module:service correctness Correctness bugfix labels Jun 13, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant