The three signals

OTel covers traces (request-spanning timelines), metrics (numbers over time), and logs (text events). All three share a common context (trace_id, span_id) so you can pivot between them. This is the killer feature versus legacy stacks.

Advertisement

Instrumentation: auto + manual

Auto-instrumentation: drop in a library, common frameworks emit traces with zero code (Flask, Django, Express, Spring). Manual: wrap your own business logic with tracer.start_as_current_span(). Start with auto, add manual for the 5% of code that matters most.

Advertisement

The Collector

Standalone binary that receives OTLP from your apps, processes (sampling, attribute editing, batching), exports to any backend. Run as sidecar per pod (low overhead, simple) or as a fleet of dedicated nodes (better aggregation, more complex). Sidecar wins for < 100 services.