Adds OTel tracing across the operator without disturbing the existing logging system.
Off by default: activates only when OTEL_EXPORTER_OTLP_ENDPOINT / OTEL_TRACES_EXPORTER is set; OTEL_SDK_DISABLED=true and OTEL_TRACES_EXPORTER=none force off. No collector -> no SDK, no-op spans, byte-identical logs.
Traces: one per reconcile (root span + managed/replace/delete/status.patch sub-spans), per discovery API request (route-named server spans, incoming traceparent honored), per GC sweep; per health probe behind --trace-health-probes (default off, ~1/s/proxy volume).
Child spans: provider calls via a WithTracing decorator (mirrors WithMetrics, reuses the error taxonomy), k8s API calls via a parent-gated otelhttp rest.Config transport (informer watches/leader election never become root spans), GCP HTTP via the SDK's built-in otelhttp transport.
Log correlation: every log line inside a traced operation carries traceID/spanID (lowerCamel, matching reconcileID); nested spans re-derive from a captured base logger so zap never emits duplicate keys. GCP V(5) wire logs are enriched too.
Config: standard OTEL_* env vars (sampler, endpoint, protocol, resource attrs); manifests ship a commented-out example block.
Tests throughout (first use of tracetest in the repo); lint clean vs main (--new-from-rev); full suite green.
Left for a follow-up: CHANGELOG entry once verified live against a collector (verification steps are in the plan).
Adds OTel tracing across the operator without disturbing the existing logging system.
- **Off by default**: activates only when OTEL_EXPORTER_OTLP_ENDPOINT / OTEL_TRACES_EXPORTER is set; OTEL_SDK_DISABLED=true and OTEL_TRACES_EXPORTER=none force off. No collector -> no SDK, no-op spans, byte-identical logs.
- **Traces**: one per reconcile (root span + managed/replace/delete/status.patch sub-spans), per discovery API request (route-named server spans, incoming traceparent honored), per GC sweep; per health probe behind --trace-health-probes (default off, ~1/s/proxy volume).
- **Child spans**: provider calls via a WithTracing decorator (mirrors WithMetrics, reuses the error taxonomy), k8s API calls via a parent-gated otelhttp rest.Config transport (informer watches/leader election never become root spans), GCP HTTP via the SDK's built-in otelhttp transport.
- **Log correlation**: every log line inside a traced operation carries traceID/spanID (lowerCamel, matching reconcileID); nested spans re-derive from a captured base logger so zap never emits duplicate keys. GCP V(5) wire logs are enriched too.
- **Config**: standard OTEL_* env vars (sampler, endpoint, protocol, resource attrs); manifests ship a commented-out example block.
- Tests throughout (first use of tracetest in the repo); lint clean vs main (--new-from-rev); full suite green.
Plan: docs/plans/2026-08-24-1025-otel-tracing.md, execution log: docs/plans-executions/2026-08-24-1025-otel-tracing.md.
Left for a follow-up: CHANGELOG entry once verified live against a collector (verification steps are in the plan).
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Adds OTel tracing across the operator without disturbing the existing logging system.
Plan: docs/plans/2026-08-24-1025-otel-tracing.md, execution log: docs/plans-executions/2026-08-24-1025-otel-tracing.md.
Left for a follow-up: CHANGELOG entry once verified live against a collector (verification steps are in the plan).