# open-telemetry/opentelemetry-rust architecture

> Architecture diagram of the GitHub repository open-telemetry/opentelemetry-rust, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/open-telemetry/opentelemetry-rust
- Repository: https://github.com/open-telemetry/opentelemetry-rust

## Overview

OpenTelemetry Rust is a multi-crate observability implementation: applications instrument code through shared APIs, SDKs collect and process logs, metrics, and traces, and exporters deliver telemetry to backends or stdout. The API also provides context, baggage, and propagation; logging appenders bridge existing logging frameworks. The README documents the major exporter and signal capabilities, but most implementation files were not sampled, so edges between internal stages are limited to relationships it explicitly describes.

Main entry points: [`opentelemetry-otlp/src/lib.rs`](https://github.com/open-telemetry/opentelemetry-rust/blob/main/opentelemetry-otlp/src/lib.rs) (OTLP Exporter), [`opentelemetry-sdk/src/metrics/pipeline.rs`](https://github.com/open-telemetry/opentelemetry-rust/blob/main/opentelemetry-sdk/src/metrics/pipeline.rs) (Metrics SDK), [`opentelemetry-sdk/src/logs/logger.rs`](https://github.com/open-telemetry/opentelemetry-rust/blob/main/opentelemetry-sdk/src/logs/logger.rs) (Logs SDK), [`opentelemetry-stdout/src/logs/exporter.rs`](https://github.com/open-telemetry/opentelemetry-rust/blob/main/opentelemetry-stdout/src/logs/exporter.rs) (Stdout Exporters)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["Instrumentation APIs"]
  node_api_core["Shared API<br/>[common.rs]"]
  node_context["Context and Baggage<br/>[context.rs]"]
  node_trace_api["Tracing API<br/>[context.rs]"]
  node_metrics_api["Metrics API<br/>[counter.rs]"]
  node_propagation["Propagation API"]
end

subgraph group_sdk["Telemetry SDK"]
  node_logs_sdk["Logs SDK<br/>[logger.rs]"]
  node_metrics_sdk["Metrics SDK<br/>[pipeline.rs]"]
  node_traces_sdk["Traces SDK<br/>[span_processor.rs]"]
  node_sdk_propagation["SDK Propagators<br/>[trace_context.rs]"]
  node_resource["Resource Metadata<br/>[mod.rs]"]
end

subgraph group_export["Exporters"]
  node_otlp["OTLP Exporter<br/>[lib.rs]"]
  node_otlp_logs["OTLP Logs<br/>[logs.rs]"]
  node_otlp_metrics["OTLP Metrics<br/>[metric.rs]"]
  node_otlp_traces["OTLP Traces<br/>[span.rs]"]
  node_otlp_retry["Retry Policy<br/>[retry.rs]"]
  node_prometheus["Prometheus Exporter<br/>[lib.rs]"]
  node_stdout["Stdout Exporters<br/>[exporter.rs]"]
  node_http_utils["HTTP Utilities<br/>[lib.rs]"]
end

subgraph group_bridge["Logging Bridges"]
  node_log_bridge["Log Appender<br/>[lib.rs]"]
  node_tracing_bridge["Tracing Appender<br/>[layer.rs]"]
end

subgraph group_conventions["Conventions"]
  node_semantic_attributes["Attribute Conventions<br/>[attribute.rs]"]
  node_semantic_metrics["Metric Conventions<br/>[metric.rs]"]
  node_semantic_traces["Trace Conventions<br/>[trace.rs]"]
end

node_application(("Application"))
node_logging_frameworks(("Logging Frameworks"))
node_backends(("Telemetry Backends"))
node_console(("Console Output"))
node_prometheus_service(("Prometheus"))

node_application -->|"instruments with"| node_api_core
node_application -->|"carries context"| node_context
node_application -->|"creates spans"| node_trace_api
node_application -->|"records measures"| node_metrics_api
node_api_core -.->|"uses SDK"| node_logs_sdk
node_trace_api -.->|"uses SDK"| node_traces_sdk
node_metrics_api -->|"aggregates measures"| node_metrics_sdk
node_context -.->|"shares context"| node_propagation
node_propagation -.->|"implements propagation"| node_sdk_propagation
node_metrics_sdk -->|"exports metrics"| node_prometheus
node_prometheus -->|"serves metrics"| node_prometheus_service
node_logs_sdk -->|"exports logs"| node_otlp
node_metrics_sdk -->|"exports metrics"| node_otlp
node_traces_sdk -->|"exports traces"| node_otlp
node_otlp -->|"supports logs"| node_otlp_logs
node_otlp -->|"supports metrics"| node_otlp_metrics
node_otlp -->|"supports traces"| node_otlp_traces
node_otlp -->|"sends OTLP"| node_backends
node_otlp -.->|"retries failures"| node_otlp_retry
node_logs_sdk -->|"exports logs"| node_stdout
node_metrics_sdk -->|"exports metrics"| node_stdout
node_traces_sdk -->|"exports traces"| node_stdout
node_stdout -->|"writes telemetry"| node_console
node_logging_frameworks -->|"bridges log events"| node_log_bridge
node_logging_frameworks -->|"bridges log events"| node_tracing_bridge
node_log_bridge -->|"routes logs"| node_logs_sdk
node_tracing_bridge -->|"routes logs"| node_logs_sdk
node_metrics_sdk -.->|"attaches metadata"| node_resource
node_application -.->|"uses conventions"| node_semantic_attributes
node_application -.->|"uses conventions"| node_semantic_metrics
node_application -.->|"uses conventions"| node_semantic_traces

click node_api_core "https://github.com/open-telemetry/opentelemetry-rust/blob/main/opentelemetry/src/common.rs"
click node_context "https://github.com/open-telemetry/opentelemetry-rust/blob/main/opentelemetry/src/context.rs"
click node_trace_api "https://github.com/open-telemetry/opentelemetry-rust/blob/main/opentelemetry/src/trace/context.rs"
click node_metrics_api "https://github.com/open-telemetry/opentelemetry-rust/blob/main/opentelemetry/src/metrics/instruments/counter.rs"
click node_propagation "https://github.com/open-telemetry/opentelemetry-rust/blob/main/opentelemetry/src/propagation/text_map_propagator.rs"
click node_logs_sdk "https://github.com/open-telemetry/opentelemetry-rust/blob/main/opentelemetry-sdk/src/logs/logger.rs"
click node_metrics_sdk "https://github.com/open-telemetry/opentelemetry-rust/blob/main/opentelemetry-sdk/src/metrics/pipeline.rs"
click node_traces_sdk "https://github.com/open-telemetry/opentelemetry-rust/blob/main/opentelemetry-sdk/src/trace/span_processor.rs"
click node_sdk_propagation "https://github.com/open-telemetry/opentelemetry-rust/blob/main/opentelemetry-sdk/src/propagation/trace_context.rs"
click node_resource "https://github.com/open-telemetry/opentelemetry-rust/blob/main/opentelemetry-sdk/src/resource/mod.rs"
click node_otlp "https://github.com/open-telemetry/opentelemetry-rust/blob/main/opentelemetry-otlp/src/lib.rs"
click node_otlp_logs "https://github.com/open-telemetry/opentelemetry-rust/blob/main/opentelemetry-otlp/src/logs.rs"
click node_otlp_metrics "https://github.com/open-telemetry/opentelemetry-rust/blob/main/opentelemetry-otlp/src/metric.rs"
click node_otlp_traces "https://github.com/open-telemetry/opentelemetry-rust/blob/main/opentelemetry-otlp/src/span.rs"
click node_otlp_retry "https://github.com/open-telemetry/opentelemetry-rust/blob/main/opentelemetry-otlp/src/retry.rs"
click node_prometheus "https://github.com/open-telemetry/opentelemetry-rust/blob/main/opentelemetry-prometheus/src/lib.rs"
click node_stdout "https://github.com/open-telemetry/opentelemetry-rust/blob/main/opentelemetry-stdout/src/logs/exporter.rs"
click node_http_utils "https://github.com/open-telemetry/opentelemetry-rust/blob/main/opentelemetry-http/src/lib.rs"
click node_log_bridge "https://github.com/open-telemetry/opentelemetry-rust/blob/main/opentelemetry-appender-log/src/lib.rs"
click node_tracing_bridge "https://github.com/open-telemetry/opentelemetry-rust/blob/main/opentelemetry-appender-tracing/src/layer.rs"
click node_semantic_attributes "https://github.com/open-telemetry/opentelemetry-rust/blob/main/opentelemetry-semantic-conventions/src/attribute.rs"
click node_semantic_metrics "https://github.com/open-telemetry/opentelemetry-rust/blob/main/opentelemetry-semantic-conventions/src/metric.rs"
click node_semantic_traces "https://github.com/open-telemetry/opentelemetry-rust/blob/main/opentelemetry-semantic-conventions/src/trace.rs"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_api_core,node_context,node_trace_api,node_metrics_api,node_propagation toneBlue
class node_logs_sdk,node_metrics_sdk,node_traces_sdk,node_sdk_propagation,node_resource toneAmber
class node_otlp,node_otlp_logs,node_otlp_metrics,node_otlp_traces,node_otlp_retry,node_prometheus,node_stdout,node_http_utils toneMint
class node_log_bridge,node_tracing_bridge toneRose
class node_semantic_attributes,node_semantic_metrics,node_semantic_traces,node_application,node_logging_frameworks,node_backends,node_console,node_prometheus_service toneIndigo
```

## Components

### Instrumentation APIs

- [Shared API](https://github.com/open-telemetry/opentelemetry-rust/blob/main/opentelemetry/src/common.rs): `opentelemetry/src/common.rs`
- [Context and Baggage](https://github.com/open-telemetry/opentelemetry-rust/blob/main/opentelemetry/src/context.rs): `opentelemetry/src/context.rs`
- [Tracing API](https://github.com/open-telemetry/opentelemetry-rust/blob/main/opentelemetry/src/trace/context.rs): `opentelemetry/src/trace/context.rs`
- [Metrics API](https://github.com/open-telemetry/opentelemetry-rust/blob/main/opentelemetry/src/metrics/instruments/counter.rs): `opentelemetry/src/metrics/instruments/counter.rs`
- [Propagation API](https://github.com/open-telemetry/opentelemetry-rust/blob/main/opentelemetry/src/propagation/text_map_propagator.rs): `opentelemetry/src/propagation/text_map_propagator.rs`

### Telemetry SDK

- [Logs SDK](https://github.com/open-telemetry/opentelemetry-rust/blob/main/opentelemetry-sdk/src/logs/logger.rs): `opentelemetry-sdk/src/logs/logger.rs`
- [Metrics SDK](https://github.com/open-telemetry/opentelemetry-rust/blob/main/opentelemetry-sdk/src/metrics/pipeline.rs): `opentelemetry-sdk/src/metrics/pipeline.rs`
- [Traces SDK](https://github.com/open-telemetry/opentelemetry-rust/blob/main/opentelemetry-sdk/src/trace/span_processor.rs): `opentelemetry-sdk/src/trace/span_processor.rs`
- [SDK Propagators](https://github.com/open-telemetry/opentelemetry-rust/blob/main/opentelemetry-sdk/src/propagation/trace_context.rs): `opentelemetry-sdk/src/propagation/trace_context.rs`
- [Resource Metadata](https://github.com/open-telemetry/opentelemetry-rust/blob/main/opentelemetry-sdk/src/resource/mod.rs): `opentelemetry-sdk/src/resource/mod.rs`

### Exporters

- [OTLP Exporter](https://github.com/open-telemetry/opentelemetry-rust/blob/main/opentelemetry-otlp/src/lib.rs): `opentelemetry-otlp/src/lib.rs`
- [OTLP Logs](https://github.com/open-telemetry/opentelemetry-rust/blob/main/opentelemetry-otlp/src/logs.rs): `opentelemetry-otlp/src/logs.rs`
- [OTLP Metrics](https://github.com/open-telemetry/opentelemetry-rust/blob/main/opentelemetry-otlp/src/metric.rs): `opentelemetry-otlp/src/metric.rs`
- [OTLP Traces](https://github.com/open-telemetry/opentelemetry-rust/blob/main/opentelemetry-otlp/src/span.rs): `opentelemetry-otlp/src/span.rs`
- [Retry Policy](https://github.com/open-telemetry/opentelemetry-rust/blob/main/opentelemetry-otlp/src/retry.rs): `opentelemetry-otlp/src/retry.rs`
- [Prometheus Exporter](https://github.com/open-telemetry/opentelemetry-rust/blob/main/opentelemetry-prometheus/src/lib.rs): `opentelemetry-prometheus/src/lib.rs`
- [Stdout Exporters](https://github.com/open-telemetry/opentelemetry-rust/blob/main/opentelemetry-stdout/src/logs/exporter.rs): `opentelemetry-stdout/src/logs/exporter.rs`
- [HTTP Utilities](https://github.com/open-telemetry/opentelemetry-rust/blob/main/opentelemetry-http/src/lib.rs): `opentelemetry-http/src/lib.rs`

### Logging Bridges

- [Log Appender](https://github.com/open-telemetry/opentelemetry-rust/blob/main/opentelemetry-appender-log/src/lib.rs): `opentelemetry-appender-log/src/lib.rs`
- [Tracing Appender](https://github.com/open-telemetry/opentelemetry-rust/blob/main/opentelemetry-appender-tracing/src/layer.rs): `opentelemetry-appender-tracing/src/layer.rs`

### Conventions

- [Attribute Conventions](https://github.com/open-telemetry/opentelemetry-rust/blob/main/opentelemetry-semantic-conventions/src/attribute.rs): `opentelemetry-semantic-conventions/src/attribute.rs`
- [Metric Conventions](https://github.com/open-telemetry/opentelemetry-rust/blob/main/opentelemetry-semantic-conventions/src/metric.rs): `opentelemetry-semantic-conventions/src/metric.rs`
- [Trace Conventions](https://github.com/open-telemetry/opentelemetry-rust/blob/main/opentelemetry-semantic-conventions/src/trace.rs): `opentelemetry-semantic-conventions/src/trace.rs`

### Other components

- **Application**
- **Logging Frameworks**
- **Telemetry Backends**
- **Console Output**
- **Prometheus**

## Connections

- Application → Shared API: instruments with (evidence: `README.md`)
- Application → Context and Baggage: carries context (evidence: `README.md`)
- Application → Tracing API: creates spans (evidence: `README.md`)
- Application → Metrics API: records measures (evidence: `README.md`)
- Shared API → Logs SDK: uses SDK
- Tracing API → Traces SDK: uses SDK
- Metrics API → Metrics SDK: aggregates measures (evidence: `README.md`)
- Context and Baggage → Propagation API: shares context
- Propagation API → SDK Propagators: implements propagation
- Metrics SDK → Prometheus Exporter: exports metrics (evidence: `README.md`)
- Prometheus Exporter → Prometheus: serves metrics (evidence: `README.md`)
- Logs SDK → OTLP Exporter: exports logs (evidence: `README.md`)
- Metrics SDK → OTLP Exporter: exports metrics (evidence: `README.md`)
- Traces SDK → OTLP Exporter: exports traces (evidence: `README.md`)
- OTLP Exporter → OTLP Logs: supports logs (evidence: `README.md`)
- OTLP Exporter → OTLP Metrics: supports metrics (evidence: `README.md`)
- OTLP Exporter → OTLP Traces: supports traces (evidence: `README.md`)
- OTLP Exporter → Telemetry Backends: sends OTLP (evidence: `README.md`)
- OTLP Exporter → Retry Policy: retries failures (evidence: `opentelemetry-otlp/src/lib.rs`)
- Logs SDK → Stdout Exporters: exports logs (evidence: `README.md`)
- Metrics SDK → Stdout Exporters: exports metrics (evidence: `README.md`)
- Traces SDK → Stdout Exporters: exports traces (evidence: `README.md`)
- Stdout Exporters → Console Output: writes telemetry (evidence: `README.md`)
- Logging Frameworks → Log Appender: bridges log events (evidence: `README.md`)
- Logging Frameworks → Tracing Appender: bridges log events (evidence: `README.md`)
- Log Appender → Logs SDK: routes logs (evidence: `README.md`)
- Tracing Appender → Logs SDK: routes logs (evidence: `README.md`)
- Metrics SDK → Resource Metadata: attaches metadata
- Application → Attribute Conventions: uses conventions
- Application → Metric Conventions: uses conventions
- Application → Trace Conventions: uses conventions
