Skip to content

Commit 61e539f

Browse files
gruebelcijothomas
andauthored
leverage tracer provider to set service name for Zipkin exporter (#2624)
Co-authored-by: Cijo Thomas <[email protected]>
1 parent 420416f commit 61e539f

File tree

9 files changed

+41
-68
lines changed

9 files changed

+41
-68
lines changed

opentelemetry-sdk/src/testing/trace/span_exporters.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,6 @@ impl NoopSpanExporter {
111111
}
112112
}
113113

114-
#[async_trait::async_trait]
115114
impl SpanExporter for NoopSpanExporter {
116115
fn export(&mut self, _: Vec<SpanData>) -> BoxFuture<'static, OTelSdkResult> {
117116
Box::pin(std::future::ready(Ok(())))

opentelemetry-sdk/src/trace/provider.rs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -308,10 +308,8 @@ impl TracerProviderBuilder {
308308
///
309309
/// Processors are invoked in the order they are added.
310310
pub fn with_simple_exporter<T: SpanExporter + 'static>(self, exporter: T) -> Self {
311-
let mut processors = self.processors;
312-
processors.push(Box::new(SimpleSpanProcessor::new(Box::new(exporter))));
313-
314-
TracerProviderBuilder { processors, ..self }
311+
let simple = SimpleSpanProcessor::new(Box::new(exporter));
312+
self.with_span_processor(simple)
315313
}
316314

317315
/// Adds a [BatchSpanProcessor] with the configured exporter to the pipeline.

opentelemetry-zipkin/CHANGELOG.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
- Bump msrv to 1.75.0.
66
- **Breaking** The `opentelemetry_zipkin::new_pipeline()` interface is now replaced with `opentelemetry_zipkin::ZipkinExporter::builder()`.
7+
Additionally, the service name needs to be set on the tracer provider.
78

89
Previous Signature:
910
```rust
@@ -14,10 +15,10 @@
1415
Updated Signature:
1516
```rust
1617
let exporter = ZipkinExporter::builder()
17-
.with_service_name("trace-demo")
1818
.build()?;
19-
let provider = TracerProvider::builder()
19+
let provider = SdkTracerProvider::builder()
2020
.with_simple_exporter(exporter)
21+
.with_service_name("trace-demo")
2122
.build();
2223
global::set_tracer_provider(provider.clone());
2324

opentelemetry-zipkin/Cargo.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ once_cell = { workspace = true }
3030
opentelemetry = { version = "0.27", path = "../opentelemetry" }
3131
opentelemetry_sdk = { version = "0.27", path = "../opentelemetry-sdk", features = ["trace"] }
3232
opentelemetry-http = { version = "0.27", path = "../opentelemetry-http" }
33-
opentelemetry-semantic-conventions = { version = "0.27", path = "../opentelemetry-semantic-conventions" }
3433
serde_json = { workspace = true }
3534
serde = { workspace = true, features = ["derive"] }
3635
typed-builder = "0.18"

opentelemetry-zipkin/examples/zipkin.rs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use opentelemetry::{
33
trace::{Span, TraceError, Tracer},
44
InstrumentationScope, KeyValue,
55
};
6-
use opentelemetry_sdk::trace::SdkTracerProvider;
6+
use opentelemetry_sdk::{trace::SdkTracerProvider, Resource};
77
use opentelemetry_zipkin::ZipkinExporter;
88
use std::thread;
99
use std::time::Duration;
@@ -16,12 +16,15 @@ fn bar() {
1616
}
1717

1818
fn init_traces() -> Result<SdkTracerProvider, TraceError> {
19-
let exporter = ZipkinExporter::builder()
20-
.with_service_name("trace-demo")
21-
.build()?;
19+
let exporter = ZipkinExporter::builder().build()?;
2220

2321
Ok(SdkTracerProvider::builder()
2422
.with_simple_exporter(exporter)
23+
.with_resource(
24+
Resource::builder_empty()
25+
.with_service_name("trace-demo")
26+
.build(),
27+
)
2528
.build())
2629
}
2730

opentelemetry-zipkin/src/exporter/mod.rs

Lines changed: 2 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,7 @@ use model::endpoint::Endpoint;
88
use opentelemetry::trace::TraceError;
99
use opentelemetry_http::HttpClient;
1010
use opentelemetry_sdk::error::OTelSdkResult;
11-
use opentelemetry_sdk::{
12-
resource::{ResourceDetector, SdkProvidedResourceDetector},
13-
trace, ExportError,
14-
};
15-
use opentelemetry_semantic_conventions as semcov;
11+
use opentelemetry_sdk::{trace, ExportError};
1612
use std::net::{AddrParseError, SocketAddr};
1713
use std::sync::Arc;
1814

@@ -40,7 +36,6 @@ impl ZipkinExporter {
4036
/// Builder for `ZipkinExporter` struct.
4137
#[derive(Debug)]
4238
pub struct ZipkinExporterBuilder {
43-
service_name: Option<String>,
4439
service_addr: Option<SocketAddr>,
4540
collector_endpoint: String,
4641
client: Option<Arc<dyn HttpClient>>,
@@ -71,7 +66,6 @@ impl Default for ZipkinExporterBuilder {
7166
))]
7267
client: None,
7368

74-
service_name: None,
7569
service_addr: None,
7670
collector_endpoint: env::get_endpoint(),
7771
}
@@ -83,17 +77,7 @@ impl ZipkinExporterBuilder {
8377
///
8478
/// Returns error if the endpoint is not valid or if no http client is provided.
8579
pub fn build(self) -> Result<ZipkinExporter, TraceError> {
86-
let service_name = if let Some(service_name) = self.service_name {
87-
service_name
88-
} else {
89-
SdkProvidedResourceDetector
90-
.detect()
91-
.get(&semcov::resource::SERVICE_NAME.into())
92-
.unwrap()
93-
.to_string()
94-
};
95-
96-
let endpoint = Endpoint::new(service_name, self.service_addr);
80+
let endpoint = Endpoint::new(self.service_addr);
9781

9882
if let Some(client) = self.client {
9983
let exporter = ZipkinExporter::new(
@@ -109,12 +93,6 @@ impl ZipkinExporterBuilder {
10993
}
11094
}
11195

112-
/// Assign the service name under which to group traces.
113-
pub fn with_service_name<T: Into<String>>(mut self, name: T) -> Self {
114-
self.service_name = Some(name.into());
115-
self
116-
}
117-
11896
/// Assign client implementation
11997
pub fn with_http_client<T: HttpClient + 'static>(mut self, client: T) -> Self {
12098
self.client = Some(Arc::new(client));

opentelemetry-zipkin/src/exporter/model/endpoint.rs

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,6 @@ use std::net::{Ipv4Addr, Ipv6Addr, SocketAddr};
44
#[derive(TypedBuilder, Clone, Debug, Serialize)]
55
#[serde(rename_all = "camelCase")]
66
pub(crate) struct Endpoint {
7-
#[builder(setter(strip_option), default)]
8-
#[serde(skip_serializing_if = "Option::is_none")]
9-
service_name: Option<String>,
107
#[builder(setter(strip_option), default)]
118
#[serde(skip_serializing_if = "Option::is_none")]
129
ipv4: Option<Ipv4Addr>,
@@ -19,19 +16,11 @@ pub(crate) struct Endpoint {
1916
}
2017

2118
impl Endpoint {
22-
pub(crate) fn new(service_name: String, socket_addr: Option<SocketAddr>) -> Self {
19+
pub(crate) fn new(socket_addr: Option<SocketAddr>) -> Self {
2320
match socket_addr {
24-
Some(SocketAddr::V4(v4)) => Endpoint::builder()
25-
.service_name(service_name)
26-
.ipv4(*v4.ip())
27-
.port(v4.port())
28-
.build(),
29-
Some(SocketAddr::V6(v6)) => Endpoint::builder()
30-
.service_name(service_name)
31-
.ipv6(*v6.ip())
32-
.port(v6.port())
33-
.build(),
34-
None => Endpoint::builder().service_name(service_name).build(),
21+
Some(SocketAddr::V4(v4)) => Endpoint::builder().ipv4(*v4.ip()).port(v4.port()).build(),
22+
Some(SocketAddr::V6(v6)) => Endpoint::builder().ipv6(*v6.ip()).port(v6.port()).build(),
23+
None => Endpoint::builder().build(),
3524
}
3625
}
3726
}
@@ -50,11 +39,10 @@ mod tests {
5039
fn test_ipv4_empty() {
5140
test_json_serialization(
5241
Endpoint::builder()
53-
.service_name("open-telemetry".to_owned())
5442
.ipv4(Ipv4Addr::new(127, 0, 0, 1))
5543
.port(8080)
5644
.build(),
57-
"{\"serviceName\":\"open-telemetry\",\"ipv4\":\"127.0.0.1\",\"port\":8080}",
45+
"{\"ipv4\":\"127.0.0.1\",\"port\":8080}",
5846
);
5947
}
6048

opentelemetry-zipkin/src/exporter/model/span.rs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -89,14 +89,12 @@ mod tests {
8989
.duration(150_000)
9090
.local_endpoint(
9191
Endpoint::builder()
92-
.service_name("remote-service".to_owned())
9392
.ipv4(Ipv4Addr::new(192, 168, 0, 1))
9493
.port(8080)
9594
.build()
9695
)
9796
.remote_endpoint(
9897
Endpoint::builder()
99-
.service_name("open-telemetry".to_owned())
10098
.ipv4(Ipv4Addr::new(127, 0, 0, 1))
10199
.port(8080)
102100
.build()
@@ -109,7 +107,7 @@ mod tests {
109107
])
110108
.tags(tags)
111109
.build(),
112-
"{\"traceId\":\"4e441824ec2b6a44ffdc9bb9a6453df3\",\"parentId\":\"ffdc9bb9a6453df3\",\"id\":\"efdc9cd9a1849df3\",\"kind\":\"SERVER\",\"name\":\"main\",\"timestamp\":1502787600000000,\"duration\":150000,\"localEndpoint\":{\"serviceName\":\"remote-service\",\"ipv4\":\"192.168.0.1\",\"port\":8080},\"remoteEndpoint\":{\"serviceName\":\"open-telemetry\",\"ipv4\":\"127.0.0.1\",\"port\":8080},\"annotations\":[{\"timestamp\":1502780000000000,\"value\":\"interesting event\"}],\"tags\":{\"a\":\"b\"},\"debug\":false,\"shared\":false}",
110+
"{\"traceId\":\"4e441824ec2b6a44ffdc9bb9a6453df3\",\"parentId\":\"ffdc9bb9a6453df3\",\"id\":\"efdc9cd9a1849df3\",\"kind\":\"SERVER\",\"name\":\"main\",\"timestamp\":1502787600000000,\"duration\":150000,\"localEndpoint\":{\"ipv4\":\"192.168.0.1\",\"port\":8080},\"remoteEndpoint\":{\"ipv4\":\"127.0.0.1\",\"port\":8080},\"annotations\":[{\"timestamp\":1502780000000000,\"value\":\"interesting event\"}],\"tags\":{\"a\":\"b\"},\"debug\":false,\"shared\":false}",
113111
);
114112
}
115113

@@ -167,7 +165,7 @@ mod tests {
167165
status,
168166
instrumentation_scope: Default::default(),
169167
};
170-
let local_endpoint = Endpoint::new("test".into(), None);
168+
let local_endpoint = Endpoint::new(None);
171169
let span = into_zipkin_span(local_endpoint, span_data);
172170
if let Some(tags) = span.tags.as_ref() {
173171
assert_tag_contains(tags, OTEL_STATUS_CODE, status_tag_val);

opentelemetry-zipkin/src/lib.rs

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -23,17 +23,21 @@
2323
//! ```no_run
2424
//! use opentelemetry::global;
2525
//! use opentelemetry::trace::{Tracer, TraceError};
26-
//! use opentelemetry_sdk::trace::SdkTracerProvider;
26+
//! use opentelemetry_sdk::{trace::SdkTracerProvider, Resource};
2727
//! use opentelemetry_zipkin::ZipkinExporter;
2828
//!
2929
//! fn main() -> Result<(), TraceError> {
3030
//! global::set_text_map_propagator(opentelemetry_zipkin::Propagator::new());
3131
//!
3232
//! let exporter = ZipkinExporter::builder()
33-
//! .with_service_name("trace-demo")
3433
//! .build()?;
35-
//! let provider = TracerProvider::builder()
34+
//! let provider = SdkTracerProvider::builder()
3635
//! .with_simple_exporter(exporter)
36+
//! .with_resource(
37+
//! Resource::builder_empty()
38+
//! .with_service_name("trace-demo")
39+
//! .build(),
40+
//! )
3741
//! .build();
3842
//! global::set_tracer_provider(provider.clone());
3943
//!
@@ -60,22 +64,27 @@
6064
//! trace::{
6165
//! BatchSpanProcessor,
6266
//! BatchConfigBuilder,
63-
//! TracerProvider,
64-
//! }
67+
//! SdkTracerProvider,
68+
//! },
69+
//! Resource,
6570
//! };
6671
//! use opentelemetry_zipkin::ZipkinExporter;
6772
//!
6873
//! fn main() -> Result<(), opentelemetry::trace::TraceError> {
6974
//! let exporter = ZipkinExporter::builder()
70-
//! .with_service_name("runtime-demo")
7175
//! .build()?;
7276
//!
7377
//! let batch = BatchSpanProcessor::builder(exporter)
7478
//! .with_batch_config(BatchConfigBuilder::default().with_max_queue_size(4096).build())
7579
//! .build();
7680
//!
77-
//! let provider = TracerProvider::builder()
81+
//! let provider = SdkTracerProvider::builder()
7882
//! .with_span_processor(batch)
83+
//! .with_resource(
84+
//! Resource::builder_empty()
85+
//! .with_service_name("runtime-demo")
86+
//! .build(),
87+
//! )
7988
//! .build();
8089
//!
8190
//! Ok(())
@@ -105,7 +114,7 @@
105114
//!
106115
//! ```no_run
107116
//! use opentelemetry::{global, InstrumentationScope, KeyValue, trace::{Tracer, TraceError}};
108-
//! use opentelemetry_sdk::{trace::{self, ExportResult, RandomIdGenerator, Sampler}, Resource};
117+
//! use opentelemetry_sdk::{trace::{self, RandomIdGenerator, Sampler}, Resource};
109118
//! use opentelemetry_http::{HttpClient, HttpError};
110119
//! use opentelemetry_zipkin::{Error as ZipkinError, ZipkinExporter};
111120
//! use async_trait::async_trait;
@@ -148,15 +157,14 @@
148157
//! }
149158
//! }
150159
//!
151-
//! fn init_traces() -> Result<trace::TracerProvider, TraceError> {
160+
//! fn init_traces() -> Result<trace::SdkTracerProvider, TraceError> {
152161
//! let exporter = ZipkinExporter::builder()
153162
//! .with_http_client(
154163
//! HyperClient(
155164
//! Client::builder(TokioExecutor::new())
156165
//! .build_http()
157166
//! )
158167
//! )
159-
//! .with_service_name("my_app")
160168
//! .with_service_address(
161169
//! "127.0.0.1:8080"
162170
//! .parse()
@@ -165,7 +173,7 @@
165173
//! .with_collector_endpoint("http://localhost:9411/api/v2/spans")
166174
//! .build()?;
167175
//!
168-
//! Ok(trace::TracerProvider::builder()
176+
//! Ok(trace::SdkTracerProvider::builder()
169177
//! .with_sampler(Sampler::AlwaysOn)
170178
//! .with_batch_exporter(exporter)
171179
//! .with_id_generator(RandomIdGenerator::default())
@@ -174,6 +182,7 @@
174182
//! .with_max_events_per_span(16)
175183
//! .with_resource(
176184
//! Resource::builder_empty()
185+
//! .with_service_name("my_app")
177186
//! .with_attribute(KeyValue::new("key", "value"))
178187
//! .build()
179188
//! )

0 commit comments

Comments
 (0)