Skip to content

Commit b4b5118

Browse files
committed
feat: replace OtlpPipeline with exporter builders
1 parent 4852a5e commit b4b5118

File tree

23 files changed

+744
-873
lines changed

23 files changed

+744
-873
lines changed

examples/self-diagnostics/src/main.rs

Lines changed: 23 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
use opentelemetry::global::{self, set_error_handler, Error as OtelError};
22
use opentelemetry::KeyValue;
33
use opentelemetry_appender_tracing::layer;
4-
use opentelemetry_otlp::WithExportConfig;
4+
use opentelemetry_otlp::{LogExporter, MetricExporter, WithExporterConfig};
5+
use opentelemetry_sdk::metrics::PeriodicReader;
56
use tracing_subscriber::filter::{EnvFilter, LevelFilter};
67
use tracing_subscriber::fmt;
78
use tracing_subscriber::prelude::*;
@@ -51,15 +52,16 @@ fn custom_error_handler(err: OtelError) {
5152
}
5253

5354
fn init_logger_provider() -> opentelemetry_sdk::logs::LoggerProvider {
54-
let provider = opentelemetry_otlp::new_pipeline()
55-
.logging()
56-
.with_exporter(
57-
opentelemetry_otlp::new_exporter()
58-
.http()
59-
.with_endpoint("http://localhost:4318/v1/logs"),
60-
)
61-
.install_batch(opentelemetry_sdk::runtime::Tokio)
55+
let exporter = LogExporter::builder()
56+
.with_http()
57+
.with_endpoint("http://localhost:4318/v1/logs")
58+
.build()
6259
.unwrap();
60+
61+
let provider = opentelemetry_sdk::logs::LoggerProvider::builder()
62+
.with_batch_exporter(exporter, opentelemetry_sdk::runtime::Tokio)
63+
.build();
64+
6365
let cloned_provider = provider.clone();
6466

6567
// Add a tracing filter to filter events from crates used by opentelemetry-otlp.
@@ -107,16 +109,20 @@ fn init_logger_provider() -> opentelemetry_sdk::logs::LoggerProvider {
107109
}
108110

109111
fn init_meter_provider() -> opentelemetry_sdk::metrics::SdkMeterProvider {
110-
let provider = opentelemetry_otlp::new_pipeline()
111-
.metrics(opentelemetry_sdk::runtime::Tokio)
112-
.with_period(std::time::Duration::from_secs(1))
113-
.with_exporter(
114-
opentelemetry_otlp::new_exporter()
115-
.http()
116-
.with_endpoint("http://localhost:4318/v1/metrics"),
117-
)
112+
let exporter = MetricExporter::builder()
113+
.with_tonic()
114+
.with_endpoint("http://localhost:4318/v1/metrics")
118115
.build()
119116
.unwrap();
117+
118+
let reader = PeriodicReader::builder(exporter, opentelemetry_sdk::runtime::Tokio)
119+
.with_interval(std::time::Duration::from_secs(1))
120+
.build();
121+
122+
let provider = opentelemetry_sdk::metrics::SdkMeterProvider::builder()
123+
.with_reader(reader)
124+
.build();
125+
120126
let cloned_provider = provider.clone();
121127
global::set_meter_provider(cloned_provider);
122128
provider

examples/tracing-jaeger/src/main.rs

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,27 +4,26 @@ use opentelemetry::{
44
trace::{TraceContextExt, TraceError, Tracer},
55
KeyValue,
66
};
7-
use opentelemetry_otlp::WithExportConfig;
7+
use opentelemetry_sdk::trace::TracerProvider;
88
use opentelemetry_sdk::{runtime, trace as sdktrace, Resource};
99
use opentelemetry_semantic_conventions::resource::SERVICE_NAME;
1010

1111
use std::error::Error;
1212

1313
fn init_tracer_provider() -> Result<opentelemetry_sdk::trace::TracerProvider, TraceError> {
14-
opentelemetry_otlp::new_pipeline()
15-
.tracing()
16-
.with_exporter(
17-
opentelemetry_otlp::new_exporter()
18-
.tonic()
19-
.with_endpoint("http://localhost:4317"),
20-
)
21-
.with_trace_config(
14+
let exporter = opentelemetry_otlp::SpanExporter::builder()
15+
.with_tonic()
16+
.build()?;
17+
18+
Ok(TracerProvider::builder()
19+
.with_batch_exporter(exporter, runtime::Tokio)
20+
.with_config(
2221
sdktrace::Config::default().with_resource(Resource::new(vec![KeyValue::new(
2322
SERVICE_NAME,
2423
"tracing-jaeger",
2524
)])),
2625
)
27-
.install_batch(runtime::Tokio)
26+
.build())
2827
}
2928

3029
#[tokio::main]

opentelemetry-otlp/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ opentelemetry_sdk = { features = ["trace", "rt-tokio", "testing"], path = "../op
5151
tokio = { workspace = true, features = ["macros", "rt-multi-thread"] }
5252
futures-util = { workspace = true }
5353
temp-env = { workspace = true }
54+
pretty_assertions = "1.4.1"
5455

5556
[features]
5657
# telemetry pillars and functions

opentelemetry-otlp/examples/basic-otlp-http/src/main.rs

Lines changed: 41 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,14 @@ use opentelemetry::{
66
KeyValue,
77
};
88
use opentelemetry_appender_tracing::layer::OpenTelemetryTracingBridge;
9-
use opentelemetry_otlp::Protocol;
10-
use opentelemetry_otlp::{HttpExporterBuilder, WithExportConfig};
11-
use opentelemetry_sdk::trace::{self as sdktrace, Config};
9+
use opentelemetry_otlp::WithExporterConfig;
10+
use opentelemetry_otlp::{LogExporter, MetricExporter, Protocol, SpanExporter};
11+
use opentelemetry_sdk::{
12+
logs::LoggerProvider,
13+
metrics::{PeriodicReader, SdkMeterProvider},
14+
runtime,
15+
trace::{self as sdktrace, TracerProvider},
16+
};
1217
use opentelemetry_sdk::{
1318
logs::{self as sdklogs},
1419
Resource,
@@ -18,6 +23,9 @@ use tracing::info;
1823
use tracing_subscriber::prelude::*;
1924
use tracing_subscriber::EnvFilter;
2025

26+
#[cfg(feature = "hyper")]
27+
use opentelemetry_otlp::WithHttpConfig;
28+
2129
#[cfg(feature = "hyper")]
2230
mod hyper;
2331

@@ -28,47 +36,46 @@ static RESOURCE: Lazy<Resource> = Lazy::new(|| {
2836
)])
2937
});
3038

31-
fn http_exporter() -> HttpExporterBuilder {
32-
let exporter = opentelemetry_otlp::new_exporter().http();
39+
fn init_logs() -> Result<sdklogs::LoggerProvider, opentelemetry::logs::LogError> {
40+
let exporter_builder = LogExporter::builder()
41+
.with_http()
42+
.with_endpoint("http://localhost:4318/v1/logs")
43+
.with_protocol(Protocol::HttpBinary);
44+
3345
#[cfg(feature = "hyper")]
34-
let exporter = exporter.with_http_client(hyper::HyperClient::default());
35-
exporter
36-
}
46+
let exporter_builder = exporter_builder.with_http_client(hyper::HyperClient::default());
3747

38-
fn init_logs() -> Result<sdklogs::LoggerProvider, opentelemetry::logs::LogError> {
39-
opentelemetry_otlp::new_pipeline()
40-
.logging()
48+
let exporter = exporter_builder.build()?;
49+
50+
Ok(LoggerProvider::builder()
51+
.with_batch_exporter(exporter, runtime::Tokio)
4152
.with_resource(RESOURCE.clone())
42-
.with_exporter(
43-
http_exporter()
44-
.with_protocol(Protocol::HttpBinary) //can be changed to `Protocol::HttpJson` to export in JSON format
45-
.with_endpoint("http://localhost:4318/v1/logs"),
46-
)
47-
.install_batch(opentelemetry_sdk::runtime::Tokio)
53+
.build())
4854
}
4955

5056
fn init_tracer_provider() -> Result<sdktrace::TracerProvider, TraceError> {
51-
opentelemetry_otlp::new_pipeline()
52-
.tracing()
53-
.with_exporter(
54-
http_exporter()
55-
.with_protocol(Protocol::HttpBinary) //can be changed to `Protocol::HttpJson` to export in JSON format
56-
.with_endpoint("http://localhost:4318/v1/traces"),
57-
)
58-
.with_trace_config(Config::default().with_resource(RESOURCE.clone()))
59-
.install_batch(opentelemetry_sdk::runtime::Tokio)
57+
let exporter = SpanExporter::builder()
58+
.with_http()
59+
.with_protocol(Protocol::HttpBinary) //can be changed to `Protocol::HttpJson` to export in JSON format
60+
.with_endpoint("http://localhost:4318/v1/traces")
61+
.build()?;
62+
Ok(TracerProvider::builder()
63+
.with_batch_exporter(exporter, runtime::Tokio)
64+
.with_resource(RESOURCE.clone())
65+
.build())
6066
}
6167

6268
fn init_metrics() -> Result<opentelemetry_sdk::metrics::SdkMeterProvider, MetricsError> {
63-
opentelemetry_otlp::new_pipeline()
64-
.metrics(opentelemetry_sdk::runtime::Tokio)
65-
.with_exporter(
66-
http_exporter()
67-
.with_protocol(Protocol::HttpBinary) //can be changed to `Protocol::HttpJson` to export in JSON format
68-
.with_endpoint("http://localhost:4318/v1/metrics"),
69-
)
69+
let exporter = MetricExporter::builder()
70+
.with_http()
71+
.with_protocol(Protocol::HttpBinary) //can be changed to `Protocol::HttpJson` to export in JSON format
72+
.with_endpoint("http://localhost:4318/v1/metrics")
73+
.build()?;
74+
75+
Ok(SdkMeterProvider::builder()
76+
.with_reader(PeriodicReader::builder(exporter, runtime::Tokio).build())
7077
.with_resource(RESOURCE.clone())
71-
.build()
78+
.build())
7279
}
7380

7481
#[tokio::main]

opentelemetry-otlp/examples/basic-otlp/src/main.rs

Lines changed: 27 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@ use opentelemetry::{
88
KeyValue,
99
};
1010
use opentelemetry_appender_tracing::layer::OpenTelemetryTracingBridge;
11-
use opentelemetry_otlp::{ExportConfig, WithExportConfig};
11+
use opentelemetry_otlp::{LogExporter, MetricExporter, SpanExporter, WithExporterConfig};
12+
use opentelemetry_sdk::logs::LoggerProvider;
13+
use opentelemetry_sdk::metrics::{PeriodicReader, SdkMeterProvider};
1214
use opentelemetry_sdk::trace::Config;
1315
use opentelemetry_sdk::{runtime, trace as sdktrace, Resource};
1416
use std::error::Error;
@@ -24,43 +26,38 @@ static RESOURCE: Lazy<Resource> = Lazy::new(|| {
2426
});
2527

2628
fn init_tracer_provider() -> Result<sdktrace::TracerProvider, TraceError> {
27-
opentelemetry_otlp::new_pipeline()
28-
.tracing()
29-
.with_exporter(
30-
opentelemetry_otlp::new_exporter()
31-
.tonic()
32-
.with_endpoint("http://localhost:4317"),
33-
)
34-
.with_trace_config(Config::default().with_resource(RESOURCE.clone()))
35-
.install_batch(runtime::Tokio)
29+
let exporter = SpanExporter::builder()
30+
.with_tonic()
31+
.with_endpoint("0.0.0.0:4317")
32+
.build()?;
33+
Ok(sdktrace::TracerProvider::builder()
34+
.with_config(Config::default().with_resource(RESOURCE.clone()))
35+
.with_batch_exporter(exporter, runtime::Tokio)
36+
.build())
3637
}
3738

3839
fn init_metrics() -> Result<opentelemetry_sdk::metrics::SdkMeterProvider, MetricsError> {
39-
let export_config = ExportConfig {
40-
endpoint: "http://localhost:4317".to_string(),
41-
..ExportConfig::default()
42-
};
43-
opentelemetry_otlp::new_pipeline()
44-
.metrics(runtime::Tokio)
45-
.with_exporter(
46-
opentelemetry_otlp::new_exporter()
47-
.tonic()
48-
.with_export_config(export_config),
49-
)
40+
let exporter = MetricExporter::builder().with_tonic().build()?;
41+
42+
let reader = PeriodicReader::builder(exporter, runtime::Tokio).build();
43+
44+
Ok(SdkMeterProvider::builder()
45+
.with_reader(reader)
5046
.with_resource(RESOURCE.clone())
51-
.build()
47+
.build())
5248
}
5349

5450
fn init_logs() -> Result<opentelemetry_sdk::logs::LoggerProvider, LogError> {
55-
opentelemetry_otlp::new_pipeline()
56-
.logging()
51+
let exporter = LogExporter::builder()
52+
.with_tonic()
53+
.with_protocol(opentelemetry_otlp::Protocol::HttpBinary) //can be changed to `Protocol::HttpJson` to export in JSON format
54+
.with_endpoint("http://localhost:4318/v1/logs")
55+
.build()?;
56+
57+
Ok(LoggerProvider::builder()
5758
.with_resource(RESOURCE.clone())
58-
.with_exporter(
59-
opentelemetry_otlp::new_exporter()
60-
.tonic()
61-
.with_endpoint("http://localhost:4317"),
62-
)
63-
.install_batch(runtime::Tokio)
59+
.with_batch_exporter(exporter, runtime::Tokio)
60+
.build())
6461
}
6562

6663
#[tokio::main]

opentelemetry-otlp/src/exporter/http/metrics.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,12 @@ use http::{header::CONTENT_TYPE, Method};
55
use opentelemetry::metrics::{MetricsError, Result};
66
use opentelemetry_sdk::metrics::data::ResourceMetrics;
77

8-
use crate::{metric::MetricsClient, Error};
8+
use crate::{metric::MetricClient, Error};
99

1010
use super::OtlpHttpClient;
1111

1212
#[async_trait]
13-
impl MetricsClient for OtlpHttpClient {
13+
impl MetricClient for OtlpHttpClient {
1414
async fn export(&self, metrics: &mut ResourceMetrics) -> Result<()> {
1515
let client = self
1616
.client

0 commit comments

Comments
 (0)