11use opentelemetry:: global;
22use opentelemetry:: KeyValue ;
3+ use opentelemetry_sdk:: metrics:: data:: Temporality ;
4+ use opentelemetry_sdk:: metrics:: PeriodicReaderWithOwnThread ;
35use opentelemetry_sdk:: metrics:: { PeriodicReader , SdkMeterProvider } ;
46use opentelemetry_sdk:: { runtime, Resource } ;
7+ use tracing_subscriber:: fmt;
8+ use tracing_subscriber:: layer:: SubscriberExt ;
9+ use tracing_subscriber:: util:: SubscriberInitExt ;
10+ use tracing_subscriber:: EnvFilter ;
11+ use tracing_subscriber:: Layer ;
512use std:: error:: Error ;
6- use std:: vec ;
13+ use std:: time :: Duration ;
714
815fn init_meter_provider ( ) -> opentelemetry_sdk:: metrics:: SdkMeterProvider {
916 let exporter = opentelemetry_stdout:: MetricExporterBuilder :: default ( )
1017 // Build exporter using Delta Temporality (Defaults to Temporality::Cumulative)
11- // .with_temporality(data::Temporality::Delta)
18+ . with_temporality ( Temporality :: Delta )
19+ . build ( ) ;
20+ let reader = PeriodicReaderWithOwnThread :: builder ( exporter)
21+ . with_interval ( Duration :: from_secs ( 10 ) )
1222 . build ( ) ;
13- let reader = PeriodicReader :: builder ( exporter, runtime:: Tokio ) . build ( ) ;
1423 let provider = SdkMeterProvider :: builder ( )
1524 . with_reader ( reader)
1625 . with_resource ( Resource :: new ( [ KeyValue :: new (
@@ -24,24 +33,16 @@ fn init_meter_provider() -> opentelemetry_sdk::metrics::SdkMeterProvider {
2433
2534#[ tokio:: main]
2635async fn main ( ) -> Result < ( ) , Box < dyn Error + Send + Sync + ' static > > {
36+ tracing_subscriber:: registry ( )
37+ . with ( fmt:: layer ( ) . with_thread_names ( true ) )
38+ . init ( ) ;
39+
2740 // Initialize the MeterProvider with the stdout Exporter.
2841 let meter_provider = init_meter_provider ( ) ;
2942
3043 // Create a meter from the above MeterProvider.
3144 let meter = global:: meter ( "mylibraryname" ) ;
3245
33- // Create a Counter Instrument.
34- let counter = meter. u64_counter ( "my_counter" ) . build ( ) ;
35-
36- // Record measurements using the Counter instrument.
37- counter. add (
38- 10 ,
39- & [
40- KeyValue :: new ( "mykey1" , "myvalue1" ) ,
41- KeyValue :: new ( "mykey2" , "myvalue2" ) ,
42- ] ,
43- ) ;
44-
4546 // Create a ObservableCounter instrument and register a callback that reports the measurement.
4647 let _observable_counter = meter
4748 . u64_observable_counter ( "my_observable_counter" )
@@ -58,84 +59,20 @@ async fn main() -> Result<(), Box<dyn Error + Send + Sync + 'static>> {
5859 } )
5960 . build ( ) ;
6061
61- // Create a UpCounter Instrument.
62- let updown_counter = meter. i64_up_down_counter ( "my_updown_counter" ) . build ( ) ;
63-
64- // Record measurements using the UpCounter instrument.
65- updown_counter. add (
66- -10 ,
67- & [
68- KeyValue :: new ( "mykey1" , "myvalue1" ) ,
69- KeyValue :: new ( "mykey2" , "myvalue2" ) ,
70- ] ,
71- ) ;
72-
73- // Create a Observable UpDownCounter instrument and register a callback that reports the measurement.
74- let _observable_up_down_counter = meter
75- . i64_observable_up_down_counter ( "my_observable_updown_counter" )
76- . with_description ( "My observable updown counter example description" )
77- . with_unit ( "myunit" )
78- . with_callback ( |observer| {
79- observer. observe (
80- 100 ,
81- & [
82- KeyValue :: new ( "mykey1" , "myvalue1" ) ,
83- KeyValue :: new ( "mykey2" , "myvalue2" ) ,
84- ] ,
85- )
86- } )
87- . build ( ) ;
88-
89- // Create a Histogram Instrument.
90- let histogram = meter
91- . f64_histogram ( "my_histogram" )
92- . with_description ( "My histogram example description" )
93- // Setting boundaries is optional. By default, the boundaries are set to
94- // [0.0, 5.0, 10.0, 25.0, 50.0, 75.0, 100.0, 250.0, 500.0, 750.0, 1000.0, 2500.0, 5000.0, 7500.0, 10000.0]
95- . with_boundaries ( vec ! [ 0.0 , 5.0 , 10.0 , 15.0 , 20.0 , 25.0 ] )
96- . build ( ) ;
97-
98- // Record measurements using the histogram instrument.
99- histogram. record (
100- 10.5 ,
101- & [
102- KeyValue :: new ( "mykey1" , "myvalue1" ) ,
103- KeyValue :: new ( "mykey2" , "myvalue2" ) ,
104- ] ,
105- ) ;
106-
107- // Note that there is no ObservableHistogram instrument.
108-
109- // Create a Gauge Instrument.
110- let gauge = meter
111- . f64_gauge ( "my_gauge" )
112- . with_description ( "A gauge set to 1.0" )
113- . with_unit ( "myunit" )
114- . build ( ) ;
115-
116- gauge. record (
117- 1.0 ,
118- & [
119- KeyValue :: new ( "mykey1" , "myvalue1" ) ,
120- KeyValue :: new ( "mykey2" , "myvalue2" ) ,
121- ] ,
122- ) ;
62+ // Create a Counter Instrument.
63+ let counter = meter. u64_counter ( "my_counter" ) . build ( ) ;
12364
124- // Create a ObservableGauge instrument and register a callback that reports the measurement.
125- let _observable_gauge = meter
126- . f64_observable_gauge ( "my_observable_gauge" )
127- . with_description ( "An observable gauge set to 1.0" )
128- . with_unit ( "myunit" )
129- . with_callback ( |observer| {
130- observer. observe (
131- 1.0 ,
132- & [
133- KeyValue :: new ( "mykey1" , "myvalue1" ) ,
134- KeyValue :: new ( "mykey2" , "myvalue2" ) ,
135- ] ,
136- )
137- } )
138- . build ( ) ;
65+ loop {
66+ // Record measurements using the Counter instrument.
67+ counter. add (
68+ 10 ,
69+ & [
70+ KeyValue :: new ( "mykey1" , "myvalue1" ) ,
71+ KeyValue :: new ( "mykey2" , "myvalue2" ) ,
72+ ] ,
73+ ) ;
74+ tokio:: time:: sleep ( std:: time:: Duration :: from_secs ( 1 ) ) . await ;
75+ }
13976
14077 // Metrics are exported by default every 30 seconds when using stdout exporter,
14178 // however shutting down the MeterProvider here instantly flushes
0 commit comments