Skip to content
Merged
Show file tree
Hide file tree
Changes from 11 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
48 changes: 28 additions & 20 deletions opentelemetry-sdk/src/trace/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
//! can be set for the default OpenTelemetry limits and Sampler.
use crate::trace::{span_limit::SpanLimits, IdGenerator, RandomIdGenerator, Sampler, ShouldSample};
use crate::Resource;
use opentelemetry::global::{handle_error, Error};
use opentelemetry::otel_warn;
use std::borrow::Cow;
use std::env;
use std::str::FromStr;
Expand Down Expand Up @@ -129,9 +129,9 @@
if let Some(r) = ratio {
Box::new(Sampler::TraceIdRatioBased(r))
} else {
handle_error(
Error::Other(String::from(
"Missing or invalid OTEL_TRACES_SAMPLER_ARG value. Falling back to default: 1.0"))
otel_warn!(
name: "TracerProvider.Config.Sampler.InvalidArgument",
message = "OTEL_TRACES_SAMPLER is set to 'traceidratio' but OTEL_TRACES_SAMPLER_ARG environment variable is missing or invalid. OTEL_TRACES_SAMPLER_ARG must be a valid float between 0.0 and 1.0 representing the desired sampling probability (0.0 = no traces sampled, 1.0 = all traces sampled, 0.5 = 50% of traces sampled). Falling back to default ratio: 1.0 (100% sampling)"

Check warning on line 134 in opentelemetry-sdk/src/trace/config.rs

View check run for this annotation

Codecov / codecov/patch

opentelemetry-sdk/src/trace/config.rs#L132-L134

Added lines #L132 - L134 were not covered by tests
);
Box::new(Sampler::TraceIdRatioBased(1.0))
}
Expand All @@ -149,37 +149,45 @@
r,
))))
} else {
handle_error(
Error::Other(String::from(
"Missing or invalid OTEL_TRACES_SAMPLER_ARG value. Falling back to default: 1.0"
)));
otel_warn!(
name: "TracerProvider.Config.Sampler.InvalidArgument",
message = "OTEL_TRACES_SAMPLER is set to 'parentbased_traceidratio' but OTEL_TRACES_SAMPLER_ARG environment variable is missing or invalid. OTEL_TRACES_SAMPLER_ARG must be a valid float between 0.0 and 1.0 representing the desired sampling probability (0.0 = no traces sampled, 1.0 = all traces sampled, 0.5 = 50% of traces sampled). Falling back to default ratio: 1.0 (100% sampling)"
);

Check warning on line 155 in opentelemetry-sdk/src/trace/config.rs

View check run for this annotation

Codecov / codecov/patch

opentelemetry-sdk/src/trace/config.rs#L152-L155

Added lines #L152 - L155 were not covered by tests
Box::new(Sampler::ParentBased(Box::new(Sampler::TraceIdRatioBased(
1.0,
))))
}
}
"parentbased_jaeger_remote" => {
handle_error(
Error::Other(String::from(
"Unimplemented parentbased_jaeger_remote sampler. Falling back to default: parentbased_always_on"
)));
otel_warn!(
name: "TracerProvider.Config.Sampler.Unsupported",
message = "OTEL_TRACES_SAMPLER is set to 'parentbased_jaeger_remote' which is not implemented in this SDK version. Using fallback sampler: ParentBased(AlwaysOn). Configure an alternative sampler using OTEL_TRACES_SAMPLER"
);

Check warning on line 165 in opentelemetry-sdk/src/trace/config.rs

View check run for this annotation

Codecov / codecov/patch

opentelemetry-sdk/src/trace/config.rs#L162-L165

Added lines #L162 - L165 were not covered by tests
Box::new(Sampler::ParentBased(Box::new(Sampler::AlwaysOn)))
}
"jaeger_remote" => {
handle_error(
Error::Other(String::from("Unimplemented jaeger_remote sampler. Falling back to default: parentbased_always_on")));
otel_warn!(
name: "TracerProvider.Config.Sampler.Unsupported",
message = "OTEL_TRACES_SAMPLER is set to 'jaeger_remote' which is implemented in this SDK version. Using fallback sampler: ParentBased(AlwaysOn). Configure an alternative sampler using OTEL_TRACES_SAMPLER"
);

Check warning on line 172 in opentelemetry-sdk/src/trace/config.rs

View check run for this annotation

Codecov / codecov/patch

opentelemetry-sdk/src/trace/config.rs#L169-L172

Added lines #L169 - L172 were not covered by tests
Box::new(Sampler::ParentBased(Box::new(Sampler::AlwaysOn)))
}
"xray" => {
handle_error(
Error::Other(String::from("Unimplemented xray sampler. Falling back to default: parentbased_always_on")));
otel_warn!(
name: "TracerProvider.Config.Sampler.Unsupported",
message = "OTEL_TRACES_SAMPLER is set to 'xray'. AWS X-Ray sampler is not implemented in this SDK version. Using fallback sampler: ParentBased(AlwaysOn). Configure an alternative sampler using OTEL_TRACES_SAMPLER"
);

Check warning on line 179 in opentelemetry-sdk/src/trace/config.rs

View check run for this annotation

Codecov / codecov/patch

opentelemetry-sdk/src/trace/config.rs#L176-L179

Added lines #L176 - L179 were not covered by tests
Box::new(Sampler::ParentBased(Box::new(Sampler::AlwaysOn)))
}
s => {
handle_error(
Error::Other(format!("Unrecognised OTEL_TRACES_SAMPLER value: {}. Falling back to default: parentbased_always_on",
s
)));
otel_warn!(

Check warning on line 183 in opentelemetry-sdk/src/trace/config.rs

View check run for this annotation

Codecov / codecov/patch

opentelemetry-sdk/src/trace/config.rs#L183

Added line #L183 was not covered by tests
name: "TracerProvider.Config.Sampler.InvalidSamplerType",
message = format!(
"Unrecognized sampler type '{}' in OTEL_TRACES_SAMPLER environment variable. Valid values are: always_on, always_off, traceidratio, parentbased_always_on, parentbased_always_off, parentbased_traceidratio. Using fallback sampler: ParentBased(AlwaysOn)",
s
),
sampler = s

Check warning on line 189 in opentelemetry-sdk/src/trace/config.rs

View check run for this annotation

Codecov / codecov/patch

opentelemetry-sdk/src/trace/config.rs#L185-L189

Added lines #L185 - L189 were not covered by tests
);
Box::new(Sampler::ParentBased(Box::new(Sampler::AlwaysOn)))
}
}
Expand Down
36 changes: 27 additions & 9 deletions opentelemetry-sdk/src/trace/span_processor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@
stream::{self, FusedStream, FuturesUnordered},
StreamExt as _,
};
use opentelemetry::global;
use opentelemetry::{otel_debug, otel_error};
use opentelemetry::{
trace::{TraceError, TraceResult},
Context,
Expand Down Expand Up @@ -134,7 +134,11 @@
.and_then(|mut exporter| futures_executor::block_on(exporter.export(vec![span])));

if let Err(err) = result {
global::handle_error(err);
// TODO: check error type, and log `error` only if the error is user-actiobable, else log `debug`
otel_debug!(

Check warning on line 138 in opentelemetry-sdk/src/trace/span_processor.rs

View check run for this annotation

Codecov / codecov/patch

opentelemetry-sdk/src/trace/span_processor.rs#L138

Added line #L138 was not covered by tests
name: "SimpleProcessor.OnEnd.Error",
reason = format!("{:?}", err)

Check warning on line 140 in opentelemetry-sdk/src/trace/span_processor.rs

View check run for this annotation

Codecov / codecov/patch

opentelemetry-sdk/src/trace/span_processor.rs#L140

Added line #L140 was not covered by tests
);
}
}

Expand Down Expand Up @@ -246,7 +250,10 @@
let result = self.message_sender.try_send(BatchMessage::ExportSpan(span));

if let Err(err) = result {
global::handle_error(TraceError::Other(err.into()));
otel_debug!(

Check warning on line 253 in opentelemetry-sdk/src/trace/span_processor.rs

View check run for this annotation

Codecov / codecov/patch

opentelemetry-sdk/src/trace/span_processor.rs#L253

Added line #L253 was not covered by tests
name: "BatchSpanProcessor.OnEnd.SendResultError",
reason = format!("{:?}", TraceError::Other(err.into()))

Check warning on line 255 in opentelemetry-sdk/src/trace/span_processor.rs

View check run for this annotation

Codecov / codecov/patch

opentelemetry-sdk/src/trace/span_processor.rs#L255

Added line #L255 was not covered by tests
);
}
}

Expand Down Expand Up @@ -313,14 +320,22 @@
let result = export_task.await;

if let Some(channel) = res_channel {
// If a response channel is provided, attempt to send the export result through it.
if let Err(result) = channel.send(result) {
global::handle_error(TraceError::from(format!(
"failed to send flush result: {:?}",
result
)));
otel_debug!(

Check warning on line 325 in opentelemetry-sdk/src/trace/span_processor.rs

View check run for this annotation

Codecov / codecov/patch

opentelemetry-sdk/src/trace/span_processor.rs#L325

Added line #L325 was not covered by tests
name: "BatchSpanProcessor.Flush.SendResultError",
reason = format!("{:?}", result)

Check warning on line 327 in opentelemetry-sdk/src/trace/span_processor.rs

View check run for this annotation

Codecov / codecov/patch

opentelemetry-sdk/src/trace/span_processor.rs#L327

Added line #L327 was not covered by tests
);
}
} else if let Err(err) = result {
global::handle_error(err);
// If no channel is provided and the export operation encountered an error,
// log the error directly here.
// TODO: Consider returning the status instead of logging it.
otel_error!(

Check warning on line 334 in opentelemetry-sdk/src/trace/span_processor.rs

View check run for this annotation

Codecov / codecov/patch

opentelemetry-sdk/src/trace/span_processor.rs#L334

Added line #L334 was not covered by tests
name: "BatchSpanProcessor.Flush.ExportError",
reason = format!("{:?}", err),

Check warning on line 336 in opentelemetry-sdk/src/trace/span_processor.rs

View check run for this annotation

Codecov / codecov/patch

opentelemetry-sdk/src/trace/span_processor.rs#L336

Added line #L336 was not covered by tests
message = "Failed during the export process"
);
}

Ok(())
Expand Down Expand Up @@ -354,7 +369,10 @@
let export_task = self.export();
let task = async move {
if let Err(err) = export_task.await {
global::handle_error(err);
otel_error!(

Check warning on line 372 in opentelemetry-sdk/src/trace/span_processor.rs

View check run for this annotation

Codecov / codecov/patch

opentelemetry-sdk/src/trace/span_processor.rs#L372

Added line #L372 was not covered by tests
name: "BatchSpanProcessor.OnEnd.Error",
reason = format!("{}", err)

Check warning on line 374 in opentelemetry-sdk/src/trace/span_processor.rs

View check run for this annotation

Codecov / codecov/patch

opentelemetry-sdk/src/trace/span_processor.rs#L374

Added line #L374 was not covered by tests
);
}

Ok(())
Expand Down
Loading