init
This commit is contained in:
@@ -0,0 +1,123 @@
|
||||
# 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)
|
||||
Reference in New Issue
Block a user