Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Versioning and Stability for OpenTelemetry #1291

Merged
merged 48 commits into from
Jan 20, 2021
Merged
Show file tree
Hide file tree
Changes from 23 commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
73a96eb
Versioning and support based on OTEP 143
tedsuo Dec 14, 2020
a36b18d
Add high level architecture to overview
tedsuo Dec 14, 2020
f84976a
Add signals and user roles to glossary
tedsuo Dec 14, 2020
1c122f3
avoid duplicate headers
tedsuo Dec 14, 2020
b68b637
clarify relationship between version numbers
tedsuo Dec 16, 2020
5fa51fa
spelling
tedsuo Dec 16, 2020
08fba57
clarify API and contrib packages
tedsuo Dec 16, 2020
2046ed9
Change required component order for stability
tedsuo Dec 16, 2020
6ea2be3
clarify contrib packages
tedsuo Dec 16, 2020
f6c6c32
clarify sdk public interfaces
tedsuo Dec 16, 2020
d1e260e
Add constructor and SDK plugin to the glossary
tedsuo Dec 17, 2020
87e362a
spelling
tedsuo Dec 17, 2020
45fb639
add examples of signals
tedsuo Dec 17, 2020
cca55d0
Simplify the wording of the ABI recomendation
tedsuo Dec 17, 2020
25f1b47
clarify that these are documents, not proposals
tedsuo Dec 17, 2020
83163b8
clarify that contrib packages may break when downstream is instable
tedsuo Dec 17, 2020
bc5dfc0
clarify that new packages should be created, rather than breaking old…
tedsuo Dec 17, 2020
1f9f5aa
lint
tedsuo Dec 17, 2020
4a5f5f7
remove MD filetype from VERSIONING document description
tedsuo Dec 21, 2020
afc39ca
replace vague termilology with more specific laguage
tedsuo Dec 21, 2020
d50eb58
clarify definition of contrib packages
tedsuo Dec 21, 2020
aa6a7ed
clarify contrib stability
tedsuo Dec 21, 2020
c95156e
clarify major version bumps
tedsuo Dec 21, 2020
121cea4
spelling/grammar
tedsuo Dec 21, 2020
9df95ff
update overview TOC
tedsuo Dec 22, 2020
86e8601
replace "language library" with "OpenTelemetry Client"
tedsuo Dec 22, 2020
6c83986
spelling
tedsuo Dec 22, 2020
64fdaa7
OTLP is real now
tedsuo Dec 22, 2020
edef5a8
language libraries -> OpenTelemetry Clients
tedsuo Dec 22, 2020
a1e802c
update library guidelines
tedsuo Dec 22, 2020
2242b3e
must -> may
tedsuo Dec 22, 2020
d361df9
grammar
tedsuo Dec 22, 2020
d1c8dd7
link to glossary
tedsuo Dec 22, 2020
ad4b7e6
semantics are for more than cloud computing
tedsuo Dec 22, 2020
df10850
Add formatting and glossary links
tedsuo Dec 22, 2020
cb4a86a
telemetry stability is not defined
tedsuo Dec 22, 2020
3d5f516
Define ABI compatibility
tedsuo Dec 22, 2020
379066f
merge sections on sematic conventions
tedsuo Dec 22, 2020
8d0b4a4
SDK clarification
tedsuo Dec 22, 2020
21ab3ae
grammamatical fixes
tedsuo Jan 5, 2021
71cc619
clarify that ABI conpatibility is optional
tedsuo Jan 5, 2021
ef740b8
remove stability for conventions
tedsuo Jan 15, 2021
751db94
consolidate and clarify lifecycle stages
tedsuo Jan 19, 2021
bc75340
remove reference to a unified API
tedsuo Jan 19, 2021
ffa321f
cleaning up, final small text changes
tedsuo Jan 19, 2021
3d06f37
Add to versioning to the ToC
tedsuo Jan 20, 2021
ec5b8cc
Update changelog
tedsuo Jan 20, 2021
bb808c7
Merge branch 'master' into versioning
carlosalberto Jan 20, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added internal/img/api-lifecycle.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added internal/img/architecture.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added internal/img/long-term-support.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
38 changes: 37 additions & 1 deletion specification/glossary.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,13 @@ Some other fundamental terms are documented in the [overview document](overview.

<!-- toc -->

- [User Roles](#user-roles)
* [Application Owner](#application-owner)
* [Library Author](#library-author)
* [Instrumentation Author](#instrumentation-author)
* [Plugin Author](#plugin-author)
- [Common](#common)
* [Signals](#signals)
* [In-band and Out-of-band Data](#in-band-and-out-of-band-data)
* [Telemetry SDK](#telemetry-sdk)
* [Exporter Library](#exporter-library)
Expand All @@ -26,8 +32,30 @@ Some other fundamental terms are documented in the [overview document](overview.

<!-- tocstop -->

## User Roles
tedsuo marked this conversation as resolved.
Show resolved Hide resolved

### Application Owner

The maintainer of an application or service, responsible for configuring and managing the lifecycle of the OpenTelemetry SDK.

### Library Author

The maintainer of a shared library which is depended upon by many applications, and targeted by OpenTelemetry instrumentation.

### Instrumentation Author

The maintainer of OpenTelemetry instrumentation written against the OpenTelemetry API. This may be instrumentation written within application code, within a shared library, or within an instrumentation library.

### Plugin Author

The maintainer of an OpenTelemetry SDK Plugin, written against OpenTelemetry SDK plugin interfaces.

## Common

### Signals

OpenTelemetry is structured around signals, or categories of telemetry. Metrics, logs, traces, and baggage are examples of signals. Each signal represents a coherent, stand-alone set of functionality. Each signal follows a separate lifecycle defining its current stability level.

<a name="in-band"></a>
<a name="out-of-band"></a>

Expand All @@ -54,9 +82,17 @@ Denotes the library that implements the *OpenTelemetry API*.
See [Library Guidelines](library-guidelines.md#sdk-implementation) and
[Library resource semantic conventions](resource/semantic_conventions/README.md#telemetry-sdk).

### Constructors

Constructors are public code used by Application Owners to initialize and configure the OpenTelemetry SDK and contrib packages. Examples of constructors include configuration objects, environment variables, and builders.

### SDK Plugins

Plugins are libraries which extend the OpenTelemetry SDK Examples of plugin interfaces include the `SpanProcessor`, `Exporter`, and `Sampler` interfaces.
tedsuo marked this conversation as resolved.
Show resolved Hide resolved

### Exporter Library

Libraries which are compatible with the [Telemetry SDK](#telemetry-sdk) and provide functionality to emit telemetry to consumers.
Exporters are SDK Plugins which implement the `Exporter` interface, and emit telemetry to consumers.

### Instrumented Library

Expand Down
55 changes: 46 additions & 9 deletions specification/overview.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,11 @@ Table of Contents

<!-- toc -->

- [OpenTelemetry Architecture](#opentelemetry-architecture)
* [API](#api)
* [SDK](#sdk)
* [Semantics](#semantics)
* [Contrib Packages](#contrib-packages)
- [Distributed Tracing](#distributed-tracing)
* [Trace](#trace)
* [Span](#span)
Expand All @@ -33,12 +38,43 @@ Table of Contents

</details>

This document provides an overview of the pillars of telemetry that
OpenTelemetry supports and defines important fundamental terms.
This document provides an overview of the OpenTelemetry project and defines important fundamental terms.

Additional term definitions can be found in the [glossary](glossary.md).

## Distributed Tracing
## OpenTelemetry Client Architecture
tedsuo marked this conversation as resolved.
Show resolved Hide resolved

![Cross cutting concerns](../internal/img/architecture.png)

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 provides a mechanism for software to describe itself. A codebase, such as web framework or a database client, takes a dependency on various signals in order to describe itself. OpenTelemetry instrumentation code is then mixed into the other code within that codebase. This makes OpenTelemetry a **cross-cutting concern** - a piece of software which must be mixed into many other pieces of software in order to provide value. Cross-cutting concerns, by their very nature, violate a core design principle – separation of concerns. As a result, OpenTelemetry client design requires extra care and attention to avoid creating issues for the codebase which depend upon these cross-cutting APIs.
tedsuo marked this conversation as resolved.
Show resolved Hide resolved

OpenTelemetry clients are designed to separate the portion of each signal which must be imported as cross-cutting concerns from the portions which can be managed independently. OpenTelemetry clients are also designed to be an extensible framework. To accomplish this these goals, each signal consists of four types of packages.

### API

API packages consist of the cross-cutting public interfaces used for instrumentation. Any portion of an OpenTelemetry client which imported into 3rd-party libraries and application code is considered part of the API. To manage different levels of stability, every signal has its own, independent API package. Stable APIs may then be bundled up into a unified API which provides additional convenience methods.
tedsuo marked this conversation as resolved.
Show resolved Hide resolved

### SDK

The implementation of the API. The SDK is managed by the application owner. Note that the SDK includes additional public interfaces which are not considered part of the API package, as they are not cross-cutting concerns. These public interfaces are defined as **constructors** and **plugin interfaces**. Examples of plugin interfaces include the `SpanProcessor`, `Exporter`, and `Sampler` interfaces. Examples of constructors include **configuration objects**, **environment variables**, and **SDK builders**. Application owners use the SDK constructors; plugin authors use the SDK plugin interfaces. Instrumentation authors must never directly reference any SDK package of any kind, only the API.
tedsuo marked this conversation as resolved.
Show resolved Hide resolved

### Semantics

The **Semantic Conventions** define the keys and values which describe commonly observed concepts and operations within cloud computing. See details [below](#semantic-conventions).
tedsuo marked this conversation as resolved.
Show resolved Hide resolved

### Contrib Packages

The OpenTelemetry project maintains integrations with popular OSS projects which have been identified as important for observing modern web services. Example API integrations include instrumentation for web frameworks, database clients, and message queues. Example SDK integrations include plugins for exporting telemetry to popular analysis tools and telemetry storage systems.

Some plugins, such as OTLP Exporters and TraceContext Propagators, are required by the OpenTelemetry specification. These required plugins are included as part of the SDK.

Plugins and instrumentation packages which are optional and separate from the SDK are referred to as **Contrib** packages. **API Contrib** refers to packages which depend solely upon the API; **SDK Contrib** refers to packages which also depend upon the SDK.

The term Contrib specifically refers to the collection of plugins and instrumentation maintained by the OpenTelemetry project; it does not refer to third party plugins hosted elsewhere.
tedsuo marked this conversation as resolved.
Show resolved Hide resolved

## 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. A
Expand All @@ -48,7 +84,7 @@ to start an action on a website - in this example, the trace will represent
calls made between the downstream services that handled the chain of requests
initiated by this button being pressed.

### Trace
### Traces

**Traces** in OpenTelemetry are defined implicitly by their **Spans**. In
particular, a **Trace** can be thought of as a directed acyclic graph (DAG) of
Expand Down Expand Up @@ -86,9 +122,10 @@ Temporal relationships between Spans in a single Trace
[Span E·······] [Span F··]
```

### Span
### Spans

Each **Span** encapsulates the following state:
A span represents an operation within a transaction. Each **Span** encapsulates
the following state:

- An operation name
- A start and finish timestamp
Expand Down Expand Up @@ -149,7 +186,7 @@ represents a single parent scenario, in many cases the parent **Span** fully
encloses the child **Span**. This is not the case in scatter/gather and batch
scenarios.

## Metrics
## Metric Signal

OpenTelemetry allows to record raw measurements or metrics with predefined
aggregation and set of labels.
Expand Down Expand Up @@ -224,14 +261,14 @@ validation and sanitization of the Metrics data. Instead, pass the data to the
backend, rely on the backend to perform validation, and pass back any errors
from the backend.

## Logs
## Log Signal

### Data model

[Log Data Model](logs/data-model.md) defines how logs and events are understood by
OpenTelemetry.

## Baggage
## Baggage Signal

In addition to trace propagation, OpenTelemetry provides a simple mechanism for propagating
name/value pairs, called `Baggage`. `Baggage` is intended for
Expand Down
Loading