1use eyre::Result;
14use opentelemetry::{InstrumentationScope, global};
15use opentelemetry_otlp::MetricExporter;
16use opentelemetry_sdk::metrics::SdkMeterProvider;
17use opentelemetry_system_metrics::init_process_observer;
18pub fn init_metrics() -> SdkMeterProvider {
24 let exporter = MetricExporter::builder()
25 .with_tonic()
26 .build()
27 .expect("Failed to create metric exporter");
28
29 SdkMeterProvider::builder()
30 .with_periodic_exporter(exporter)
31 .build()
32}
33
34pub async fn run_metrics_monitor(meter_id: String) -> Result<()> {
35 let meter_provider = init_metrics();
36 global::set_meter_provider(meter_provider.clone());
37 let scope = InstrumentationScope::builder(meter_id)
38 .with_version("1.0")
39 .build();
40 let meter = global::meter_with_scope(scope);
41
42 init_process_observer(meter).await.unwrap();
43 Ok(())
44}