Set OTEL_METRICS_EXPORTER=prometheus and child sessions report through the runner, giving one scrape target per machine.
What's wrong with this entry?
The runner's health server accepts OTLP/JSON metrics on POST /v1/metrics and merges them into its own /metrics output, labelled with session_id and client_platform. When capacity is above 1 and you have set OTEL_METRICS_EXPORTER=prometheus, child sessions are automatically pointed at http://127.0.0.1:<health-port>/v1/metrics instead, so one scrape target covers the whole machine.
- Requests from any address other than loopback get 403. Bodies over 1 MiB get 413.
- Child metric names that collide with the runner's own
claude_code_self_hosted_runner_prefix are dropped. - A session's series are swept from the output when that session ends.
OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE
Strings lifted out of the shipped bundle, so the claim above can be checked against them.
Related
Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.
-
v2.1.234
Self-hosted runners report when warm-up finished
Both mention self hosted runner
-
v2.1.236
Self-hosted runner releases a session only after its work finishes
Both mention self hosted runner
-
v2.1.236
Runner waits for sessions to be released before shutting down
Both mention self hosted runner