Skip to content

feat: add OpenTelemetry distributed tracing#92

Merged
paullatzelsperger merged 10 commits into
mainfrom
feat/add_otel_traces
Apr 13, 2026
Merged

feat: add OpenTelemetry distributed tracing#92
paullatzelsperger merged 10 commits into
mainfrom
feat/add_otel_traces

Conversation

@paullatzelsperger
Copy link
Copy Markdown
Contributor

@paullatzelsperger paullatzelsperger commented Apr 10, 2026

Summary

Adds end-to-end OpenTelemetry (OTel) distributed tracing across the CFM service mesh.

  • Global OTel provider: Replaced assembly-based telemetry with a SetupTelemetry() helper in common/runtime that configures the global OTel provider; components obtain tracers via otel.GetTracerProvider() with standardized cfm.<component> names
  • Trace propagation via NATS: Inject/extract W3C TraceContext headers on NATS publish/consume using a natsHeaderCarrier TextMapCarrier, maintaining trace continuity across async message boundaries
  • Agent spans: Added spans to EDC, onboarding, registration, and keycloak agent activities (deploy, credential request/check, holder creation, confidential client provisioning)
  • HTTP client instrumentation: Wrapped outbound HTTP transport with otelhttp for automatic trace propagation on all external calls; all HTTP requests are bound to a context.Context to enable this
  • Trace continuity across reschedules: Restores trace context from orchestration processing data before starting new spans so rescheduled activities remain part of the original trace

adding metrics and logs will come in a subsequent PR

🤖 Generated with Claude Code

paullatzelsperger and others added 10 commits April 8, 2026 07:49
…agent spans

- Inject/extract W3C TraceContext headers on NATS publish/consume in natsclient
- Add natsHeaderCarrier TextMapCarrier implementation for NATS headers
- Add spans to keycloak ProcessDeploy and provisionConfidentialClient
- Initialize TracerProvider in keycloak launcher
- Wire tracer from registry into pmanager and tmanager provision handlers
- Export TelemetryServiceAssembly type, switch to WithBatcher, use semconv
- Remove common/runtime/telemetry.go (superseded by common/telemetry/assembly.go)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…setup

Remove TelemetryServiceAssembly and the TracerProviderKey service registry
dependency in favor of a SetupTelemetry() helper in common/runtime that
configures the global OpenTelemetry provider. Components now obtain tracers
via otel.GetTracerProvider() instead of resolving from the service registry,
eliminating explicit tracer injection across handlers, NATS clients, and agents.
Tracer names standardized to cfm.<component> convention.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…tion

- Add tracer to EDCVActivityProcessor with spans for deploy, IdentityHub, and control plane operations
- Add spans to onboarding activity for credential request and check flows
- Add span to registration activity for holder creation
- Wrap HTTP client transport with otelhttp for automatic outbound trace propagation
- Restore trace context from orchestration processing data before starting new spans to maintain trace continuity across rescheduled activities

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@paullatzelsperger paullatzelsperger marked this pull request as ready for review April 10, 2026 09:19
@paullatzelsperger paullatzelsperger requested review from jimmarino and wolf4ood and removed request for wolf4ood April 10, 2026 09:19
@paullatzelsperger paullatzelsperger merged commit a30b415 into main Apr 13, 2026
6 checks passed
@paullatzelsperger paullatzelsperger deleted the feat/add_otel_traces branch April 13, 2026 10:06
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.

2 participants