Repository navigation
fix(telemetry): exclude FastAPI 0.142.x, which exports telemetry twice - #4216
Conversation
|
Auto-sync is disabled for draft pull requests in this repository. Workflows must be run manually. Contributors can view more details about this message here. |
94863a8 to
24a5c65
Compare
|
FastAPI has since changed the default upstream. In FastAPI 0.143.0 (fastapi/fastapi#16476, from fastapi/fastapi#16473), automatic exporter setup is opt-in: That means this PR can shrink to excluding those releases in # FastAPI: Used for server infrastructure
# Updated Thu Mar 26, 2026 with fastapi==0.135.2
# 0.142.* adds its own OTLP exporters to nemo-lens's providers whenever
# OTEL_EXPORTER_OTLP_ENDPOINT is set, so every span and metric is exported twice.
# 0.143.0 made that opt-in (fastapi/fastapi#16476).
# License: MIT https://github.com/fastapi/fastapi/blob/25a3697cedc6e7dfb84e93c8ff965801486f00f4/LICENSE
"fastapi!=0.142.*",I prefer this exclusion over keeping the factory:
On the native Environments already built with FastAPI 0.142 will keep exporting twice until they're reinstalled. |
FastAPI 0.142.0 to 0.142.4 auto-configure a second OTLP span processor and metric reader on nemo-lens's providers whenever OTEL_EXPORTER_OTLP_ENDPOINT is set, so every span and metric left Gym servers twice. 0.143.0 makes that opt-in (fastapi/fastapi#16476). Excluding the affected range is enough; environments already built with 0.142 need a reinstall. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Signed-off-by: Ingo Guehring <iguehring@nvidia.com>
24a5c65 to
1e1b2e7
Compare
|
@ananthsub Thanks a lot for the great bias for action! I updated the PR following your recommendation. |
|
🔄 Merge queue validation started! You can track the progress here: https://github.com/NVIDIA-NeMo/Gym/actions/runs/37803428457 |
Problem
FastAPI 0.142.0 to 0.142.4 (release notes, fastapi/fastapi#16403) configure OpenTelemetry export by themselves at ASGI startup whenever
OTEL_EXPORTER_OTLP_ENDPOINTis set. Gym sets that variable for every server process so that nemo-lens finds the collector, and nemo-lens has already registered providers with their own exporters. FastAPI attaches a secondBatchSpanProcessorand a secondPeriodicExportingMetricReaderto those providers. Gym does not pin FastAPI, so every job environment resolved since 2026-09-29 picked this up.Observed in every gym-native run since then:
_sumof the Gym histograms carries last-digit dips that Prometheus treats as counter resets;increase()/rate()on a sum then adds the whole running value (mean rollout duration showed hours instead of minutes, 60 of 60 runs affected).Change
FastAPI 0.143.0 (fastapi/fastapi#16476, from discussion #16473) makes the automatic exporter setup opt-in, so only the 0.142 series double-exports. This PR excludes that series in
pyproject.toml(fastapi!=0.142.*) and refreshesuv.lock; the locked version stays 0.135.2. An earlier revision wrapped the sixFastAPI()sites in a factory that switched the native telemetry off; the exclusion replaces it because it also covers the bareFastAPI()apps outside the server bases and needs nothing from future servers.Environments already built with FastAPI 0.142 keep exporting twice until they are reinstalled.
Verification
A gym-native run with the factory revision as the job-side Gym (terminal-bench miniswe, 8 rollouts, 1 node) showed one
gym.rollout/gym.verifyspan per rollout, one metric datapoint per 10 s with consistent sums, andresets(gym_rollout_duration_ms_milliseconds_sum[1d]) = 0, against 2 spans per rollout and up to 684 resets per run onmain. The exclusion produces the same single export by resolving FastAPI to 0.143.0 instead of switching the feature off.