From 65de23e86c044c0461fbd5689d7a728c379d31d0 Mon Sep 17 00:00:00 2001 From: KodrAus Date: Tue, 12 Mar 2024 07:53:36 +1000 Subject: [PATCH] start sketching out internal metrics --- targets/otlp/src/data/metrics.rs | 1 + targets/otlp/src/internal_metrics.rs | 42 ++++++++++++++++++++++++++++ targets/otlp/src/lib.rs | 2 ++ 3 files changed, 45 insertions(+) create mode 100644 targets/otlp/src/internal_metrics.rs diff --git a/targets/otlp/src/data/metrics.rs b/targets/otlp/src/data/metrics.rs index 48e4222..5dd63aa 100644 --- a/targets/otlp/src/data/metrics.rs +++ b/targets/otlp/src/data/metrics.rs @@ -23,6 +23,7 @@ pub(crate) struct EventEncoder { pub(crate) struct SumEncoder { pub single_point_per_sample: bool, + // TODO: delta to cumulative } impl SumEncoder { diff --git a/targets/otlp/src/internal_metrics.rs b/targets/otlp/src/internal_metrics.rs new file mode 100644 index 0000000..b776c46 --- /dev/null +++ b/targets/otlp/src/internal_metrics.rs @@ -0,0 +1,42 @@ +use std::sync::atomic::{AtomicUsize, Ordering}; + +use emit::Clock; + +macro_rules! increment { + ($metric:path) => { + increment!($metric, 1); + }; + ($metic:path, $by:expr) => { + $metic.fetch_add($by, std::sync::atomic::Ordering::Relaxed); + }; +} + +pub(crate) static INTERNAL_METRICS: InternalMetrics = InternalMetrics { + log_batches_sent: AtomicUsize::new(0), +}; + +pub(crate) struct InternalMetrics { + pub(crate) log_batches_sent: AtomicUsize, +} + +impl InternalMetrics { + pub(crate) fn emit(&self) { + let InternalMetrics { + ref log_batches_sent, + } = self; + + let rt = emit::runtime::internal(); + + let extent = rt.now(); + + emit::info!( + rt, + extent, + "{metric_value} {signal} batches sent", + metric_name: "batches_sent", + metric_agg: "count", + metric_value: log_batches_sent.load(Ordering::Relaxed), + signal: "logs" + ); + } +} diff --git a/targets/otlp/src/lib.rs b/targets/otlp/src/lib.rs index e4eb7e8..e44e2d9 100644 --- a/targets/otlp/src/lib.rs +++ b/targets/otlp/src/lib.rs @@ -1,5 +1,7 @@ #![feature(stmt_expr_attributes, proc_macro_hygiene)] +#[macro_use] +mod internal_metrics; mod client; pub mod data; mod error;