Skip to content

Commit f12f96a

Browse files
authored
Merge branch 'main' into chore/cleanup-shutdown
2 parents 154b765 + d0ef365 commit f12f96a

File tree

47 files changed

+1585
-1582
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+1585
-1582
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ reqwest = { version = "0.12", default-features = false }
3939
serde = { version = "1.0", default-features = false }
4040
serde_json = "1.0"
4141
temp-env = "0.3.6"
42-
thiserror = { version = "1", default-features = false }
42+
thiserror = { version = "2", default-features = false }
4343
tonic = { version = "0.12.3", default-features = false }
4444
tonic-build = "0.12"
4545
tokio = { version = "1", default-features = false }

examples/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ This directory contains some examples that should help you get start crates from
77
This example uses following crates from this repo:
88

99
- opentelemetry(log)
10-
- opentelemetry-appender-log
10+
- opentelemetry-appender-tracing
1111
- opentelemetry-stdout
1212

1313
Check this example if you want to understand *how to instrument logs using opentelemetry*.

examples/metrics-advanced/src/main.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use opentelemetry::KeyValue;
44
use opentelemetry_sdk::metrics::{
55
Aggregation, Instrument, PeriodicReader, SdkMeterProvider, Stream, Temporality,
66
};
7-
use opentelemetry_sdk::{runtime, Resource};
7+
use opentelemetry_sdk::Resource;
88
use std::error::Error;
99

1010
fn init_meter_provider() -> opentelemetry_sdk::metrics::SdkMeterProvider {
@@ -49,7 +49,7 @@ fn init_meter_provider() -> opentelemetry_sdk::metrics::SdkMeterProvider {
4949
.with_temporality(Temporality::Delta)
5050
.build();
5151

52-
let reader = PeriodicReader::builder(exporter, runtime::Tokio).build();
52+
let reader = PeriodicReader::builder(exporter).build();
5353
let provider = SdkMeterProvider::builder()
5454
.with_reader(reader)
5555
.with_resource(Resource::new([KeyValue::new(

examples/metrics-basic/src/main.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use opentelemetry::{global, KeyValue};
22
use opentelemetry_sdk::metrics::{PeriodicReader, SdkMeterProvider};
3-
use opentelemetry_sdk::{runtime, Resource};
3+
use opentelemetry_sdk::Resource;
44
use std::error::Error;
55
use std::vec;
66

@@ -9,7 +9,7 @@ fn init_meter_provider() -> opentelemetry_sdk::metrics::SdkMeterProvider {
99
// Build exporter using Delta Temporality (Defaults to Temporality::Cumulative)
1010
// .with_temporality(opentelemetry_sdk::metrics::Temporality::Delta)
1111
.build();
12-
let reader = PeriodicReader::builder(exporter, runtime::Tokio).build();
12+
let reader = PeriodicReader::builder(exporter).build();
1313
let provider = SdkMeterProvider::builder()
1414
.with_reader(reader)
1515
.with_resource(Resource::new([KeyValue::new(

examples/self-diagnostics/Cargo.toml

Lines changed: 0 additions & 15 deletions
This file was deleted.

examples/self-diagnostics/README.md

Lines changed: 0 additions & 28 deletions
This file was deleted.

examples/self-diagnostics/src/main.rs

Lines changed: 0 additions & 73 deletions
This file was deleted.

opentelemetry-otlp/examples/basic-otlp-http/Cargo.toml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,16 @@ license = "Apache-2.0"
66
publish = false
77

88
[features]
9-
default = ["reqwest"]
9+
default = ["reqwest", "experimental_metrics_periodicreader_with_async_runtime"]
1010
reqwest = ["opentelemetry-otlp/reqwest-client"]
1111
hyper = ["opentelemetry-otlp/hyper-client"]
12+
experimental_metrics_periodicreader_with_async_runtime = ["opentelemetry_sdk/experimental_metrics_periodicreader_with_async_runtime"]
1213

1314

1415
[dependencies]
1516
once_cell = { workspace = true }
1617
opentelemetry = { path = "../../../opentelemetry" }
17-
opentelemetry_sdk = { path = "../../../opentelemetry-sdk", features = ["rt-tokio", "metrics", "logs"]}
18+
opentelemetry_sdk = { path = "../../../opentelemetry-sdk", features = ["rt-tokio", "experimental_metrics_periodicreader_with_async_runtime"]}
1819
opentelemetry-http = { path = "../../../opentelemetry-http", optional = true, default-features = false}
1920
opentelemetry-otlp = { path = "../..", features = ["http-proto", "http-json", "logs"] , default-features = false}
2021
opentelemetry-appender-tracing = { path = "../../../opentelemetry-appender-tracing", default-features = false}

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

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use opentelemetry_otlp::WithExportConfig;
1010
use opentelemetry_otlp::{LogExporter, MetricExporter, Protocol, SpanExporter};
1111
use opentelemetry_sdk::{
1212
logs::LoggerProvider,
13-
metrics::{MetricError, PeriodicReader, SdkMeterProvider},
13+
metrics::{MetricError, SdkMeterProvider},
1414
runtime,
1515
trace::{self as sdktrace, TracerProvider},
1616
};
@@ -63,20 +63,25 @@ fn init_metrics() -> Result<opentelemetry_sdk::metrics::SdkMeterProvider, Metric
6363
.with_endpoint("http://localhost:4318/v1/metrics")
6464
.build()?;
6565

66+
#[cfg(feature = "experimental_metrics_periodicreader_with_async_runtime")]
67+
let reader =
68+
opentelemetry_sdk::metrics::periodic_reader_with_async_runtime::PeriodicReader::builder(
69+
exporter,
70+
runtime::Tokio,
71+
)
72+
.build();
73+
// TODO: This does not work today. See https://github.com/open-telemetry/opentelemetry-rust/issues/2400
74+
#[cfg(not(feature = "experimental_metrics_periodicreader_with_async_runtime"))]
75+
let reader = opentelemetry_sdk::metrics::PeriodicReader::builder(exporter).build();
76+
6677
Ok(SdkMeterProvider::builder()
67-
.with_reader(PeriodicReader::builder(exporter, runtime::Tokio).build())
78+
.with_reader(reader)
6879
.with_resource(RESOURCE.clone())
6980
.build())
7081
}
7182

7283
#[tokio::main]
7384
async fn main() -> Result<(), Box<dyn Error + Send + Sync + 'static>> {
74-
let tracer_provider = init_traces()?;
75-
global::set_tracer_provider(tracer_provider.clone());
76-
77-
let meter_provider = init_metrics()?;
78-
global::set_meter_provider(meter_provider.clone());
79-
8085
let logger_provider = init_logs()?;
8186

8287
// Create a new OpenTelemetryTracingBridge using the above LoggerProvider.
@@ -115,6 +120,12 @@ async fn main() -> Result<(), Box<dyn Error + Send + Sync + 'static>> {
115120
.with(fmt_layer)
116121
.init();
117122

123+
let tracer_provider = init_traces()?;
124+
global::set_tracer_provider(tracer_provider.clone());
125+
126+
let meter_provider = init_metrics()?;
127+
global::set_meter_provider(meter_provider.clone());
128+
118129
let common_scope_attributes = vec![KeyValue::new("scope-key", "scope-value")];
119130
let scope = InstrumentationScope::builder("basic")
120131
.with_version("1.0")

opentelemetry-otlp/examples/basic-otlp/Cargo.toml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@ publish = false
77

88
[dependencies]
99
once_cell = { workspace = true }
10-
opentelemetry = { path = "../../../opentelemetry", features = ["metrics", "logs"] }
11-
opentelemetry_sdk = { path = "../../../opentelemetry-sdk", features = ["rt-tokio", "logs"] }
12-
opentelemetry-otlp = { path = "../../../opentelemetry-otlp", features = ["tonic", "metrics", "logs"] }
10+
opentelemetry = { path = "../../../opentelemetry" }
11+
opentelemetry_sdk = { path = "../../../opentelemetry-sdk", features = ["rt-tokio"] }
12+
opentelemetry-otlp = { path = "../../../opentelemetry-otlp" }
1313
opentelemetry-semantic-conventions = { path = "../../../opentelemetry-semantic-conventions" }
1414
tokio = { version = "1.0", features = ["full"] }
1515
opentelemetry-appender-tracing = { path = "../../../opentelemetry-appender-tracing", default-features = false}

opentelemetry-otlp/examples/basic-otlp/README.md

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,16 @@ The example employs a `BatchExporter` for logs and traces, which is the
1414
recommended approach when using OTLP exporters. While it can be modified to use
1515
a `SimpleExporter`, this requires the main method to be a `tokio::main` function
1616
since the `tonic` client requires a Tokio runtime. If you prefer not to use
17-
`tokio::main`, then the `init_logs`, `init_traces`, and `init_metrics` functions
18-
must be executed within a Tokio runtime. Below is an example:
17+
`tokio::main`, then the `init_logs` and `init_traces` functions must be executed
18+
within a Tokio runtime.
19+
20+
This examples uses the default `PeriodicReader` for metrics, which uses own
21+
thread for background processing/exporting. Since the `tonic` client requires a
22+
Tokio runtime, the main method must be a `tokio::main` function. If you prefer not
23+
to use `tokio::main`, then the `init_metrics` function must be executed within a
24+
Tokio runtime.
25+
26+
Below is an example on how to use non `tokio::main`:
1927

2028
```rust
2129
fn main() -> Result<(), Box<dyn Error + Send + Sync + 'static>> {

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

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,7 @@ fn init_traces() -> Result<sdktrace::TracerProvider, TraceError> {
3434

3535
fn init_metrics() -> Result<opentelemetry_sdk::metrics::SdkMeterProvider, MetricError> {
3636
let exporter = MetricExporter::builder().with_tonic().build()?;
37-
38-
let reader = PeriodicReader::builder(exporter, runtime::Tokio).build();
37+
let reader = PeriodicReader::builder(exporter).build();
3938

4039
Ok(SdkMeterProvider::builder()
4140
.with_reader(reader)
@@ -57,12 +56,6 @@ fn init_logs() -> Result<opentelemetry_sdk::logs::LoggerProvider, LogError> {
5756

5857
#[tokio::main]
5958
async fn main() -> Result<(), Box<dyn Error + Send + Sync + 'static>> {
60-
let tracer_provider = init_traces()?;
61-
global::set_tracer_provider(tracer_provider.clone());
62-
63-
let meter_provider = init_metrics()?;
64-
global::set_meter_provider(meter_provider.clone());
65-
6659
let logger_provider = init_logs()?;
6760

6861
// Create a new OpenTelemetryTracingBridge using the above LoggerProvider.
@@ -101,6 +94,12 @@ async fn main() -> Result<(), Box<dyn Error + Send + Sync + 'static>> {
10194
.with(fmt_layer)
10295
.init();
10396

97+
let tracer_provider = init_traces()?;
98+
global::set_tracer_provider(tracer_provider.clone());
99+
100+
let meter_provider = init_metrics()?;
101+
global::set_meter_provider(meter_provider.clone());
102+
104103
let common_scope_attributes = vec![KeyValue::new("scope-key", "scope-value")];
105104
let scope = InstrumentationScope::builder("basic")
106105
.with_version("1.0")

opentelemetry-otlp/src/exporter/tonic/logs.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use async_trait::async_trait;
22
use core::fmt;
3+
use opentelemetry::otel_debug;
34
use opentelemetry_proto::tonic::collector::logs::v1::{
45
logs_service_client::LogsServiceClient, ExportLogsServiceRequest,
56
};
@@ -43,6 +44,8 @@ impl TonicLogsClient {
4344
.accept_compressed(compression);
4445
}
4546

47+
otel_debug!(name: "TonicsLogsClientBuilt");
48+
4649
TonicLogsClient {
4750
inner: Some(ClientInner {
4851
client,
@@ -72,6 +75,8 @@ impl LogExporter for TonicLogsClient {
7275

7376
let resource_logs = group_logs_by_resource_and_scope(batch, &self.resource);
7477

78+
otel_debug!(name: "TonicsLogsClient.CallingExport");
79+
7580
client
7681
.export(Request::from_parts(
7782
metadata,

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ use core::fmt;
22
use std::sync::Mutex;
33

44
use async_trait::async_trait;
5+
use opentelemetry::otel_debug;
56
use opentelemetry_proto::tonic::collector::metrics::v1::{
67
metrics_service_client::MetricsServiceClient, ExportMetricsServiceRequest,
78
};
@@ -40,6 +41,8 @@ impl TonicMetricsClient {
4041
.accept_compressed(compression);
4142
}
4243

44+
otel_debug!(name: "TonicsMetricsClientBuilt");
45+
4346
TonicMetricsClient {
4447
inner: Mutex::new(Some(ClientInner {
4548
client,
@@ -72,6 +75,8 @@ impl MetricsClient for TonicMetricsClient {
7275
None => Err(MetricError::Other("exporter is already shut down".into())),
7376
})?;
7477

78+
otel_debug!(name: "TonicsMetricsClient.CallingExport");
79+
7580
client
7681
.export(Request::from_parts(
7782
metadata,

0 commit comments

Comments
 (0)