{"version":"2.1.224","anchor":"runner-collects-metrics-from-its-child-sessions-and-re-expor","canonical_anchor":"runner-collects-metrics-from-its-child-sessions-and-re-expor","heading":"Runner collects metrics from its child sessions and re-exports them","tier":"use","area":"Self-Hosted Runner","scope":null,"heads_up":null,"url":"https:\/\/changelogs.core-directive.com\/v\/2.1.224\/e\/runner-collects-metrics-from-its-child-sessions-and-re-expor","release_url":"https:\/\/changelogs.core-directive.com\/v\/2.1.224","markdown":"### Runner collects metrics from its child sessions and re-exports them\n\nSet OTEL_METRICS_EXPORTER=prometheus and child sessions report through the runner, giving one scrape target per machine.\n\n**What**\n\nThe 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.\n\n**Details**\n\n- Requests from any address other than loopback get 403. Bodies over 1 MiB get 413.\n- Child metric names that collide with the runner's own `claude_code_self_hosted_runner_` prefix are dropped.\n- A session's series are swept from the output when that session ends.\n\n**Evidence**\n\n`OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE`\n\n- Area: Self-Hosted Runner\n- Names: `OTEL_METRICS_EXPORTER`\n- Tier: Use it now\n- Useful: 3\/5\n- Signal: 4\/5"}