Skip to content

Commit d400c03

Browse files
Extend metrics-advanced example with exponential histogram
1 parent df412fe commit d400c03

File tree

2 files changed

+29
-2
lines changed

2 files changed

+29
-2
lines changed

examples/metrics-advanced/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,6 @@ bench = false
1414

1515
[dependencies]
1616
opentelemetry = { workspace = true, features = ["metrics"] }
17-
opentelemetry_sdk = { workspace = true }
17+
opentelemetry_sdk = { workspace = true, features = ["spec_unstable_metrics_views"] }
1818
opentelemetry-stdout = { workspace = true, features = ["metrics"] }
1919
tokio = { workspace = true, features = ["full"] }

examples/metrics-advanced/src/main.rs

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use opentelemetry::global;
22
use opentelemetry::KeyValue;
3-
use opentelemetry_sdk::metrics::{Instrument, SdkMeterProvider, Stream, Temporality};
3+
use opentelemetry_sdk::metrics::{Aggregation, Instrument, SdkMeterProvider, Stream, Temporality};
44
use opentelemetry_sdk::Resource;
55
use std::error::Error;
66

@@ -33,6 +33,22 @@ fn init_meter_provider() -> opentelemetry_sdk::metrics::SdkMeterProvider {
3333
}
3434
};
3535

36+
// for example 3
37+
let my_view_change_aggregation = |i: &Instrument| {
38+
if i.name() == "my_third_histogram" {
39+
Stream::builder()
40+
.with_aggregation(Aggregation::Base2ExponentialHistogram {
41+
max_size: 10,
42+
max_scale: 5,
43+
record_min_max: true,
44+
})
45+
.build()
46+
.ok()
47+
} else {
48+
None
49+
}
50+
};
51+
3652
// Build exporter using Delta Temporality.
3753
let exporter = opentelemetry_stdout::MetricExporterBuilder::default()
3854
.with_temporality(Temporality::Delta)
@@ -47,6 +63,7 @@ fn init_meter_provider() -> opentelemetry_sdk::metrics::SdkMeterProvider {
4763
.with_resource(resource)
4864
.with_view(my_view_rename_and_unit)
4965
.with_view(my_view_change_cardinality)
66+
.with_view(my_view_change_aggregation)
5067
.build();
5168
global::set_meter_provider(provider.clone());
5269
provider
@@ -112,6 +129,16 @@ async fn main() -> Result<(), Box<dyn Error + Send + Sync + 'static>> {
112129

113130
histogram2.record(1.8, &[KeyValue::new("mykey1", "v7")]);
114131

132+
// Example 3 - Use exponential histogram.
133+
let histogram3 = meter
134+
.f64_histogram("my_third_histogram")
135+
.with_description("My histogram example description")
136+
.build();
137+
histogram3.record(-1.3, &[KeyValue::new("mykey1", "myvalue1")]);
138+
histogram3.record(-5.5, &[KeyValue::new("mykey1", "myvalue1")]);
139+
histogram3.record(7.5, &[KeyValue::new("mykey1", "myvalue1")]);
140+
histogram3.record(0.4, &[KeyValue::new("mykey1", "myvalue1")]);
141+
115142
// Metrics are exported by default every 60 seconds when using stdout exporter,
116143
// however shutting down the MeterProvider here instantly flushes
117144
// the metrics, instead of waiting for the 60 sec interval.

0 commit comments

Comments
 (0)