USE when: code imports opentelemetry, @opentelemetry/*, go.opentelemetry.io/otel, or io.opentelemetry; user asks about distributed tracing, spans, trace context, OTLP, OTel Collector, telemetry pipelines, auto-instrumentation, W3C traceparent, span processors, metric counters/histograms/gauges, log bridge API, context propagation, baggage, sampling strategies, or exporter configuration for Jaeger/Prometheus/Zipkin/Tempo/Honeycomb/Datadog. DO NOT USE when: user asks about application-level logging frameworks only (log4j, winston, pino) without OTel integration, APM-vendor-specific SDKs (Datadog dd-trace, New Relic agent) without OTel, or browser-only analytics/RUM unrelated to OpenTelemetry.
OpenTelemetry separates concerns into three layers:
Data flow: [App] → [API] → [SDK] → [Collector] → [Backend]
Traces represent end-to-end request paths through distributed systems.
add(), never negative.record().Propagators serialize/deserialize context across process boundaries via headers.
W3C TraceContext (default, recommended):