Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ The full list of changes can be found in the compare view for the respective rel
### Added

- docs: add response size limitation for HTTP body and gRPC messages. [#781](https://github.com/open-telemetry/opentelemetry-proto/pull/781)
- processcontext: add `ProcessContext` message from OTEP 4719 [#783](https://github.com/open-telemetry/opentelemetry-proto/pull/783)

### Changed

Expand Down
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

## Introduction

Welcome, and thank you for your interest in contributing to the OpenTelemetry Protocol (OTLP) Specification! Your contributions — big or small — are invaluable in shaping and improving this essential part of the OpenTelemetry ecosystem.
Welcome, and thank you for your interest in contributing to OpenTelemetry's protocol definitions! Your contributions — big or small — are invaluable in shaping and improving this essential part of the OpenTelemetry ecosystem.

Whether you are fixing a small issue, updating documentation, or introducing a major improvement, we appreciate your efforts.
If you're new to the project, don't hesitate to ask questions and seek guidance from the community.
Expand Down
4 changes: 2 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -162,10 +162,10 @@ gen-ruby:
$(PROTOC) --ruby_out=./$(PROTO_GEN_RUBY_DIR) --grpc-ruby_out=./$(PROTO_GEN_RUBY_DIR) opentelemetry/proto/collector/logs/v1/logs_service.proto
$(PROTOC) --ruby_out=./$(PROTO_GEN_RUBY_DIR) --grpc-ruby_out=./$(PROTO_GEN_RUBY_DIR) opentelemetry/proto/collector/profiles/v1development/profiles_service.proto

# The Profiling protocol is still development. So it is excluded from the breaking-change check.
# The Profiling and ProcessContext protocols are still development. So they are excluded from the breaking-change check.
.PHONY: breaking-change
breaking-change:
$(BUF) breaking --against $(BUF_AGAINST) --config '{"version":"v1","breaking":{"ignore":["opentelemetry/proto/profiles", "opentelemetry/proto/collector/profiles"]}}' $(BUF_FLAGS)
$(BUF) breaking --against $(BUF_AGAINST) --config '{"version":"v1","breaking":{"ignore":["opentelemetry/proto/profiles", "opentelemetry/proto/collector/profiles", "opentelemetry/proto/processcontext"]}}' $(BUF_FLAGS)


ALL_DOCS := $(shell find . -type f -name '*.md' -not -path './.github/*' -not -path './node_modules/*' | sort)
Expand Down
58 changes: 40 additions & 18 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,23 +1,27 @@
# OpenTelemetry Protocol (OTLP) Specification
# OpenTelemetry Protobuf Definitions

[![Build Check](https://github.com/open-telemetry/opentelemetry-proto/workflows/Build%20Check/badge.svg?branch=main)](https://github.com/open-telemetry/opentelemetry-proto/actions?query=workflow%3A%22Build+Check%22+branch%3Amain)

This repository contains the [OTLP protocol specification](docs/specification.md)
and the corresponding Language Independent Interface Types ([.proto files](opentelemetry/proto)).
This repository contains the protocol buffer definitions for [OTLP](#otlp) (the primary OpenTelemetry data delivery protocol),
and other [Protocols](#protocols) that share its common types and release machinery.

## Language Independent Interface Types
See [contribution guidelines](CONTRIBUTING.md) if you would like to make any changes.

The proto files can be consumed as GIT submodules or copied and built directly in the consumer project.
## Protocols

The compiled files are published to central repositories (Maven, ...) from OpenTelemetry client libraries.
### OTLP

See [contribution guidelines](CONTRIBUTING.md) if you would like to make any changes.
The primary OpenTelemetry data delivery protocol, used to export traces,
metrics, logs, and profiles via gRPC and HTTP.

- Specification: [docs/specification.md](docs/specification.md)
- Proto files: everything under [opentelemetry/proto/](opentelemetry/proto/) except `processcontext/`

## OTLP/JSON
#### OTLP/JSON

See additional requirements for [OTLP/JSON wire representation here](https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/protocol/otlp.md#json-protobuf-encoding).

## Generate gRPC Client Libraries
#### Generate gRPC Client Libraries

To generate the raw gRPC client libraries, use `make gen-${LANGUAGE}`. Currently supported languages are:

Expand All @@ -31,19 +35,37 @@ To generate the raw gRPC client libraries, use `make gen-${LANGUAGE}`. Currently
* python
* ruby

### ProcessContext

A non-OTLP protocol for sharing process-level resource attributes with
external readers (e.g. the [OpenTelemetry eBPF Profiler](https://github.com/open-telemetry/opentelemetry-ebpf-profiler))
via memory-mapped regions. Not exchanged via gRPC, HTTP, or the
OpenTelemetry Collector.

- Documentation: [docs/processcontext.md](docs/processcontext.md)
- Proto file: [opentelemetry/proto/processcontext/v1development/process_context.proto](opentelemetry/proto/processcontext/v1development/process_context.proto)
- Specification: [OTEP 4719](https://github.com/open-telemetry/opentelemetry-specification/blob/main/oteps/profiles/4719-process-ctx.md)

## Language Independent Interface Types

The proto files can be consumed as GIT submodules or copied and built directly in the consumer project.

The compiled files are published to central repositories (Maven, ...) from OpenTelemetry client libraries.

## Maturity Level

1.0.0 and newer releases from this repository may contain unstable (alpha or beta)
components as indicated by the Maturity table below.

| Component | Binary Protobuf Maturity | JSON Maturity |
| --------- | --------------- | ------------- |
| common/* | Stable | [Stable](docs/specification.md#json-protobuf-encoding) |
| resource/* | Stable | [Stable](docs/specification.md#json-protobuf-encoding) |
| metrics/\*<br>collector/metrics/* | Stable | [Stable](docs/specification.md#json-protobuf-encoding) |
| trace/\*<br>collector/trace/* | Stable | [Stable](docs/specification.md#json-protobuf-encoding) |
| logs/\*<br>collector/logs/* | Stable | [Stable](docs/specification.md#json-protobuf-encoding) |
| profiles/\*<br>collector/profiles/* | Development | [Development](docs/specification.md#json-protobuf-encoding) |
| Protocol | Component | Binary Protobuf Maturity | JSON Maturity |
| -------------- | ----------------------------------- | ------------------------ | ----------------------------------------------------------- |
| OTLP | common/* | Stable | [Stable](docs/specification.md#json-protobuf-encoding) |
| OTLP | resource/* | Stable | [Stable](docs/specification.md#json-protobuf-encoding) |
| OTLP | metrics/\*<br>collector/metrics/* | Stable | [Stable](docs/specification.md#json-protobuf-encoding) |
| OTLP | trace/\*<br>collector/trace/* | Stable | [Stable](docs/specification.md#json-protobuf-encoding) |
| OTLP | logs/\*<br>collector/logs/* | Stable | [Stable](docs/specification.md#json-protobuf-encoding) |
| OTLP | profiles/\*<br>collector/profiles/* | Development | [Development](docs/specification.md#json-protobuf-encoding) |
| ProcessContext | processcontext/* | Development | N/A |

(See [Versioning and Stability](https://github.com/open-telemetry/opentelemetry-specification/blob/a08d1f92f62acd4aafe4dfaa04ae7bf28600d49e/specification/versioning-and-stability.md)
for definition of maturity levels).
Expand Down Expand Up @@ -85,7 +107,7 @@ before and after the change interoperate.

## Experiments

### New Experimental Components
### New Experimental Components

Sometimes we need to experiment with new components, for example to add a
completely new signal to OpenTelemetry. When designing a new signal, we
Expand Down
3 changes: 2 additions & 1 deletion docs/README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# OpenTelemetry Protocol (OTLP)

This is the specification of the OpenTelemetry Protocol (OTLP).
This is the specification of the OpenTelemetry Protocol (OTLP). For other
protocols hosted in this repository, see the top-level [README](../README.md).

- [Design Goals](design-goals.md)
- [Requirements](requirements.md)
Expand Down
23 changes: 23 additions & 0 deletions docs/processcontext.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Process Context

**Status:** [Development](https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/document-status.md)

ProcessContext is a non-OTLP protocol for sharing process-level OpenTelemetry
resource attributes with external readers (e.g. the
[OpenTelemetry eBPF Profiler](https://github.com/open-telemetry/opentelemetry-ebpf-profiler)).

This page is a quick orientation; the normative specification lives in
[OTEP 4719][otep].

## Relationship to OTLP

ProcessContext is **not** part of OTLP:

- It is not exchanged via gRPC or HTTP.
- It does not pass through the OpenTelemetry Collector.
- It carries only process-scoped resource attributes, not telemetry data.

It lives in this repository because it shares OTLP's `common` and `resource`
proto types and benefits from the same versioning and release machinery.

[otep]: https://github.com/open-telemetry/opentelemetry-specification/blob/main/oteps/profiles/4719-process-ctx.md
Comment thread
florianl marked this conversation as resolved.
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
// Copyright The OpenTelemetry Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

syntax = "proto3";

package opentelemetry.proto.processcontext.v1development;

import "opentelemetry/proto/common/v1/common.proto";
import "opentelemetry/proto/resource/v1/resource.proto";

option csharp_namespace = "OpenTelemetry.Proto.ProcessContext.V1Development";
option java_multiple_files = true;
option java_package = "io.opentelemetry.proto.processcontext.v1development";
option java_outer_classname = "ProcessContextProto";
option go_package = "go.opentelemetry.io/proto/otlp/processcontext/v1development";

// ProcessContext represents the payload for the process context sharing mechanism.
//
// This message is designed to be published by OpenTelemetry SDKs via a memory-mapped
// region, allowing external readers (such as the OpenTelemetry eBPF Profiler) to
// discover and read resource attributes from instrumented processes without requiring
// direct integration or process activity. It is not part of OTLP and is not
// exchanged via the OpenTelemetry Collector.
//
// See OTEP 4719 for details of this mechanism.
//
// Status: [Development]
message ProcessContext {
// The resource for this process.
// If this field is not set then no resource info is known.
opentelemetry.proto.resource.v1.Resource resource = 1;

// Additional attributes to share with external readers that are not part of
// the standard Resource. [Optional]
//
// This field allows publishers to include supplementary key-value pairs that
// may be useful for external readers but are not part of the SDK's configured
// Resource.
//
// Consider adding any keys here to the profiles semantic conventions in
// https://opentelemetry.io/docs/specs/semconv/general/profiles/
repeated opentelemetry.proto.common.v1.KeyValue attributes = 2;
}