CtrlK
BlogDocsLog inGet started
Tessl Logo

otel-migration

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

1.03x
Quality

80%

Does it follow best practices?

Impact

97%

1.03x

Average score across 3 eval scenarios

SecuritybySnyk

Passed

No known issues

Fix and improve this skill with Tessl

tessl review fix ./honeycomb/skills/otel-migration/SKILL.md
SKILL.md
Quality
Evals
Security

Evaluation results

96%

-1%

Adding Distributed Tracing to a Fiber v2 REST API

Fiber v2 context propagation and goroutine span lifecycle

Criteria
Without context
With context

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%

100%

Connecting Existing Go Logging to the OpenTelemetry Pipeline

slog OTel bridge with multi-handler fan-out and structured logging cleanup

Criteria
Without context
With context

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%

97%

12%

Retrofitting OTel into a Go Service with Existing Prometheus Metrics

OTel SDK init with Prometheus bridge preserving /metrics endpoint

Criteria
Without context
With context

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%

Repository
honeycombio/agent-skill
Evaluated
Agent
Claude Code
Model
Claude Sonnet 4.6

Table of Contents

Is this your skill?

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.