Guide for retrofitting OpenTelemetry into an existing, uninstrumented application. Trigger phrases: "migrate existing app to OTel", "add OpenTelemetry to existing project", "retrofit OTel into my codebase", "thread context through my code", "context propagation", "bridge Prometheus metrics to OTel", "logging bridge", "migrate logging to OTel", "slog bridge", "logback bridge", "verify my instrumentation", "traces are disconnected", "orphaned spans", "migrate to OpenTelemetry", "OTel migration plan", "how do I sequence an OTel migration", "add tracing to existing code", "refactor for context propagation", "Fiber context gotcha", "keep existing logging working with OTel", "add OTel without breaking Prometheus", "bridge existing metrics", "coexist with existing monitoring", or any request about retrofitting OpenTelemetry into an existing application. This skill is for migrating existing codebases, NOT greenfield instrumentation (use otel-instrumentation) or Beeline-specific migration (use beeline-migration).
86
80%
Does it follow best practices?
Impact
97%
1.03xAverage score across 3 eval scenarios
Passed
No known issues
Fix and improve this skill with Tessl
tessl review fix ./honeycomb/skills/otel-migration/SKILL.mdFiber v2 context propagation and goroutine span lifecycle
Fiber middleware registered
100%
100%
Uses c.UserContext()
100%
100%
Does NOT use c.Context() for OTel
100%
100%
DB call uses context
100%
87%
Outbound HTTP uses NewRequestWithContext
100%
100%
Child spans use defer span.End()
62%
62%
Goroutine creates new span per tick
100%
100%
Goroutine does NOT reuse parent span
100%
100%
Shutdown order: traces then metrics then logs
100%
100%
Shutdown has a timeout
100%
100%
slog OTel bridge with multi-handler fan-out and structured logging cleanup
Uses otelslog package
100%
100%
Multi-handler fan-out
100%
100%
Stderr handler retained
100%
100%
multiHandler implements slog.Handler
100%
100%
No fmt.Sprintf in slog calls
100%
100%
No printf-style format strings
100%
100%
Structured key-value args
100%
100%
OTel handler uses service name
100%
100%
Default logger replaced
100%
100%
OTel SDK init with Prometheus bridge preserving /metrics endpoint
SDK init before app code
100%
100%
InitTelemetry fails gracefully
44%
100%
Prometheus bridge imported
100%
100%
prombridge.NewMetricProducer used
100%
100%
WithProducer wired to reader
100%
100%
/metrics endpoint preserved
80%
70%
Existing metrics unchanged
100%
100%
Shutdown: traces before metrics
100%
100%
Shutdown: metrics before logs
100%
100%
Shutdown timeout 10-30s
100%
100%
PeriodicReader interval set
0%
100%
53e6bb8
Table of Contents
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.