# OpenTelemetry Overview > Source: https://raw.githubusercontent.com/open-telemetry/opentelemetry-specification/main/specification/overview.md > Downloaded: 2026-06-07 This document provides an overview of the OpenTelemetry project and defines important fundamental terms. ## OpenTelemetry Client Architecture At the highest architectural level, OpenTelemetry clients are organized into **signals**. Each signal provides a specialized form of observability. For example, tracing, metrics, and baggage are three separate signals. Signals share a common subsystem – **context propagation** – but they function independently from each other. Each signal consists of four types of packages: API, SDK, Semantic Conventions, and Contrib. ### API API packages consist of the cross-cutting public interfaces used for instrumentation. Any portion of an OpenTelemetry client which is imported into third-party libraries and application code is considered part of the API. ### SDK The SDK is the implementation of the API provided by the OpenTelemetry project. Within an application, the SDK is installed and managed by the application owner. ### Semantic Conventions The **Semantic Conventions** define the keys and values which describe commonly observed concepts, protocols, and operations used by applications. Semantic Conventions are now located in their own repository: https://github.com/open-telemetry/semantic-conventions ### Contrib Packages The OpenTelemetry project maintains integrations with popular OSS projects. **API Contrib** refers to packages which depend solely upon the API; **SDK Contrib** refers to packages which also depend upon the SDK. ## Tracing Signal A distributed trace is a set of events, triggered as a result of a single logical operation, consolidated across various components of an application. ### Traces **Traces** in OpenTelemetry are defined implicitly by their **Spans**. A **Trace** can be thought of as a directed acyclic graph (DAG) of **Spans**, where the edges between **Spans** are defined as parent/child relationship. ``` Causal relationships between Spans in a single Trace [Span A] (the root span) | +------+------+ | | [Span B] [Span C] | | [Span D] +---+-------+ | | [Span E] [Span F] ``` ### Spans A span represents an operation within a transaction. Each **Span** encapsulates: - An operation name - A start and finish timestamp - **Attributes**: A list of key-value pairs - A set of zero or more **Events** - Parent's **Span** identifier - **Links** to zero or more causally-related **Spans** - **SpanContext** information ### SpanContext Represents all the information that identifies **Span** in the **Trace**: - **TraceId** - 16 randomly generated bytes, worldwide unique - **SpanId** - 8 randomly generated bytes, globally unique - **TraceFlags** - 1 byte bitmap (includes sampling bit) - **Tracestate** - tracing-system specific context in key-value pairs ## Metric Signal OpenTelemetry allows recording raw measurements or metrics with predefined aggregations and a set of attributes. ### Instruments Instruments are used to report `Measurement`s, identified by a name, kind, description, and unit of values. Types include counters, gauges, and histograms. Instruments can be synchronous or asynchronous. ## Log Signal ### Data model [Log Data Model](logs/data-model.md) defines how logs and events are understood by OpenTelemetry. ## Baggage Signal OpenTelemetry provides a simple mechanism for propagating name/value pairs, called `Baggage`. `Baggage` is intended for indexing observability events in one service with attributes provided by a prior service in the same transaction. ## Resources `Resource` captures information about the entity for which telemetry is recorded. For example, metrics exposed by a Kubernetes container can be linked to a resource that specifies the cluster, namespace, pod, and container name. ## Context Propagation All of OpenTelemetry cross-cutting concerns share an underlying `Context` mechanism for storing state and accessing data across the lifespan of a distributed transaction. ## Propagators OpenTelemetry uses `Propagators` to serialize and deserialize cross-cutting concern values such as `Span`s and `Baggage`. The Propagators API currently defines one `Propagator` type: - `TextMapPropagator` injects values into and extracts values from carriers as text. ## Collector The OpenTelemetry Collector is a set of components that can collect traces, metrics and other telemetry data from processes instrumented by OpenTelemetry or other monitoring/tracing libraries (Jaeger, Prometheus, etc.), do aggregation and smart sampling, and export traces and metrics to one or more monitoring/tracing backends. The OpenTelemetry Collector has two primary modes of operation: **Agent** (a daemon running locally with the application) and **Collector** (a standalone running service). ## Instrumentation Libraries A library that enables OpenTelemetry observability for another library is called an **Instrumentation Library**. For instrumentation hosted in OpenTelemetry repositories, the recommendation is to prefix packages with "opentelemetry-instrumentation", followed by the instrumented library name. Examples: * opentelemetry-instrumentation-flask (Python) * @opentelemetry/instrumentation-grpc (JavaScript)