Skip to content

Commit b26b20a

Browse files
authored
Add basic stress test for tracing (#1286)
1 parent 6c2ce12 commit b26b20a

File tree

7 files changed

+54
-22
lines changed

7 files changed

+54
-22
lines changed

opentelemetry/src/lib.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,6 @@
6363
//!
6464
//! # Metrics
6565
//!
66-
//! Note: the metrics specification is **still in progress** and **subject to major
67-
//! changes**.
6866
//!
6967
//! The [`metrics`] module includes types for recording measurements about a
7068
//! service at runtime.

opentelemetry/src/metrics/meter.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ pub trait MeterProvider {
6666
) -> Meter;
6767
}
6868

69-
/// Provides access to instrument instances for recording metrics.
69+
/// Provides access to instrument instances for recording measurements.
7070
///
7171
/// ```
7272
/// use opentelemetry::{global, KeyValue};
@@ -99,7 +99,7 @@ pub trait MeterProvider {
9999
/// ].as_ref()
100100
/// );
101101
///
102-
/// // u6 oberservable counter
102+
/// // u6 observable counter
103103
/// let observable_u4_counter = meter.u64_observable_counter("my_observable_u64_counter").init();
104104
///
105105
/// // Register a callback to this meter for an asynchronous instrument to record measurements
@@ -114,7 +114,7 @@ pub trait MeterProvider {
114114
/// )
115115
/// });
116116
///
117-
/// // f64 oberservable counter
117+
/// // f64 observable counter
118118
/// let observable_f64_counter = meter.f64_observable_counter("my_observable_f64_counter").init();
119119
///
120120
/// // Register a callback to this meter for an asynchronous instrument to record measurements
@@ -153,7 +153,7 @@ pub trait MeterProvider {
153153
/// ].as_ref(),
154154
/// );
155155
///
156-
/// // i64 oberservable updown counter
156+
/// // i64 observable updown counter
157157
/// let observable_i64_up_down_counter = meter.i64_observable_up_down_counter("my_observable_i64_updown_counter").init();
158158
///
159159
/// // Register a callback to this meter for an asynchronous instrument to record measurements
@@ -168,7 +168,7 @@ pub trait MeterProvider {
168168
/// )
169169
/// });
170170
///
171-
/// // f64 oberservable updown counter
171+
/// // f64 observable updown counter
172172
/// let observable_f64_up_down_counter = meter.f64_observable_up_down_counter("my_observable_f64_updown_counter").init();
173173
///
174174
/// // Register a callback to this meter for an asynchronous instrument to record measurements
@@ -183,7 +183,7 @@ pub trait MeterProvider {
183183
/// )
184184
/// });
185185
///
186-
/// // Oberservable f64 gauge
186+
/// // Observable f64 gauge
187187
/// let f64_gauge = meter.f64_observable_gauge("my_f64_gauge").init();
188188
///
189189
/// // Register a callback to this meter for an asynchronous instrument to record measurements
@@ -198,7 +198,7 @@ pub trait MeterProvider {
198198
/// )
199199
/// });
200200
///
201-
/// // Oberservable i64 gauge
201+
/// // Observable i64 gauge
202202
/// let i64_gauge = meter.i64_observable_gauge("my_i64_gauge").init();
203203
///
204204
/// // Register a callback to this meter for an asynchronous instrument to record measurements
@@ -213,7 +213,7 @@ pub trait MeterProvider {
213213
/// )
214214
/// });
215215
///
216-
/// // Oberservable u64 gauge
216+
/// // Observable u64 gauge
217217
/// let u64_gauge = meter.u64_observable_gauge("my_u64_gauge").init();
218218
///
219219
/// // Register a callback to this meter for an asynchronous instrument to record measurements

opentelemetry/src/trace/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@
8181
//!
8282
//! Exporting spans often involves sending data over a network or performing
8383
//! other I/O tasks. OpenTelemetry allows you to schedule these tasks using
84-
//! whichever runtime you area already using such as [Tokio] or [async-std].
84+
//! whichever runtime you are already using such as [Tokio] or [async-std].
8585
//! When using an async runtime it's best to use the batch span processor
8686
//! where the spans will be sent in batches as opposed to being sent once ended,
8787
//! which often ends up being more efficient.

stress/Cargo.toml

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,17 @@ name = "logs"
1414
path = "src/logs.rs"
1515
doc = false
1616

17+
[[bin]] # Bin to run the traces stress tests
18+
name = "traces"
19+
path = "src/traces.rs"
20+
doc = false
21+
1722
[dependencies]
1823
ctrlc = "3.2.5"
1924
lazy_static = "1.4.0"
2025
num_cpus = "1.15.0"
21-
opentelemetry = { path = "../opentelemetry", features = ["metrics", "logs"] }
22-
opentelemetry_sdk = { path = "../opentelemetry-sdk", features = ["metrics", "logs"] }
26+
opentelemetry = { path = "../opentelemetry", features = ["metrics", "logs", "trace"] }
27+
opentelemetry_sdk = { path = "../opentelemetry-sdk", features = ["metrics", "logs", "trace"] }
2328
opentelemetry-appender-tracing = { path = "../opentelemetry-appender-tracing"}
2429
opentelemetry-stdout = { path = "../opentelemetry-stdout", features = ["logs"]}
2530
rand = { version = "0.8.4", features = ["small_rng"] }

stress/README.md

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,10 @@ Press (Ctrl + C) to quit the tests.
2929
Example output:
3030

3131
```text
32-
Throughput: 4813019.00 requests/sec
33-
Throughput: 4805997.50 requests/sec
34-
Throughput: 4796934.50 requests/sec
35-
Throughput: 4817836.50 requests/sec
36-
Throughput: 4812457.00 requests/sec
37-
Throughput: 4773890.50 requests/sec
38-
Throughput: 4760047.00 requests/sec
39-
Throughput: 4851061.50 requests/sec
32+
Number of threads: 4
33+
Throughput: 4,714,600 iterations/sec
34+
Throughput: 4,840,200 iterations/sec
35+
Throughput: 3,905,200 iterations/sec
36+
Throughput: 4,106,600 iterations/sec
37+
Throughput: 5,075,400 iterations/sec
4038
```

stress/src/throughput.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ where
2727
})
2828
.expect("Error setting Ctrl-C handler");
2929
let num_threads = num_cpus::get_physical();
30-
println!("Number threads: {}", num_threads);
30+
println!("Number of threads: {}", num_threads);
3131
let mut handles = Vec::with_capacity(num_threads);
3232
let func_arc = Arc::new(func);
3333
let mut worker_stats_vec: Vec<WorkerStats> = Vec::new();

stress/src/traces.rs

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
use lazy_static::lazy_static;
2+
use opentelemetry::{
3+
trace::{Span, SpanBuilder, Tracer, TracerProvider as _},
4+
KeyValue,
5+
};
6+
use opentelemetry_sdk::trace as sdktrace;
7+
8+
mod throughput;
9+
10+
lazy_static! {
11+
static ref PROVIDER: sdktrace::TracerProvider = sdktrace::TracerProvider::builder()
12+
.with_config(sdktrace::config().with_sampler(sdktrace::Sampler::AlwaysOn))
13+
.build();
14+
static ref TRACER: sdktrace::Tracer = PROVIDER.tracer("stress");
15+
}
16+
17+
fn main() {
18+
throughput::test_throughput(test_span);
19+
}
20+
21+
fn test_span() {
22+
let span_builder = SpanBuilder::from_name("test_span").with_attributes(vec![
23+
KeyValue::new("attribute_at_span_start1", "value1"),
24+
KeyValue::new("attribute_at_span_start2", "value2"),
25+
]);
26+
27+
let mut span = TRACER.build(span_builder);
28+
span.set_attribute(KeyValue::new("key3", "value3"));
29+
span.set_attribute(KeyValue::new("key4", "value4"));
30+
span.end();
31+
}

0 commit comments

Comments
 (0)