1
+ /*
1
2
use opentelemetry::{global, Key, KeyValue};
2
3
use opentelemetry_otlp::{ExportConfig, Protocol, WithExportConfig};
3
4
use opentelemetry_sdk::{
@@ -174,18 +175,22 @@ async fn foo() {
174
175
175
176
tracing::info!(histogram.baz = 10, "histogram example",);
176
177
}
177
- /*
178
- use opentelemetry::KeyValue;
178
+
179
+ */
180
+
181
+ use opentelemetry:: { global, Key , KeyValue } ;
179
182
use opentelemetry_otlp:: { ExportConfig , Protocol , TonicExporterBuilder , WithExportConfig } ;
180
183
use opentelemetry_resource_detectors:: { OsResourceDetector , ProcessResourceDetector } ;
181
184
use opentelemetry_sdk:: metrics:: reader:: DefaultAggregationSelector ;
182
185
use opentelemetry_sdk:: resource:: {
183
186
ResourceDetector , SdkProvidedResourceDetector , TelemetryResourceDetector ,
184
187
} ;
185
188
use opentelemetry_sdk:: trace:: config;
186
- use opentelemetry_sdk::Resource;
189
+ use opentelemetry_sdk:: { Resource , runtime } ;
187
190
use opentelemetry_semantic_conventions:: resource;
188
191
use std:: time:: Duration ;
192
+ use opentelemetry_sdk:: metrics:: { Aggregation , Instrument , MeterProviderBuilder , PeriodicReader , SdkMeterProvider , Stream } ;
193
+ use opentelemetry_stdout:: MetricsExporter ;
189
194
use tracing:: { debug, error, info, instrument, warn, Level } ;
190
195
use tracing_opentelemetry:: OpenTelemetryLayer ;
191
196
use tracing_subscriber:: layer:: SubscriberExt ;
@@ -216,7 +221,7 @@ fn otlp_exporter() -> TonicExporterBuilder {
216
221
protocol : Protocol :: Grpc ,
217
222
} ;
218
223
opentelemetry_otlp:: new_exporter ( ) . tonic ( )
219
- // .with_export_config(export_config)
224
+ . with_export_config ( export_config)
220
225
}
221
226
222
227
#[ tokio:: main]
@@ -225,14 +230,45 @@ async fn main() -> anyhow::Result<()> {
225
230
. tracing ( )
226
231
. with_exporter ( otlp_exporter ( ) )
227
232
. with_trace_config ( config ( ) . with_resource ( resource ( ) ) )
228
- .install_batch(opentelemetry_sdk::runtime::Tokio)?;
233
+ . install_batch ( runtime:: Tokio ) ?;
234
+
235
+
236
+
237
+
238
+ // does not work for metrics
239
+ // let metrics = opentelemetry_otlp::new_pipeline()
240
+ // .metrics(runtime::Tokio)
241
+ // .with_exporter(otlp_exporter())
242
+ // .with_period(Duration::from_secs(3))
243
+ // .with_resource(resource())
244
+ // .with_aggregation_selector(DefaultAggregationSelector::new())
245
+ // .build()?;
246
+
247
+
248
+
249
+ let stdout_reader = PeriodicReader :: builder (
250
+ MetricsExporter :: default ( ) ,
251
+ runtime:: Tokio ,
252
+ )
253
+ . build ( ) ;
254
+
255
+ let metrics = {
256
+ let reader =
257
+ PeriodicReader :: builder ( MetricsExporter :: default ( ) , runtime:: Tokio )
258
+ . with_interval ( Duration :: from_secs ( 3 ) )
259
+ . build ( ) ;
260
+ SdkMeterProvider :: builder ( )
261
+ . with_resource ( resource ( ) )
262
+ . with_reader ( reader)
263
+ . with_reader ( stdout_reader)
264
+ . build ( )
265
+ } ;
266
+
267
+
268
+ global:: set_meter_provider ( metrics. clone ( ) ) ;
269
+
270
+
229
271
230
- let metrics = opentelemetry_otlp::new_pipeline()
231
- .metrics(opentelemetry_sdk::runtime::Tokio)
232
- .with_exporter(otlp_exporter())
233
- .with_resource(resource())
234
- .with_aggregation_selector(DefaultAggregationSelector::new())
235
- .build()?;
236
272
237
273
let filter = EnvFilter :: builder ( )
238
274
. with_default_directive ( Level :: INFO . into ( ) )
@@ -245,20 +281,28 @@ async fn main() -> anyhow::Result<()> {
245
281
. with ( OpenTelemetryLayer :: new ( tracer) ) // traces_layer
246
282
. init ( ) ;
247
283
248
- for _ in 1..5 {
249
- test_instrument ().await;
284
+ for _ in 1 ..10 {
285
+ test_instrument2 ( ) . await ;
250
286
}
251
287
288
+ let _ = tokio:: time:: sleep ( Duration :: from_secs ( 2 ) ) . await ;
252
289
println ! ( "finish" ) ;
253
290
Ok ( ( ) )
254
291
}
255
292
293
+ #[ instrument]
294
+ async fn test_instrument2 ( ) {
295
+ tokio:: time:: sleep ( Duration :: from_secs ( 1 ) ) . await ;
296
+ info ! ( monotonic_counter. baz = 1 , "info log" ) ;
297
+
298
+ }
299
+
256
300
#[ instrument]
257
301
async fn test_instrument ( ) {
258
302
debug ! ( "test debug" ) ;
259
303
info ! ( "test info" ) ;
260
304
warn ! ( "test warn" ) ;
261
- error!("test error");
305
+ error ! ( "test error" ) ;
262
306
tokio:: time:: sleep ( Duration :: from_secs ( 1 ) ) . await ;
263
307
info ! (
264
308
monotonic_counter. foo = 1_u64 ,
@@ -269,4 +313,4 @@ async fn test_instrument() {
269
313
270
314
info ! ( histogram. baz = 10 , "histogram example" , ) ;
271
315
}
272
- */
316
+
0 commit comments