Skip to content

Document the single scrape target requirement for v2 metrics - #3729

Merged
kaitlynmichael merged 2 commits into
mainfrom
DOC-6906
Jul 29, 2026
Merged

Document the single scrape target requirement for v2 metrics#3729
kaitlynmichael merged 2 commits into
mainfrom
DOC-6906

Conversation

@kaitlynmichael

@kaitlynmichael kaitlynmichael commented Jul 29, 2026

Copy link
Copy Markdown
Contributor

Documents that the v2 metrics endpoint is cluster-wide and must be scraped through a single Prometheus target.

Jira: DOC-6906 · Related: KBP-1033, observability#94, Zendesk #165134

Why

Every node runs an aggregator that reads the node list from CCS, scrapes every other node, and returns the same complete cluster-wide result. Envoy routes :8070/v2 to the local aggregator on whichever node is asked, so every node returns a complete and identical copy of the cluster's metrics.

That breaks the usual Prometheus convention of one exporter per host. Anyone applying the node_exporter pattern — or substituting node IPs because they have no cluster FQDN configured — lists every node as a target. The result:

  • Every series duplicated once per target
  • Every sum()-based Grafana panel inflated by the number of targets
  • N² internal scrapes per interval (13 nodes → 169)
  • No error anywhere. Prometheus shows all targets UP and Grafana renders normally

A customer spent several weeks unable to trust their CPU and connection dashboards because of this. The docs showed the correct single-target config but never said why it was required or what breaks otherwise.

What changed

Content Where
Single-target note beside every v2 scrape_configs example all 6 source files
Why the reason changed in v1→v2 — v1 forced one target via redirects from non-master nodes; v2 has no redirects, but still needs one target all 3 v1-to-v2 pages, MSE _index
/v2/node alternative for conventional per-node topology, plus the caveat that aggregation adds the cluster/node labels so /v2/node omits them all 3 v1-to-v2 pages, MSE _index
Verification stepcount(up{...}) returns 1; node_metrics_up reports 0 for unreachable nodes quickstart embed, get-started.md
<IP>:8070<cluster_name>:8070 — the old placeholder nudged readers toward the exact per-node config this PR warns against 4 current/shared files

9 files, +50/−4, reaching 8 rendered pages.

For reviewers — two things to know

1. Scope is much wider than the three pages on the ticket, because this content is duplicated. Two separate copy-paste clusters, neither using the embeds/ mechanism:

  • The v1-to-v2 transition page exists three times — under /integrate/prometheus-with-redis-enterprise/, /operate/rs/monitoring/metrics_stream_engine/, and /operate/rs/references/metrics/. All 43 lines, same title and content, and already drifted: pairwise they differ by 2, 3, and 10 lines. Nobody diverged them on purpose; someone edited one copy and not the others.
  • The Prometheus setup steps exist twice — the shared rs-prometheus-grafana-quickstart.md embed and a hand-maintained copy in monitoring/get-started.md.

Fixing only the pages named on the ticket would have left the same wrong guidance live on three others. The second commit here adds the third v1-to-v2 copy, which my first pass missed.

2. This intentionally reaches the frozen 7.8 and 7.22 pages. Two of the edited files are shared embeds (rs-prometheus-grafana-quickstart.md, rs-observability.md) that those versioned pages consume. Normally we don't propagate current content into frozen snapshots, but this is a factual correction and I verified it holds for both versions (see below). Say the word if you'd rather I fork the embed instead.

@markotrapani — the claims most worth your eye, since you reproduced this on a lab cluster: that the /v2/node label caveat is stated correctly, and that node_metrics_up is the right metric to point people at.

Verification

Checked against the product source at tags v8.2.1-2, v7.22.2-174, and v7.8.6-296 — all three agree:

  • master_aggregator is autostart = true in supervisord_metrics_exporter.conf with no master-only guard, so it runs on every node
  • listener-specs.go routes /v2 → local master_aggregator unconditionally; the IsCurrNodeMaster() branch above it only changes the listener name and adds Connection: close
  • HandleMetricsRedirects feeds only the legacy / route, confirming redirects are not involved on v2
  • node_metrics_up exists as far back as 7.8, so the verification tip is safe in shared content

Two small corrections to the ticket, applied here: the sub-endpoint list was missing /v2/db_controller, and node_metrics_up is a stronger check than count(up{...}) alone.

Hugo builds clean. Vale warnings are at the pre-existing baseline; the only remaining new errors are Grafana spellings, which this vocabulary already flags 30+ times in these same files.

Follow-up worth filing

Both duplication clusters above should collapse into shared embeds — one canonical v1-to-v2 page, one canonical setup-steps page. That drift is the root cause this ticket surfaced, it already caused a missed page inside this PR, and it will recur.

🤖 Generated with Claude Code

@kaitlynmichael
kaitlynmichael requested review from a team and markotrapani July 29, 2026 20:58
@kaitlynmichael kaitlynmichael self-assigned this Jul 29, 2026
@kaitlynmichael kaitlynmichael added the rs Redis Software label Jul 29, 2026
@github-actions

github-actions Bot commented Jul 29, 2026

Copy link
Copy Markdown
Contributor

DOC-6906

@github-actions

Copy link
Copy Markdown
Contributor

🧠 Redis Memory

Found 5 related items from repository history:

Memory updated at fee6a0f

@dwdougherty dwdougherty left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Language LGTM.

@github-actions

Copy link
Copy Markdown
Contributor

🧠 Redis Memory

Found 5 related items from repository history:

Memory updated at 0a846ac

@markotrapani markotrapani left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Looks good to me!

@kaitlynmichael
kaitlynmichael merged commit ebb6050 into main Jul 29, 2026
86 checks passed
@kaitlynmichael
kaitlynmichael deleted the DOC-6906 branch July 29, 2026 22:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

rs Redis Software

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants