Skip to content

collector: scope collector runtime state#3664

Draft
nicolastakashi wants to merge 4 commits into
prometheus:masterfrom
nicolastakashi:embeddable-collector-runtime-state
Draft

collector: scope collector runtime state#3664
nicolastakashi wants to merge 4 commits into
prometheus:masterfrom
nicolastakashi:embeddable-collector-runtime-state

Conversation

@nicolastakashi
Copy link
Copy Markdown

@nicolastakashi nicolastakashi commented May 19, 2026

Summary

This continues the incremental refactor to make node_exporter easier to embed outside the standalone binary.
The broader goal is to support ongoing work to make Prometheus exporters embeddable inside the Prometheus OpenTelemetry Collector distribution as native receivers, without requiring each exporter to be rewritten as an OpenTelemetry component.

This PR builds on the previous config, runtime, and CLI wiring PRs by moving collector runtime state off shared process-global mutation and into runtime-owned state.

Specifically, this PR:

  • snapshots effective collector enablement into per-runtime state
  • moves lazy collector instantiation and caching behind that runtime-owned state
  • derives filtered runtimes from the base runtime instead of rebuilding from global collector flags
  • removes the CPU collector's direct dependency on the global collector enablement map for cpufreq-related behavior
  • adds tests covering runtime-local collector state and filtered runtime behavior

Why

The goal of this change is to make collector setup more instance-scoped and less dependent on mutable process-global state.
Before this change, runtime construction could mutate global collector enablement, and collector instances were cached globally across the process. That made it harder to reason about independent runtime instances and made filtered handler construction depend on shared global state.
After this change, collector enablement is resolved once into runtime-local state, collector instances are cached within that runtime state, and derived filtered runtimes reuse the base runtime's effective collector configuration.
This is still not the end of the embeddability work. Many individual collectors still read configuration directly from package-global CLI flags. The intent of this PR is to narrow the shared runtime state surface and make the current runtime model more explicit and reusable.

Stack

This PR is part of a stacked series:

The earlier PRs introduced reusable config, runtime, and binary wiring layers. This PR pushes the remaining runtime behavior further away from shared process-global mutation.

Signed-off-by: Nicolas Takashi <nicolas.tcs@hotmail.com>
Signed-off-by: Nicolas Takashi <nicolas.tcs@hotmail.com>
Signed-off-by: Nicolas Takashi <nicolas.tcs@hotmail.com>
Signed-off-by: Nicolas Takashi <nicolas.tcs@hotmail.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.

1 participant