11use opentelemetry:: global;
22use opentelemetry:: KeyValue ;
33use opentelemetry_sdk:: metrics:: PeriodicReader ;
4+ use opentelemetry_sdk:: Resource ;
45use std:: error:: Error ;
56use tracing:: info;
67use tracing_subscriber:: fmt;
@@ -13,6 +14,10 @@ fn init_meter_provider() -> opentelemetry_sdk::metrics::SdkMeterProvider {
1314 let reader = PeriodicReader :: builder ( exporter, opentelemetry_sdk:: runtime:: Tokio ) . build ( ) ;
1415
1516 let provider = opentelemetry_sdk:: metrics:: SdkMeterProvider :: builder ( )
17+ . with_resource ( Resource :: new ( [ KeyValue :: new (
18+ "service.name" ,
19+ "self-diagnostics-example" ,
20+ ) ] ) )
1621 . with_reader ( reader)
1722 . build ( ) ;
1823
@@ -26,7 +31,7 @@ async fn main() -> Result<(), Box<dyn Error + Send + Sync + 'static>> {
2631 // OpenTelemetry uses `tracing` crate for its internal logging. Unless a
2732 // tracing subscriber is set, the logs will be discarded. In this example,
2833 // we configure a `tracing` subscriber to:
29- // 1. Print logs of level INFO or higher to stdout using tracing's fmt layer.
34+ // 1. Print logs of level DEBUG or higher to stdout using tracing's fmt layer.
3035 // 2. Filter logs from OpenTelemetry's dependencies (like tonic, hyper,
3136 // reqwest etc. which are commonly used by the OTLP exporter) to only print
3237 // ERROR-level logs. This filtering helps reduce repetitive log messages
@@ -39,7 +44,7 @@ async fn main() -> Result<(), Box<dyn Error + Send + Sync + 'static>> {
3944 // Hence, one may use "add_directive("opentelemetry=off".parse().unwrap())"
4045 // to turn off all logs from OpenTelemetry.
4146
42- let filter = EnvFilter :: new ( "info " )
47+ let filter = EnvFilter :: new ( "debug " )
4348 . add_directive ( "hyper=error" . parse ( ) . unwrap ( ) )
4449 . add_directive ( "tonic=error" . parse ( ) . unwrap ( ) )
4550 . add_directive ( "h2=error" . parse ( ) . unwrap ( ) )
@@ -54,11 +59,14 @@ async fn main() -> Result<(), Box<dyn Error + Send + Sync + 'static>> {
5459 info ! ( "Starting self-diagnostics example" ) ;
5560
5661 let meter = global:: meter ( "example" ) ;
57- // Create a counter using an invalid name to trigger
58- // internal log about the same.
59- let counter = meter. u64_counter ( "my_counter with_space" ) . build ( ) ;
62+ let counter = meter. u64_counter ( "my_counter" ) . build ( ) ;
6063 counter. add ( 10 , & [ KeyValue :: new ( "key" , "value" ) ] ) ;
6164
65+ let _observable_counter = meter
66+ . u64_observable_counter ( "my_observable_counter" )
67+ . with_callback ( |observer| observer. observe ( 10 , & [ KeyValue :: new ( "key" , "value" ) ] ) )
68+ . build ( ) ;
69+
6270 meter_provider. shutdown ( ) ?;
6371 info ! ( "Shutdown complete. Bye!" ) ;
6472 Ok ( ( ) )
0 commit comments