Skip to content

feat(otel): OTLP HTTP exporter for free-threaded OTLP export#156

Merged
lesnik512 merged 4 commits into
mainfrom
otlp-http-exporter
Jul 19, 2026
Merged

feat(otel): OTLP HTTP exporter for free-threaded OTLP export#156
lesnik512 merged 4 commits into
mainfrom
otlp-http-exporter

Conversation

@lesnik512

Copy link
Copy Markdown
Member

Summary

otl was the last observability surface with no free-threaded story — its OTLP exporter goes over gRPC (needs grpcio, no ft wheels). Adds an HTTP-exporter path. Full rationale: planning/changes/2026-07-19.02-otlp-http-exporter.md; shape decision: planning/decisions/2026-07-19-otlp-http-exporter-shape.md.

What changed

  • opentelemetry_exporter_protocol: Literal["grpc","http"] = "grpc" — default keeps current behavior byte-for-byte. bootstrap() selects the exporter by protocol and warns (naming [otl] / [otl-http]) if the chosen exporter package is absent.
  • New is_otlp_http_exporter_installed guard; both exporters imported aliased under their own guards.
  • Extras: otlopentelemetry-exporter-otlp-proto-grpc (was the opentelemetry-exporter-otlp meta — functionally identical for gRPC users, verified against package metadata); new otl-httpopentelemetry-exporter-otlp-proto-http (requests+protobuf, no grpcio, ft-installable).
  • HTTP endpoint is a full URL; opentelemetry_insecure is gRPC-only (URL scheme carries http security).
  • CI: otl-http added to both ft legs; scripts/ft_smoke.py bootstraps a protocol=http instrument. Docs: architecture/free-threading.md matrix (otl-http ✅), architecture/instruments.md (api/sdk/exporter guards + protocol selection), user config reference, 1.3.0 release note; cleared the OTLP-http deferral.

Support matrix (ft)

Surface 3.13t 3.14t
otl (gRPC exporter) ❌ (grpcio, no ft wheels)
otl-http (HTTP exporter)

Testing

  • TDD; just test 215 passed, 100% coverage (both exporter-construction branches now covered by tests — the old # pragma: no cover is gone; no new pragma/ignore). just lint-ci clean.
  • Real verification: otl-http installs (no grpcio) and scripts/ft_smoke.py passes on 3.13t and 3.14t.
  • Independent Opus review (backward-compat checked against importlib.metadata): ready to merge.

🤖 Generated with Claude Code

lesnik512 and others added 4 commits July 19, 2026 11:22
Add an opentelemetry_exporter_protocol config (grpc|http, default grpc) and an
otl-http extra (opentelemetry-exporter-otlp-proto-http, no grpcio) so OTLP trace
export works on free-threaded Python; repoint otl to the grpc exporter package.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…xtra

Add opentelemetry_exporter_protocol (default grpc, unchanged behavior) and a
grpcio-free otl-http extra (opentelemetry-exporter-otlp-proto-http) so OTLP
trace export works on free-threaded Python. bootstrap() picks the aliased
exporter by protocol and warns naming the right extra when it is absent; the
insecure warning is gRPC-only. otl now pulls the grpc exporter package directly.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Install otl-http on both ft legs and have ft_smoke.py bootstrap a
protocol=http OpenTelemetryInstrument (grpc/grpcio stays absent). Verified on
real 3.13t and 3.14t interpreters.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add otl-http to the free-threading matrix, document the api/sdk/exporter guards
plus protocol selection in instruments.md, clear the OTLP-http deferral, and note
it in 1.3.0.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@lesnik512
lesnik512 merged commit 31f79b3 into main Jul 19, 2026
10 checks passed
@lesnik512
lesnik512 deleted the otlp-http-exporter branch July 19, 2026 09:27
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