mirror of
https://github.com/juspay/hyperswitch.git
synced 2025-10-27 11:24:45 +08:00
feat(metrics): add histogram and update opentelemetry dependencies (#32)
This commit is contained in:
@ -12,8 +12,9 @@ build = "src/build.rs"
|
||||
config = { version = "0.13.2", features = ["toml"] }
|
||||
gethostname = "0.2.3"
|
||||
once_cell = "1.15.0"
|
||||
opentelemetry = { version = "0.17", features = ["rt-tokio-current-thread", "metrics"] }
|
||||
opentelemetry-otlp = { version = "0.10", features = ["metrics"] }
|
||||
opentelemetry = { git = "https://github.com/jarnura/opentelemetry-rust", rev = "a82056696ca3d26960458269a894e5cf15056ad8", features = ["rt-tokio-current-thread", "metrics"] }
|
||||
opentelemetry-otlp = { git = "https://github.com/jarnura/opentelemetry-rust", rev = "a82056696ca3d26960458269a894e5cf15056ad8", features = ["metrics"] }
|
||||
|
||||
rustc-hash = "1.1"
|
||||
serde = { version = "1.0.145", features = ["derive"] }
|
||||
serde_json = "1.0.85"
|
||||
@ -25,7 +26,7 @@ tracing = "0.1.36"
|
||||
tracing-actix-web = { version = "0.6.1", features = ["opentelemetry_0_17"], optional = true }
|
||||
tracing-appender = "0.2.2"
|
||||
tracing-core = "0.1.29"
|
||||
tracing-opentelemetry = { version = "0.17" }
|
||||
tracing-opentelemetry = { git = "https://github.com/jarnura/tracing", rev = "16d277227f60788750528e4f4cc1db4f36b0869f" }
|
||||
tracing-subscriber = { version = "0.3.15", default-features = true, features = ["json", "env-filter", "registry"] }
|
||||
vergen = { version = "7.4.2", optional = true }
|
||||
|
||||
|
||||
@ -3,20 +3,19 @@
|
||||
//!
|
||||
use std::{path::PathBuf, time::Duration};
|
||||
|
||||
use once_cell::sync::Lazy;
|
||||
use opentelemetry::{
|
||||
global,
|
||||
global, runtime,
|
||||
sdk::{
|
||||
metrics::{selectors, PushController},
|
||||
export::metrics::aggregation::cumulative_temporality_selector,
|
||||
metrics::{controllers::BasicController, selectors::simple},
|
||||
propagation::TraceContextPropagator,
|
||||
trace, Resource,
|
||||
},
|
||||
util::tokio_interval_stream,
|
||||
KeyValue,
|
||||
};
|
||||
use opentelemetry_otlp::WithExportConfig;
|
||||
use tracing_appender::non_blocking::WorkerGuard;
|
||||
// use tracing_subscriber::fmt::format::FmtSpan;
|
||||
// use tracing_bunyan_formatter::JsonStorageLayer;
|
||||
use tracing_subscriber::{
|
||||
filter, fmt, layer::SubscriberExt, util::SubscriberInitExt, EnvFilter, Layer,
|
||||
};
|
||||
@ -51,7 +50,7 @@ where
|
||||
#[derive(Debug)]
|
||||
pub struct TelemetryGuard {
|
||||
_log_guards: Vec<WorkerGuard>,
|
||||
_metric_controller: Option<PushController>,
|
||||
_metric_controller: Option<BasicController>,
|
||||
}
|
||||
|
||||
///
|
||||
@ -92,29 +91,13 @@ pub fn setup<Str: AsRef<str>>(
|
||||
|
||||
let file_filter = filter::Targets::new().with_default(conf.file.level.into_level());
|
||||
let file_layer = FormattingLayer::new(service_name, file_writer).with_filter(file_filter);
|
||||
// let fmt_layer = fmt::layer()
|
||||
// .with_writer(file_writer)
|
||||
// .with_target(true)
|
||||
// .with_level(true)
|
||||
// .with_span_events(FmtSpan::ACTIVE)
|
||||
// .json();
|
||||
|
||||
// Some(fmt_layer)
|
||||
//Some(FormattingLayer::new(service_name, file_writer))
|
||||
Some(file_layer)
|
||||
// Some(BunyanFormattingLayer::new("router".into(), file_writer))
|
||||
} else {
|
||||
None
|
||||
};
|
||||
|
||||
let telemetry_layer = match telemetry {
|
||||
Some(Ok(ref tracer)) => Some(tracing_opentelemetry::layer().with_tracer(tracer.clone())),
|
||||
_ => None,
|
||||
};
|
||||
|
||||
// Use 'RUST_LOG' environment variable will override the config settings
|
||||
let subscriber = tracing_subscriber::registry()
|
||||
.with(telemetry_layer)
|
||||
.with(StorageSubscription)
|
||||
.with(file_writer)
|
||||
.with(
|
||||
@ -166,15 +149,29 @@ pub fn setup<Str: AsRef<str>>(
|
||||
})
|
||||
}
|
||||
|
||||
fn setup_metrics() -> Option<PushController> {
|
||||
static HISTOGRAM_BUCKETS: Lazy<[f64; 15]> = Lazy::new(|| {
|
||||
let mut init = 0.01;
|
||||
let mut buckets: [f64; 15] = [0.0; 15];
|
||||
|
||||
for bucket in &mut buckets {
|
||||
init *= 2.0;
|
||||
*bucket = init;
|
||||
}
|
||||
buckets
|
||||
});
|
||||
|
||||
fn setup_metrics() -> Option<BasicController> {
|
||||
opentelemetry_otlp::new_pipeline()
|
||||
.metrics(tokio::spawn, tokio_interval_stream)
|
||||
.metrics(
|
||||
simple::histogram(*HISTOGRAM_BUCKETS),
|
||||
cumulative_temporality_selector(),
|
||||
runtime::TokioCurrentThread,
|
||||
)
|
||||
.with_exporter(
|
||||
opentelemetry_otlp::new_exporter().tonic().with_env(), // can also config it using with_* functions like the tracing part above.
|
||||
)
|
||||
.with_period(Duration::from_secs(3))
|
||||
.with_timeout(Duration::from_secs(10))
|
||||
.with_aggregator_selector(selectors::simple::Selector::Exact)
|
||||
.build()
|
||||
.map_err(|err| eprintln!("Failed to Setup Metrics with {:?}", err))
|
||||
.ok()
|
||||
|
||||
Reference in New Issue
Block a user