11use opentelemetry:: global;
22use opentelemetry:: KeyValue ;
3- use opentelemetry_sdk:: metrics:: { Instrument , SdkMeterProvider , Stream , Temporality } ;
3+ use opentelemetry_sdk:: metrics:: { Aggregation , Instrument , SdkMeterProvider , Stream , Temporality } ;
44use opentelemetry_sdk:: Resource ;
55use 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