Skip to content

Commit 830b83f

Browse files
committed
💥 change the init_tracer to allow setup of resources (wip)
1 parent f151d70 commit 830b83f

File tree

3 files changed

+56
-24
lines changed

3 files changed

+56
-24
lines changed

README.md

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,21 @@ For examples, you can look at:
1818

1919
```rust
2020
//...
21+
use axum_tracing_opentelemetry::opentelemetry_tracing_layer;
2122
use axum_tracing_opentelemetry::{
22-
opentelemetry_tracing_layer,
23-
// optional tools to init tracer (require features)
24-
CollectorKind, init_tracer
23+
// optional tools to init tracer (may require features)
24+
init_tracer,
25+
make_resource,
26+
CollectorKind,
2527
};
2628

2729
fn init_tracing() {
2830

29-
let otel_tracer = init_tracer(CollectorKind::Otlp).expect("setup of Tracer");
31+
let otel_tracer = init_tracer(
32+
CollectorKind::Otlp,
33+
make_resource(env!("CARGO_PKG_NAME"), env!("CARGO_PKG_VERSION")),
34+
)
35+
.expect("setup of Tracer");
3036
let otel_layer = tracing_opentelemetry::layer().with_tracer(otel_tracer);
3137

3238
let subscriber = tracing_subscriber::registry()

examples/oltp/src/main.rs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,13 @@ use axum::extract::{Path, Query};
22
use axum::http::Method;
33
use axum::Extension;
44
use axum::{response::IntoResponse, routing::get, Router};
5-
use axum_tracing_opentelemetry::{init_tracer, opentelemetry_tracing_layer, CollectorKind};
5+
use axum_tracing_opentelemetry::opentelemetry_tracing_layer;
6+
use axum_tracing_opentelemetry::{
7+
// optional tools to init tracer (may require features)
8+
init_tracer,
9+
make_resource,
10+
CollectorKind,
11+
};
612
use serde_json::json;
713
use std::net::SocketAddr;
814

@@ -17,7 +23,11 @@ fn init_tracing() {
1723
std::env::var("RUST_LOG").unwrap_or("INFO".to_string()),
1824
);
1925

20-
let otel_tracer = init_tracer(CollectorKind::Otlp).expect("setup of Tracer");
26+
let otel_tracer = init_tracer(
27+
CollectorKind::Otlp,
28+
make_resource(env!("CARGO_PKG_NAME"), env!("CARGO_PKG_VERSION")),
29+
)
30+
.expect("setup of Tracer");
2131
let otel_layer = tracing_opentelemetry::layer().with_tracer(otel_tracer);
2232

2333
let fmt_layer = tracing_subscriber::fmt::layer()

src/tools.rs

Lines changed: 34 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1+
use opentelemetry::sdk::Resource;
12
#[cfg(any(feature = "jaeger", feature = "otlp"))]
23
use opentelemetry::{
3-
global, sdk::propagation::TraceContextPropagator, sdk::trace as sdktrace, sdk::Resource,
4-
trace::TraceError,
4+
global, sdk::propagation::TraceContextPropagator, sdk::trace as sdktrace, trace::TraceError,
55
};
66

77
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
@@ -14,14 +14,10 @@ pub enum CollectorKind {
1414
}
1515

1616
#[cfg(any(feature = "jaeger", feature = "otlp"))]
17-
pub fn init_tracer(kind: CollectorKind) -> Result<sdktrace::Tracer, TraceError> {
18-
// use opentelemetry_otlp::WithExportConfig;
19-
use opentelemetry_semantic_conventions as semcov;
20-
let resource = Resource::new(vec![
21-
semcov::resource::SERVICE_NAME.string(env!("CARGO_PKG_NAME")),
22-
semcov::resource::SERVICE_VERSION.string(env!("CARGO_PKG_VERSION")),
23-
]);
24-
17+
pub fn init_tracer(
18+
kind: CollectorKind,
19+
resource: Resource,
20+
) -> Result<sdktrace::Tracer, TraceError> {
2521
match kind {
2622
#[cfg(feature = "otlp")]
2723
CollectorKind::Otlp => {
@@ -41,18 +37,39 @@ pub fn init_tracer(kind: CollectorKind) -> Result<sdktrace::Tracer, TraceError>
4137
}
4238
}
4339

40+
/// call with service name and version
41+
///
42+
/// ```rust
43+
/// make_resource(env!("CARGO_PKG_NAME"), env!("CARGO_PKG_VERSION"))
44+
/// ```
45+
pub fn make_resource<S>(service_name: S, service_version: S) -> Resource
46+
where
47+
S: Into<String>,
48+
{
49+
use opentelemetry_semantic_conventions as semcov;
50+
Resource::new(vec![
51+
semcov::resource::SERVICE_NAME.string(service_name.into()),
52+
semcov::resource::SERVICE_VERSION.string(service_version.into()),
53+
])
54+
}
55+
4456
#[cfg(feature = "otlp")]
4557
pub fn init_tracer_otlp(resource: Resource) -> Result<sdktrace::Tracer, TraceError> {
46-
global::set_text_map_propagator(TraceContextPropagator::new());
47-
48-
// resource = resource.merge(&read_dt_metadata());
58+
use opentelemetry_otlp::WithExportConfig;
4959

60+
global::set_text_map_propagator(TraceContextPropagator::new());
61+
// FIXME choice the right/official env variable `OTEL_COLLECTOR_URL` or `OTEL_EXPORTER_OTLP_ENDPOINT`
62+
// TODO try to autodetect if http or grpc should be used (eg based on env variable, port ???)
63+
//endpoint (default = 0.0.0.0:4317 for grpc protocol, 0.0.0.0:4318 http protocol):
64+
//.http().with_endpoint(collector_url),
65+
let endpoint_grpc = std::env::var("OTEL_EXPORTER_OTLP_ENDPOINT")
66+
.unwrap_or_else(|_| "http://0.0.0.0:4317".to_string());
67+
let exporter = opentelemetry_otlp::new_exporter()
68+
.tonic()
69+
.with_endpoint(endpoint_grpc);
5070
opentelemetry_otlp::new_pipeline()
5171
.tracing()
52-
//endpoint (default = 0.0.0.0:4317 for grpc protocol, 0.0.0.0:4318 http protocol):
53-
.with_exporter(
54-
opentelemetry_otlp::new_exporter().tonic(), //.http().with_endpoint(collector_url),
55-
)
72+
.with_exporter(exporter)
5673
.with_trace_config(
5774
sdktrace::config()
5875
.with_resource(resource)
@@ -69,7 +86,6 @@ pub fn init_tracer_jaeger(resource: Resource) -> Result<sdktrace::Tracer, TraceE
6986
);
7087

7188
opentelemetry_jaeger::new_pipeline()
72-
.with_service_name(env!("CARGO_PKG_NAME"))
7389
.with_trace_config(
7490
sdktrace::config()
7591
.with_resource(resource)

0 commit comments

Comments
 (0)