From 8dc9a94800a820ca67c0ddf4706a5a26aa575531 Mon Sep 17 00:00:00 2001 From: Zeying Zhu <50204836+zzylol@users.noreply.github.com> Date: Mon, 12 Oct 2026 19:29:19 +0000 Subject: [PATCH 1/2] Classify attribute cardinality: identifier-like, growing, stable asap_sketches gains per_attribute: each point becomes one series per attribute key (attribute.key=) whose values are sketched, so an HLL counts distinct values per key. The detector and exact_answers classify each key against its own recent windows (distinct/points >= 0.9 identifier-like; > 20% above the baseline mean growing) and emit the class as a gauge and class changes as OTLP log events (to Loki). Adds the cardinality scenario and dashboard; stage configs move to one directory per use case. --- asap-precompute-rs/src/answers.rs | 214 ++++++++++ asap-precompute-rs/src/matchers.rs | 23 ++ asap-precompute-rs/src/otap/answer_nodes.rs | 153 +++++-- asap-precompute-rs/src/otap/config.rs | 3 + asap-precompute-rs/src/otap/processor.rs | 17 +- .../cardinality/branch.yaml | 55 +++ .../cardinality/detector.yaml | 37 ++ .../cardinality/exact.yaml | 38 ++ .../cardinality/generator-a.yaml | 37 ++ .../cardinality/generator-b.yaml | 37 ++ .../{pipelines => cardinality}/merge.yaml | 0 deploy/telemetry-functions/compose.yaml | 15 +- .../grafana/dashboards/cardinality.json | 376 ++++++++++++++++++ .../{pipelines => latency}/branch.yaml | 0 .../{pipelines => latency}/detector.yaml | 0 .../{pipelines => latency}/exact.yaml | 0 .../{pipelines => latency}/generator-a.yaml | 0 .../{pipelines => latency}/generator-b.yaml | 0 deploy/telemetry-functions/latency/merge.yaml | 33 ++ deploy/telemetry-functions/run.sh | 4 +- docs/images/cardinality-grafana.png | Bin 0 -> 167917 bytes 21 files changed, 1009 insertions(+), 33 deletions(-) create mode 100644 deploy/telemetry-functions/cardinality/branch.yaml create mode 100644 deploy/telemetry-functions/cardinality/detector.yaml create mode 100644 deploy/telemetry-functions/cardinality/exact.yaml create mode 100644 deploy/telemetry-functions/cardinality/generator-a.yaml create mode 100644 deploy/telemetry-functions/cardinality/generator-b.yaml rename deploy/telemetry-functions/{pipelines => cardinality}/merge.yaml (100%) create mode 100644 deploy/telemetry-functions/grafana/dashboards/cardinality.json rename deploy/telemetry-functions/{pipelines => latency}/branch.yaml (100%) rename deploy/telemetry-functions/{pipelines => latency}/detector.yaml (100%) rename deploy/telemetry-functions/{pipelines => latency}/exact.yaml (100%) rename deploy/telemetry-functions/{pipelines => latency}/generator-a.yaml (100%) rename deploy/telemetry-functions/{pipelines => latency}/generator-b.yaml (100%) create mode 100644 deploy/telemetry-functions/latency/merge.yaml create mode 100644 docs/images/cardinality-grafana.png diff --git a/asap-precompute-rs/src/answers.rs b/asap-precompute-rs/src/answers.rs index 65a3fab..7b0baf6 100644 --- a/asap-precompute-rs/src/answers.rs +++ b/asap-precompute-rs/src/answers.rs @@ -184,6 +184,47 @@ pub fn exact_answers( out } +#[cfg(test)] +mod classifier_tests { + use super::*; + + fn attr(key: &str) -> SketchEnvelope { + SketchEnvelope { + metric_name: "m".into(), + labels: vec![KeyValue::new("attribute.key", key)], + ..Default::default() + } + } + + fn state(out: &[SketchEnvelope]) -> String { + out.iter() + .find(|e| e.metric_name == "asap.cardinality.state" && e.value == 1.0) + .and_then(|e| e.labels.iter().find(|kv| kv.key == "state")) + .map(|kv| kv.value.clone()) + .unwrap() + } + + #[test] + fn identifier_growing_and_stable() { + let mut c = CardinalityClassifier::default(); + let (out, event) = c.observe(&attr("user.id"), "sketch", 980.0, 1000); + assert_eq!(state(&out), "identifier-like"); + assert!(event.unwrap().body.contains("identifier-like")); + for _ in 0..4 { + let (out, _) = c.observe(&attr("pod"), "sketch", 50.0, 1000); + assert_eq!(state(&out), "stable"); + } + let (out, event) = c.observe(&attr("pod"), "sketch", 70.0, 1000); + assert_eq!(state(&out), "growing"); + assert_eq!(event.unwrap().attributes[1].value, "growing"); + // No event while the state does not change. + let (_, event) = c.observe(&attr("pod"), "sketch", 90.0, 1000); + assert!(event.is_none()); + // Too few points: no answer. + assert!(c.observe(&attr("rare"), "sketch", 5.0, 5).0.is_empty()); + } +} + #[cfg(test)] mod tests { use super::*; @@ -282,3 +323,176 @@ mod tests { .any(|kv| kv.key == "method" && kv.value == "sketch"))); } } + +/// A detection result worth telling a person about, emitted as a log record. +#[derive(Clone, Debug, PartialEq)] +pub struct Event { + /// Window the event refers to. + pub window_end_ms: u64, + /// `sketch` or `exact`. + pub method: String, + /// Event kind, e.g. `cardinality`. + pub kind: String, + /// Series labels plus event fields. + pub attributes: Vec, + /// One readable sentence. + pub body: String, +} + +/// Cardinality class of an attribute key in one window. +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub enum CardinalityState { + /// Distinct values close to the baseline. + Stable, + /// Distinct values well above the baseline mean. + Growing, + /// Almost every point carries a new value, like an identifier. + IdentifierLike, +} + +impl CardinalityState { + /// Name used in labels and events. + pub fn name(self) -> &'static str { + match self { + Self::Stable => "stable", + Self::Growing => "growing", + Self::IdentifierLike => "identifier-like", + } + } +} + +/// Thresholds for [`CardinalityClassifier`]. +#[derive(Clone, Debug, serde::Deserialize)] +#[serde(deny_unknown_fields)] +pub struct CardinalityRules { + /// Windows kept as the baseline. + #[serde(default = "default_baseline")] + pub baseline_windows: usize, + /// distinct / points at or above which a key is identifier-like. + #[serde(default = "default_identifier_ratio")] + pub identifier_ratio: f64, + /// Fraction above the baseline mean at which a key is growing. + #[serde(default = "default_growth")] + pub growth: f64, + /// Points needed before classifying. + #[serde(default = "default_min_points")] + pub min_points: u64, +} + +fn default_baseline() -> usize { + 10 +} +fn default_identifier_ratio() -> f64 { + 0.9 +} +fn default_growth() -> f64 { + 0.2 +} +fn default_min_points() -> u64 { + 100 +} + +impl Default for CardinalityRules { + fn default() -> Self { + Self { + baseline_windows: default_baseline(), + identifier_ratio: default_identifier_ratio(), + growth: default_growth(), + min_points: default_min_points(), + } + } +} + +/// Classifies each attribute key against its own recent windows. The same +/// rules run on sketch and exact answers so their labels can be compared. +#[derive(Default)] +pub struct CardinalityClassifier { + rules: CardinalityRules, + history: HashMap, Option)>, +} + +impl CardinalityClassifier { + /// Classifier with the given thresholds. + pub fn new(rules: CardinalityRules) -> Self { + Self { + rules, + history: HashMap::new(), + } + } + + /// Classifies one window of `series` (its distinct count and points), and + /// returns its state gauge plus an event when the state changed. + pub fn observe( + &mut self, + template: &SketchEnvelope, + method: &str, + distinct: f64, + points: u64, + ) -> (Vec, Option) { + if points < self.rules.min_points { + return (Vec::new(), None); + } + let key = format!("{}|{:?}", template.metric_name, template.labels); + let (window, previous) = self.history.entry(key).or_default(); + let baseline = + (window.len() >= 3).then(|| window.iter().sum::() / window.len() as f64); + let ratio = distinct / points as f64; + let state = if ratio >= self.rules.identifier_ratio { + CardinalityState::IdentifierLike + } else if baseline.is_some_and(|b| distinct > b * (1.0 + self.rules.growth)) { + CardinalityState::Growing + } else { + CardinalityState::Stable + }; + window.push_back(distinct); + if window.len() > self.rules.baseline_windows { + window.pop_front(); + } + let mut out = vec![gauge(template, "asap.distinct.ratio", method, &[], ratio)]; + out.extend( + [ + CardinalityState::Stable, + CardinalityState::Growing, + CardinalityState::IdentifierLike, + ] + .into_iter() + .map(|s| { + let v = if s == state { 1.0 } else { 0.0 }; + gauge( + template, + "asap.cardinality.state", + method, + &[("state", s.name().into())], + v, + ) + }), + ); + let changed = *previous != Some(state); + *previous = Some(state); + let attribute = template + .labels + .iter() + .find(|kv| kv.key == crate::matchers::ATTRIBUTE_KEY_LABEL) + .map(|kv| kv.value.clone()) + .unwrap_or_default(); + let event = changed.then(|| Event { + window_end_ms: template.window_end_ms, + method: method.into(), + kind: "cardinality".into(), + attributes: vec![ + KeyValue::new("attribute.key", attribute.clone()), + KeyValue::new("state", state.name()), + KeyValue::new("distinct", format!("{distinct:.0}")), + KeyValue::new("points", points.to_string()), + ], + body: format!( + "attribute {attribute} of {} is {}: {distinct:.0} distinct values in {points} points ({:.0}%){}", + template.metric_name, + state.name(), + ratio * 100.0, + baseline.map(|b| format!(", baseline {b:.0}")).unwrap_or_default() + ), + }); + (out, event) + } +} diff --git a/asap-precompute-rs/src/matchers.rs b/asap-precompute-rs/src/matchers.rs index 4f2c99c..c932fda 100644 --- a/asap-precompute-rs/src/matchers.rs +++ b/asap-precompute-rs/src/matchers.rs @@ -242,3 +242,26 @@ mod tests { assert!(LabelMatcher::matches_all(&matchers, &obs)); } } + +/// Label carrying the attribute key in per-attribute series. +pub const ATTRIBUTE_KEY_LABEL: &str = "attribute.key"; + +/// Splits one data point into one observation per attribute key in `keys` +/// (`"*"` = every attribute it has): labels `attribute.key=`, value = +/// the attribute's value as bytes. A cardinality or frequency sketch over +/// these series answers "how many distinct values" and "which values +/// dominate" per attribute key. +pub fn per_attribute(obs: &Observation, keys: &[String]) -> Vec { + let all = keys.iter().any(|k| k == "*"); + obs.labels + .iter() + .filter(|kv| all || keys.contains(&kv.key)) + .map(|kv| Observation { + timestamp_ms: obs.timestamp_ms, + metric: obs.metric.clone(), + resource_labels: obs.resource_labels.clone(), + labels: vec![KeyValue::new(ATTRIBUTE_KEY_LABEL, kv.key.clone())], + value: crate::observation::ObservationValue::bytes(kv.value.as_bytes().to_vec()), + }) + .collect() +} diff --git a/asap-precompute-rs/src/otap/answer_nodes.rs b/asap-precompute-rs/src/otap/answer_nodes.rs index c7a08c3..1fab626 100644 --- a/asap-precompute-rs/src/otap/answer_nodes.rs +++ b/asap-precompute-rs/src/otap/answer_nodes.rs @@ -40,6 +40,9 @@ use serde::Deserialize; use otel_arrow_dfe_pdata::proto::opentelemetry::common::v1::{ AnyValue, InstrumentationScope, KeyValue as OtlpKeyValue, }; +use otel_arrow_dfe_pdata::proto::opentelemetry::logs::v1::{ + LogRecord, LogsData, ResourceLogs, ScopeLogs, SeverityNumber, +}; use otel_arrow_dfe_pdata::proto::opentelemetry::metrics::v1::{ Gauge, Metric, MetricsData, NumberDataPoint, ResourceMetrics, ScopeMetrics, }; @@ -48,7 +51,9 @@ use otel_arrow_dfe_pdata::proto::OtlpProtoMessage; use otel_arrow_dfe_pdata::OtapPayload; use super::codec::decode_pdata_to_observations; -use crate::answers::{exact_answers, sketch_answers, ExactWindow}; +use crate::answers::{ + exact_answers, sketch_answers, CardinalityClassifier, CardinalityRules, Event, ExactWindow, +}; use crate::envelope::SketchEnvelope; use crate::observation::{KeyValue, Observation, ObservationValueKind}; @@ -80,6 +85,9 @@ pub struct DetectorConfig { /// Heavy hitters answered from CMS + heap windows. #[serde(default = "default_k")] pub k: usize, + /// Thresholds for classifying per-attribute cardinality. + #[serde(default)] + pub cardinality: CardinalityRules, } /// `exact_answers` configuration. @@ -104,6 +112,9 @@ pub struct ExactConfig { /// Heavy hitters per attribute key. #[serde(default = "default_k")] pub k: usize, + /// Thresholds for classifying per-attribute cardinality. + #[serde(default)] + pub cardinality: CardinalityRules, } fn now_ms() -> u64 { @@ -154,16 +165,66 @@ fn gauges_pdata(envs: &[SketchEnvelope]) -> Result { Ok(OtapPdata::new_todo_context(payload)) } +/// Detection events as OTLP log records (for Loki or any log backend). +fn events_pdata(events: &[Event]) -> Result { + let records = events + .iter() + .map(|e| { + let mut attributes = vec![ + OtlpKeyValue::new("event.kind", AnyValue::new_string(e.kind.clone())), + OtlpKeyValue::new("method", AnyValue::new_string(e.method.clone())), + ]; + attributes.extend(e.attributes.iter().map(|kv| { + OtlpKeyValue::new(kv.key.clone(), AnyValue::new_string(kv.value.clone())) + })); + LogRecord::build() + .time_unix_nano(e.window_end_ms * 1_000_000) + .observed_time_unix_nano(e.window_end_ms * 1_000_000) + .severity_number(SeverityNumber::Info) + .severity_text("INFO") + .body(AnyValue::new_string(e.body.clone())) + .attributes(attributes) + .finish() + }) + .collect::>(); + let data = LogsData::new(vec![ResourceLogs::new( + Resource::build() + .attributes(vec![OtlpKeyValue::new( + "service.name", + AnyValue::new_string("asap-detector"), + )]) + .finish(), + vec![ScopeLogs::new( + InstrumentationScope::build().name("asap.events").finish(), + records, + )], + )]); + let payload: OtapPayload = OtlpProtoMessage::Logs(data) + .try_into() + .map_err(|e| format!("{e:?}"))?; + Ok(OtapPdata::new_todo_context(payload)) +} + async fn emit( envs: &[SketchEnvelope], + events: &[Event], effects: &mut local::EffectHandler, ) -> Result<(), Error> { - if envs.is_empty() { - return Ok(()); + if !envs.is_empty() { + match gauges_pdata(envs) { + Ok(pdata) => effects.send_message_with_source_node(pdata).await?, + Err(e) => effects.info(&format!("answers: encode failed: {e}")).await, + } } - match gauges_pdata(envs) { - Ok(pdata) => effects.send_message_with_source_node(pdata).await?, - Err(e) => effects.info(&format!("answers: encode failed: {e}")).await, + if !events.is_empty() { + match events_pdata(events) { + Ok(pdata) => effects.send_message_with_source_node(pdata).await?, + Err(e) => { + effects + .info(&format!("answers: event encode failed: {e}")) + .await + } + } } Ok(()) } @@ -185,6 +246,20 @@ async fn observations( struct SketchDetector { config: DetectorConfig, + cardinality: CardinalityClassifier, +} + +/// The `bound="estimate"` value of `metric` among `answers`. +fn estimate_of(answers: &[SketchEnvelope], metric: &str) -> Option { + answers + .iter() + .find(|e| { + e.metric_name == metric + && e.labels + .iter() + .any(|kv| kv.key == "bound" && kv.value == "estimate") + }) + .map(|e| e.value) } #[async_trait(?Send)] @@ -197,17 +272,25 @@ impl local::Processor for SketchDetector { let Message::PData(pdata) = msg else { return Ok(()); }; - let mut out = Vec::new(); + let (mut out, mut events) = (Vec::new(), Vec::new()); for obs in observations(pdata, effects).await { let Some(env) = obs.value.envelope.filter(|e| !e.payload.is_empty()) else { continue; }; match sketch_answers(&env, &self.config.quantiles, self.config.k) { - Ok(answers) => out.extend(answers), + Ok(answers) => { + if let Some(d) = estimate_of(&answers, "asap.distinct") { + let (gauges, event) = + self.cardinality.observe(&env, "sketch", d, env.count); + out.extend(gauges); + events.extend(event); + } + out.extend(answers); + } Err(e) => effects.info(&format!("sketch_detector: {e}")).await, } } - emit(&out, effects).await + emit(&out, &events, effects).await } } @@ -219,6 +302,7 @@ struct ExactState { struct ExactAnswers { config: ExactConfig, + cardinality: CardinalityClassifier, /// Open windows by window end. windows: BTreeMap, emitted_until: u64, @@ -270,7 +354,13 @@ impl ExactAnswers { w.values.push(obs.value.float); w.points += 1; } - for attr in &self.config.per_attribute { + let all = self.config.per_attribute.iter().any(|k| k == "*"); + let keys: Vec = if all { + obs.labels.iter().map(|kv| kv.key.clone()).collect() + } else { + self.config.per_attribute.clone() + }; + for attr in &keys { let Some(value) = label(attr) else { continue }; let key = format!("a|{}|{attr}", obs.metric); let (_, w) = state.series.entry(key).or_insert_with(|| { @@ -286,15 +376,23 @@ impl ExactAnswers { } } - fn due(&mut self, now: u64) -> Vec { + fn due(&mut self, now: u64) -> (Vec, Vec) { let cutoff = now.saturating_sub(self.config.grace.as_millis() as u64); let open = self.windows.split_off(&(cutoff + 1)); let ready = std::mem::replace(&mut self.windows, open); - let mut out = Vec::new(); + let (mut out, mut events) = (Vec::new(), Vec::new()); for (end, state) in ready { self.emitted_until = self.emitted_until.max(end); for (_, (mut template, mut w)) in state.series { template.count = w.points; + if !w.distinct.is_empty() { + let distinct = w.distinct.len() as f64; + let (gauges, event) = self + .cardinality + .observe(&template, "exact", distinct, w.points); + out.extend(gauges); + events.extend(event); + } out.extend(exact_answers( &template, &mut w, @@ -303,7 +401,7 @@ impl ExactAnswers { )); } } - out + (out, events) } } @@ -328,12 +426,12 @@ impl local::Processor for ExactAnswers { Ok(()) } Message::Control(NodeControlMsg::TimerTick { .. }) => { - let out = self.due(now_ms()); - emit(&out, effects).await + let (out, events) = self.due(now_ms()); + emit(&out, &events, effects).await } Message::Control(NodeControlMsg::Shutdown { .. }) => { - let out = self.due(u64::MAX); - emit(&out, effects).await + let (out, events) = self.due(u64::MAX); + emit(&out, &events, effects).await } _ => Ok(()), } @@ -358,7 +456,10 @@ static SKETCH_DETECTOR: ProcessorFactory = ProcessorFactory { let config: DetectorConfig = serde_json::from_value(node_config.config.clone()).map_err(invalid)?; Ok(ProcessorWrapper::local( - SketchDetector { config }, + SketchDetector { + cardinality: CardinalityClassifier::new(config.cardinality.clone()), + config, + }, node, node_config, processor_config, @@ -381,6 +482,7 @@ static EXACT_ANSWERS: ProcessorFactory = ProcessorFactory { serde_json::from_value(node_config.config.clone()).map_err(invalid)?; Ok(ProcessorWrapper::local( ExactAnswers { + cardinality: CardinalityClassifier::new(config.cardinality.clone()), config, windows: BTreeMap::new(), emitted_until: 0, @@ -415,11 +517,13 @@ mod tests { #[test] fn exact_windows_by_event_time_after_grace() { + let config: ExactConfig = serde_json::from_value(serde_json::json!({ + "group_by": ["http.route"], "per_attribute": ["user.id"], "k": 2 + })) + .unwrap(); let mut exact = ExactAnswers { - config: serde_json::from_value(serde_json::json!({ - "group_by": ["http.route"], "per_attribute": ["user.id"], "k": 2 - })) - .unwrap(), + cardinality: CardinalityClassifier::new(config.cardinality.clone()), + config, windows: BTreeMap::new(), emitted_until: 0, timer_started: false, @@ -428,8 +532,8 @@ mod tests { exact.observe(&point(1_000 + i, "/a", &format!("u{}", i % 4), i as f64)); } exact.observe(&point(61_000, "/a", "u0", 1.0)); - assert!(exact.due(64_000).is_empty()); - let out = exact.due(65_000); + assert!(exact.due(64_000).0.is_empty()); + let (out, _) = exact.due(65_000); let get = |metric: &str, extra: (&str, &str)| { out.iter() .find(|e| { @@ -451,6 +555,7 @@ mod tests { exact.observe(&point(2_000, "/a", "u9", 1.0)); assert!(exact .due(125_000) + .0 .iter() .all(|e| e.window_end_ms == 120_000)); } diff --git a/asap-precompute-rs/src/otap/config.rs b/asap-precompute-rs/src/otap/config.rs index d268d2e..3ad6245 100644 --- a/asap-precompute-rs/src/otap/config.rs +++ b/asap-precompute-rs/src/otap/config.rs @@ -116,6 +116,8 @@ pub struct PluginConfig { pub quantiles: Vec, /// Labels that identify a series; empty keys series by every label. pub aggregate_by: Vec, + /// Attribute keys sketched as their own series; `"*"` = every attribute. + pub per_attribute: Vec, } impl Default for PluginConfig { @@ -134,6 +136,7 @@ impl Default for PluginConfig { transmit_sketch: true, quantiles: Vec::new(), aggregate_by: Vec::new(), + per_attribute: Vec::new(), } } } diff --git a/asap-precompute-rs/src/otap/processor.rs b/asap-precompute-rs/src/otap/processor.rs index 52a107f..ec1c3cf 100644 --- a/asap-precompute-rs/src/otap/processor.rs +++ b/asap-precompute-rs/src/otap/processor.rs @@ -93,6 +93,7 @@ use otel_arrow_dfe_otap::OTAP_PROCESSOR_FACTORIES; use crate::config::PrecomputeConfigSet; use crate::envelope::SketchEnvelope; +use crate::matchers::per_attribute; use crate::observation::ObservationValueKind; use crate::otap::config::resolve as resolve_plugin_config; use crate::otap::PluginConfig; @@ -155,6 +156,10 @@ pub struct AsapSketchesUserConfig { /// Labels that identify a series; empty keys series by every label. #[serde(default)] pub aggregate_by: Vec, + /// Sketch each listed attribute's values as its own series + /// (`attribute.key=`); `"*"` = every attribute. + #[serde(default)] + pub per_attribute: Vec, } impl AsapSketchesUserConfig { @@ -193,6 +198,7 @@ impl AsapSketchesUserConfig { transmit_sketch: self.transmit_sketch, quantiles: self.quantiles, aggregate_by: self.aggregate_by, + per_attribute: self.per_attribute, }; // Bounce the config through the resolver so config mistakes // (unsupported sketch_type, zero window) surface here rather @@ -442,7 +448,16 @@ impl local::Processor for AsapSketchesProcessor { self.emit_envelopes(&envs, effect_handler).await?; } } - for obs in &outcome.observations { + let observations = if self.plugin_config.per_attribute.is_empty() { + outcome.observations + } else { + outcome + .observations + .iter() + .flat_map(|o| per_attribute(o, &self.plugin_config.per_attribute)) + .collect() + }; + for obs in &observations { // Note: `observe` here handles both "genuine OTLP // metric" and "sketch shipped as binary inside an // OTAP metric" (an upstream asap_sketches node's diff --git a/deploy/telemetry-functions/cardinality/branch.yaml b/deploy/telemetry-functions/cardinality/branch.yaml new file mode 100644 index 0000000..52b74c1 --- /dev/null +++ b/deploy/telemetry-functions/cardinality/branch.yaml @@ -0,0 +1,55 @@ +# Stage 1 at each source: one HLL per attribute key per 1-minute window goes +# to merge; the raw points are copied to the exact baseline. +version: otel_dataflow/v1 +engine: + http_admin: + bind_address: 0.0.0.0:8085 +policies: + resources: + core_allocation: + type: core_count + count: 1 +groups: + default: + pipelines: + main: + nodes: + receiver: + type: receiver:otlp + config: + protocols: + http: {listening_addr: "0.0.0.0:4318", wait_for_result: false} + fanout: + type: processor:fanout + outputs: [sketch, raw] + config: + destinations: + - {port: sketch} + - {port: raw} + sketch: + type: urn:asap:processor:asap_sketches + config: + sketch_type: hll + window_size: 60s + output_metric_name: http.server.request.duration + per_attribute: ["*"] + omit_resource_attrs: true + to_merge: + type: exporter:otlp_http + config: + endpoint: http://merge:4318 + client_pool_size: 1 + max_in_flight: 1 + http: {timeout: 30s, compression: none} + to_exact: + type: exporter:otlp_http + config: + endpoint: http://exact:4318 + client_pool_size: 1 + max_in_flight: 1 + http: {timeout: 30s, compression: none} + connections: + - {from: receiver, to: fanout} + - {from: 'fanout["sketch"]', to: sketch} + - {from: sketch, to: to_merge} + - {from: 'fanout["raw"]', to: to_exact} diff --git a/deploy/telemetry-functions/cardinality/detector.yaml b/deploy/telemetry-functions/cardinality/detector.yaml new file mode 100644 index 0000000..e57e3cb --- /dev/null +++ b/deploy/telemetry-functions/cardinality/detector.yaml @@ -0,0 +1,37 @@ +# Distinct values per attribute key (with bounds) and its class (stable, +# growing, identifier-like) to Prometheus; class changes as events to Loki. +version: otel_dataflow/v1 +engine: + http_admin: + bind_address: 0.0.0.0:8085 +policies: + resources: + core_allocation: + type: core_count + count: 1 +groups: + default: + pipelines: + main: + nodes: + receiver: + type: receiver:otlp + config: + protocols: + http: {listening_addr: "0.0.0.0:4318", wait_for_result: false} + detector: + type: urn:asap:processor:sketch_detector + config: + cardinality: {baseline_windows: 10, identifier_ratio: 0.9, growth: 0.2} + to_prometheus: + type: exporter:otlp_http + config: + endpoint: http://prometheus:9090 + metrics_endpoint: http://prometheus:9090/api/v1/otlp/v1/metrics + logs_endpoint: http://loki:3100/otlp/v1/logs + client_pool_size: 1 + max_in_flight: 1 + http: {timeout: 30s, compression: none} + connections: + - {from: receiver, to: detector} + - {from: detector, to: to_prometheus} diff --git a/deploy/telemetry-functions/cardinality/exact.yaml b/deploy/telemetry-functions/cardinality/exact.yaml new file mode 100644 index 0000000..af1d888 --- /dev/null +++ b/deploy/telemetry-functions/cardinality/exact.yaml @@ -0,0 +1,38 @@ +# Exact baseline and ground truth: every raw point, exact answers per window. +version: otel_dataflow/v1 +engine: + http_admin: + bind_address: 0.0.0.0:8085 +policies: + resources: + core_allocation: + type: core_count + count: 1 +groups: + default: + pipelines: + main: + nodes: + receiver: + type: receiver:otlp + config: + protocols: + http: {listening_addr: "0.0.0.0:4318", wait_for_result: false} + exact: + type: urn:asap:processor:exact_answers + config: + window: 60s + per_attribute: ["*"] + cardinality: {baseline_windows: 10, identifier_ratio: 0.9, growth: 0.2} + to_prometheus: + type: exporter:otlp_http + config: + endpoint: http://prometheus:9090 + metrics_endpoint: http://prometheus:9090/api/v1/otlp/v1/metrics + logs_endpoint: http://loki:3100/otlp/v1/logs + client_pool_size: 1 + max_in_flight: 1 + http: {timeout: 30s, compression: none} + connections: + - {from: receiver, to: exact} + - {from: exact, to: to_prometheus} diff --git a/deploy/telemetry-functions/cardinality/generator-a.yaml b/deploy/telemetry-functions/cardinality/generator-a.yaml new file mode 100644 index 0000000..38f54c1 --- /dev/null +++ b/deploy/telemetry-functions/cardinality/generator-a.yaml @@ -0,0 +1,37 @@ +# Source a: four attributes with known cardinality behaviour. +version: otel_dataflow/v1 +engine: + http_admin: + bind_address: 0.0.0.0:8085 +policies: + resources: + core_allocation: + type: core_count + count: 1 +groups: + default: + pipelines: + main: + nodes: + generator: + type: urn:asap:receiver:scenario_generator + config: + seed: 1 + signals_per_second: 20000 + metric_name: http.server.request.duration + resource_attributes: {service.name: checkout, source: "a"} + attributes: + - {key: http.route, cardinality: 20, zipf: 1.1} # stable + - {key: http.method, cardinality: 5} # stable + - {key: k8s.pod.name, cardinality: 50, growth_per_minute: 0.05} # growing + - {key: user.id, unique: true} # identifier-like + value: {lognormal: {median: 50.0, sigma: 0.6}} + export: + type: exporter:otlp_http + config: + endpoint: http://branch-a:4318 + client_pool_size: 1 + max_in_flight: 1 + http: {timeout: 30s, compression: none} + connections: + - {from: generator, to: export} diff --git a/deploy/telemetry-functions/cardinality/generator-b.yaml b/deploy/telemetry-functions/cardinality/generator-b.yaml new file mode 100644 index 0000000..cd76e55 --- /dev/null +++ b/deploy/telemetry-functions/cardinality/generator-b.yaml @@ -0,0 +1,37 @@ +# Source b: four attributes with known cardinality behaviour. +version: otel_dataflow/v1 +engine: + http_admin: + bind_address: 0.0.0.0:8085 +policies: + resources: + core_allocation: + type: core_count + count: 1 +groups: + default: + pipelines: + main: + nodes: + generator: + type: urn:asap:receiver:scenario_generator + config: + seed: 2 + signals_per_second: 20000 + metric_name: http.server.request.duration + resource_attributes: {service.name: checkout, source: "b"} + attributes: + - {key: http.route, cardinality: 20, zipf: 1.1} # stable + - {key: http.method, cardinality: 5} # stable + - {key: k8s.pod.name, cardinality: 50, growth_per_minute: 0.05} # growing + - {key: user.id, unique: true} # identifier-like + value: {lognormal: {median: 50.0, sigma: 0.6}} + export: + type: exporter:otlp_http + config: + endpoint: http://branch-b:4318 + client_pool_size: 1 + max_in_flight: 1 + http: {timeout: 30s, compression: none} + connections: + - {from: generator, to: export} diff --git a/deploy/telemetry-functions/pipelines/merge.yaml b/deploy/telemetry-functions/cardinality/merge.yaml similarity index 100% rename from deploy/telemetry-functions/pipelines/merge.yaml rename to deploy/telemetry-functions/cardinality/merge.yaml diff --git a/deploy/telemetry-functions/compose.yaml b/deploy/telemetry-functions/compose.yaml index 672aa11..33aa284 100644 --- a/deploy/telemetry-functions/compose.yaml +++ b/deploy/telemetry-functions/compose.yaml @@ -1,6 +1,7 @@ # Every pipeline stage is the official OTAP engine (asap-collector) in its # own container, pinned to one CPU, talking OTLP/HTTP over the compose # network. Prometheus, Grafana and Loki are the observers. +# USE_CASE picks the pipelines directory (latency, cardinality, ...); # CPU_* variables move a stage to another core. x-collector: &collector image: asap-collector:local @@ -10,43 +11,43 @@ services: generator-a: <<: *collector command: ["--config", "/pipelines/generator-a.yaml"] - volumes: ["./pipelines:/pipelines:ro"] + volumes: ["./${USE_CASE:-latency}:/pipelines:ro"] cpuset: "${CPU_GENERATOR_A:-0}" depends_on: [branch-a] generator-b: <<: *collector command: ["--config", "/pipelines/generator-b.yaml"] - volumes: ["./pipelines:/pipelines:ro"] + volumes: ["./${USE_CASE:-latency}:/pipelines:ro"] cpuset: "${CPU_GENERATOR_B:-1}" depends_on: [branch-b] branch-a: <<: *collector command: ["--config", "/pipelines/branch.yaml"] - volumes: ["./pipelines:/pipelines:ro"] + volumes: ["./${USE_CASE:-latency}:/pipelines:ro"] cpuset: "${CPU_BRANCH_A:-2}" depends_on: [merge, exact] branch-b: <<: *collector command: ["--config", "/pipelines/branch.yaml"] - volumes: ["./pipelines:/pipelines:ro"] + volumes: ["./${USE_CASE:-latency}:/pipelines:ro"] cpuset: "${CPU_BRANCH_B:-3}" depends_on: [merge, exact] merge: <<: *collector command: ["--config", "/pipelines/merge.yaml"] - volumes: ["./pipelines:/pipelines:ro"] + volumes: ["./${USE_CASE:-latency}:/pipelines:ro"] cpuset: "${CPU_MERGE:-4}" depends_on: [detector] detector: <<: *collector command: ["--config", "/pipelines/detector.yaml"] - volumes: ["./pipelines:/pipelines:ro"] + volumes: ["./${USE_CASE:-latency}:/pipelines:ro"] cpuset: "${CPU_DETECTOR:-5}" depends_on: [prometheus] exact: <<: *collector command: ["--config", "/pipelines/exact.yaml"] - volumes: ["./pipelines:/pipelines:ro"] + volumes: ["./${USE_CASE:-latency}:/pipelines:ro"] cpuset: "${CPU_EXACT:-6}" depends_on: [prometheus] diff --git a/deploy/telemetry-functions/grafana/dashboards/cardinality.json b/deploy/telemetry-functions/grafana/dashboards/cardinality.json new file mode 100644 index 0000000..8a20ef5 --- /dev/null +++ b/deploy/telemetry-functions/grafana/dashboards/cardinality.json @@ -0,0 +1,376 @@ +{ + "uid": "asap-cardinality", + "title": "Attribute cardinality: sketch vs exact (real collector containers)", + "schemaVersion": 39, + "version": 1, + "refresh": "10s", + "time": { + "from": "now-30m", + "to": "now" + }, + "templating": { + "list": [ + { + "name": "attribute", + "type": "query", + "datasource": { + "type": "prometheus", + "uid": "asap-prometheus" + }, + "query": { + "query": "label_values(asap_distinct, attribute_key)", + "refId": "attribute" + }, + "refresh": 2, + "current": { + "text": "k8s.pod.name", + "value": "k8s.pod.name" + } + } + ] + }, + "panels": [ + { + "type": "timeseries", + "title": "Distinct values of $attribute per minute: sketch with 95% bound vs exact", + "datasource": { + "type": "prometheus", + "uid": "asap-prometheus" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 0 + }, + "targets": [ + { + "refId": "A", + "expr": "asap_distinct{attribute_key=\"$attribute\",method=\"sketch\",bound=\"estimate\"}", + "legendFormat": "sketch" + }, + { + "refId": "B", + "expr": "asap_distinct{attribute_key=\"$attribute\",method=\"sketch\",bound=\"lower\"}", + "legendFormat": "sketch lower" + }, + { + "refId": "C", + "expr": "asap_distinct{attribute_key=\"$attribute\",method=\"sketch\",bound=\"upper\"}", + "legendFormat": "sketch upper" + }, + { + "refId": "D", + "expr": "asap_distinct{attribute_key=\"$attribute\",method=\"exact\"}", + "legendFormat": "exact" + } + ], + "fieldConfig": { + "defaults": { + "custom": { + "spanNulls": true + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "sketch upper" + }, + "properties": [ + { + "id": "custom.fillBelowTo", + "value": "sketch lower" + }, + { + "id": "custom.lineWidth", + "value": 0 + }, + { + "id": "custom.fillOpacity", + "value": 20 + }, + { + "id": "color", + "value": { + "mode": "fixed", + "fixedColor": "blue" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "sketch lower" + }, + "properties": [ + { + "id": "custom.lineWidth", + "value": 0 + }, + { + "id": "color", + "value": { + "mode": "fixed", + "fixedColor": "blue" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "sketch" + }, + "properties": [ + { + "id": "color", + "value": { + "mode": "fixed", + "fixedColor": "blue" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "exact" + }, + "properties": [ + { + "id": "color", + "value": { + "mode": "fixed", + "fixedColor": "orange" + } + }, + { + "id": "custom.lineStyle", + "value": { + "fill": "dash", + "dash": [ + 6, + 4 + ] + } + } + ] + } + ] + }, + "id": 1 + }, + { + "type": "table", + "title": "Class of every attribute key (latest window)", + "datasource": { + "type": "prometheus", + "uid": "asap-prometheus" + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 0 + }, + "targets": [ + { + "refId": "A", + "expr": "asap_cardinality_state == 1", + "format": "table", + "instant": true + } + ], + "transformations": [ + { + "id": "organize", + "options": { + "excludeByName": { + "Time": true, + "Value": true, + "__name__": true, + "job": true, + "instance": true, + "metric": true + }, + "renameByName": { + "attribute_key": "attribute", + "method": "method", + "state": "class" + } + } + }, + { + "id": "sortBy", + "options": { + "sort": [ + { + "field": "class", + "desc": false + }, + { + "field": "attribute" + } + ] + } + } + ], + "id": 2 + }, + { + "type": "timeseries", + "title": "Distinct / points per attribute key (1.0 = every point new)", + "datasource": { + "type": "prometheus", + "uid": "asap-prometheus" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 10 + }, + "targets": [ + { + "refId": "A", + "expr": "asap_distinct_ratio", + "legendFormat": "{{attribute_key}} {{method}}" + } + ], + "fieldConfig": { + "defaults": { + "unit": "percentunit", + "max": 1, + "min": 0 + }, + "overrides": [] + }, + "id": 3 + }, + { + "type": "logs", + "title": "Cardinality events (Loki)", + "datasource": { + "type": "loki", + "uid": "asap-loki" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 10 + }, + "targets": [ + { + "refId": "A", + "expr": "{service_name=\"asap-detector\"} | event_kind=\"cardinality\"" + } + ], + "options": { + "showTime": true, + "wrapLogMessage": true, + "sortOrder": "Descending" + }, + "id": 4 + }, + { + "id": 5, + "type": "timeseries", + "title": "CPU cores per pinned stage", + "datasource": { + "type": "prometheus", + "uid": "asap-prometheus" + }, + "gridPos": { + "h": 8, + "w": 8, + "x": 0, + "y": 20 + }, + "targets": [ + { + "refId": "A", + "expr": "sum by (stage) (rate(cpu_time_total{job=\"collectors\",otel_scope_pipeline_id=\"main\"}[1m]))", + "legendFormat": "{{stage}}" + } + ], + "fieldConfig": { + "defaults": { + "custom": { + "spanNulls": true + }, + "unit": "short" + }, + "overrides": [] + } + }, + { + "id": 6, + "type": "timeseries", + "title": "Bytes received per stage, log scale (sketches at merge, raw points at exact)", + "datasource": { + "type": "prometheus", + "uid": "asap-prometheus" + }, + "gridPos": { + "h": 8, + "w": 8, + "x": 8, + "y": 20 + }, + "targets": [ + { + "refId": "A", + "expr": "sum by (stage) (rate(payload_size_bytes_total{job=\"collectors\",otel_scope_node_type=\"receiver\"}[1m])) * 8", + "legendFormat": "{{stage}}" + } + ], + "fieldConfig": { + "defaults": { + "custom": { + "spanNulls": true, + "scaleDistribution": { + "type": "log", + "log": 10 + } + }, + "unit": "bps" + }, + "overrides": [] + } + }, + { + "id": 7, + "type": "timeseries", + "title": "Resident memory per stage", + "datasource": { + "type": "prometheus", + "uid": "asap-prometheus" + }, + "gridPos": { + "h": 8, + "w": 8, + "x": 16, + "y": 20 + }, + "targets": [ + { + "refId": "A", + "expr": "max by (stage) (memory_rss{job=\"collectors\"})", + "legendFormat": "{{stage}}" + } + ], + "fieldConfig": { + "defaults": { + "custom": { + "spanNulls": true + }, + "unit": "bytes" + }, + "overrides": [] + } + } + ] +} diff --git a/deploy/telemetry-functions/pipelines/branch.yaml b/deploy/telemetry-functions/latency/branch.yaml similarity index 100% rename from deploy/telemetry-functions/pipelines/branch.yaml rename to deploy/telemetry-functions/latency/branch.yaml diff --git a/deploy/telemetry-functions/pipelines/detector.yaml b/deploy/telemetry-functions/latency/detector.yaml similarity index 100% rename from deploy/telemetry-functions/pipelines/detector.yaml rename to deploy/telemetry-functions/latency/detector.yaml diff --git a/deploy/telemetry-functions/pipelines/exact.yaml b/deploy/telemetry-functions/latency/exact.yaml similarity index 100% rename from deploy/telemetry-functions/pipelines/exact.yaml rename to deploy/telemetry-functions/latency/exact.yaml diff --git a/deploy/telemetry-functions/pipelines/generator-a.yaml b/deploy/telemetry-functions/latency/generator-a.yaml similarity index 100% rename from deploy/telemetry-functions/pipelines/generator-a.yaml rename to deploy/telemetry-functions/latency/generator-a.yaml diff --git a/deploy/telemetry-functions/pipelines/generator-b.yaml b/deploy/telemetry-functions/latency/generator-b.yaml similarity index 100% rename from deploy/telemetry-functions/pipelines/generator-b.yaml rename to deploy/telemetry-functions/latency/generator-b.yaml diff --git a/deploy/telemetry-functions/latency/merge.yaml b/deploy/telemetry-functions/latency/merge.yaml new file mode 100644 index 0000000..cb392f2 --- /dev/null +++ b/deploy/telemetry-functions/latency/merge.yaml @@ -0,0 +1,33 @@ +# Stage 2: merge every source's sketch for a window, 5 s after it ends. +version: otel_dataflow/v1 +engine: + http_admin: + bind_address: 0.0.0.0:8085 +policies: + resources: + core_allocation: + type: core_count + count: 1 +groups: + default: + pipelines: + main: + nodes: + receiver: + type: receiver:otlp + config: + protocols: + http: {listening_addr: "0.0.0.0:4318", wait_for_result: false} + merge: + type: urn:asap:processor:window_merge + config: {grace: 5s} + to_detector: + type: exporter:otlp_http + config: + endpoint: http://detector:4318 + client_pool_size: 1 + max_in_flight: 1 + http: {timeout: 30s, compression: none} + connections: + - {from: receiver, to: merge} + - {from: merge, to: to_detector} diff --git a/deploy/telemetry-functions/run.sh b/deploy/telemetry-functions/run.sh index f4cb2fc..50afed8 100755 --- a/deploy/telemetry-functions/run.sh +++ b/deploy/telemetry-functions/run.sh @@ -1,5 +1,6 @@ #!/usr/bin/env bash # Build asap-collector, package it, and start every stage plus the observers. +# USE_CASE=latency (default) or cardinality picks the scenario. # DOCKER_COMMAND="sudo -n docker" when Docker needs sudo. Stop with: # $DOCKER_COMMAND compose -f deploy/telemetry-functions/compose.yaml down set -euo pipefail @@ -13,5 +14,6 @@ trap 'rm -rf "$context"' EXIT cp "$target/release/asap-collector" "$context/" strip --strip-debug "$context/asap-collector" "${docker[@]}" build -q -f deploy/collector.Dockerfile -t asap-collector:local "$context" +export USE_CASE=${USE_CASE:-latency} "${docker[@]}" compose -f deploy/telemetry-functions/compose.yaml up -d -echo "Grafana: http://localhost:${GRAFANA_PORT:-3000}/d/asap-latency" +echo "Grafana: http://localhost:${GRAFANA_PORT:-3000}/d/asap-$USE_CASE" diff --git a/docs/images/cardinality-grafana.png b/docs/images/cardinality-grafana.png new file mode 100644 index 0000000000000000000000000000000000000000..48412bee568e0e7cb1013f4efe3df5f9279f5e68 GIT binary patch literal 167917 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

~`d<{G0y&dJ2ztJr^8tjkzhfPz3*nbiAZkXSEN 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

~)iG7Dw8| zcO{~gKF+nYiucZ;r7dvL`QYBRrYiTNev8yDCc$7cm|x&pcwTPbNvyLwVI`kleRk25 zlA?}|9$Hz*qpqXj>3NglG21vpC+{8y03Ax{ICkS5hjImW^@X3UU6s3s-|Vc?l1K0! zy45NU<)v1t#ZPq;+YMYE5x?+Q$pn6JxX4me_h0X1=zrS&B7zZ{Mqt#69 z+YDQL7ysT~sd8L??frC^TvDij`IHSXq#y{x!mY3W29EOehWVt1nT2HiSoe~$lT`(* zU-X28yfMDLgHflHSkL`t80Jutm`Xi)igHjRJM1G#nto83lh$(s@f zhW&h)jw+KTuK;;=lK~9m7k=@~r(RV#?Q{bPQBRoSJOaA&JWFmOBPBvjAc9;f;_YQ+ zEKLF>Uj4o8!`Z!)r_(zT<@APzh8;!f?2ZRhp|Ku7?B2@W7a6Y~Z}aN?`o?mPa*&Qz zn_m6WBT$t z&PT_xg5D)I>_xzkZlQZCa&fFlO}fee?kl4xC6P*~u)eL*sIrXc*6QjPIN7Blu5Ri- zz?B36URx8hun0)2W1Qg2WvjZ3xF?fbhHvZbT)LNF86u5UE}IB+iAJWVW9I6=PRd-_ z={71rAy96f@cw3KHbCR#1~uV63K5yvh`yGNMD&9+d!A0a-LAb|tUI=#npak4BR>+l zaw&J-XTJCDyHfs(n>UF6RWOju!;ceK4ul$|#_q$a>)HP@g!7rQNabi`t(*l3%Qn{>!t%sdh1cRe0<$_`}YBPbYv zPcw><&BHX}JNO@bvNs;AkQl+yL-N00V&46r8Hc4BUJiFA^zJ{9?6~hl-uYo5lW%5c zVq&r;Awfh#LPBC~QJcU-;=?PpkX`Ml!$E-g6wCQaDbz4B0A`KhODf+a)Q}MNdob65F!! zK_;U{a+-)!?o!|)D(YKHVgk0{C66E^nNUzssA>mghpr>X@kwDMWJ+5TAV!eYL;Fz! zRn8*zJMU=B8e2rtP?xiQ9PyclbO+awep(WOsN0T!5iR|oe{Ke?K8JgccYJojtTWck6BTZ4}>0tTiaoND^L*Me%9`U3a)1I~5PX&ZEQZN(lAW+G|=Z)Q-nWBfRPWpiaHRP3;?GWrwvXi4TY8rc*C1 zlOYteXKIfjUrTC^#`mx_;8khA!7pgjE$TcXy$79ud@Z9{C73b}{(*5jGfq1p_tGue zN!NditDs?9^J7v2cL@-^tJy5L*xC0N9p~}Tk-qLaJlPpVHg=iPVB6e2=bzo}!shT& zO?5P8n66=Q&8rWXQuwLG-AehImza28)#M6YWlQIym}l}Y$D2?s{N+T^v1I7@MM}mK znMv5y_T%v#S)EJDV$WhCrA2gd6JFL-5qzc~y84!O>U6X(%`aPLWyiDZWyMQ3=Gj0b zp#}%xq^75L2WdOStWZXVzH(;=gU*RsL5!u;PT5h6`E}u0x<4_W?LqY?yZP0P7^}@S zEk%scq(RM}H82?xMT>_;Ip|aLtH0;}6U^V%1i{&tYASHW_j4H?TQ-eL)&Y_!~0h8N9y+F37e1)dJ2BrJ85z80yzmS;jI?)JB$~dGAPm40S zUj^?|@^Y=|pcT%?_iFt*G)ARBLv6w8gEu?l=Sg>(9cK*m#|tbkcf%gjfgaAx!Cj8a z<-{~Z_sKsNSsrL9oVh3dAaPESyrg&U@X-AHpa2UXg8@32l(I?3%POgfQB|HuLmcwVaVFWSu!d7^HvPHKLf_!Kj(xzbldqk~uXjH-?5HqY1sUHH;nW+S#; zHXvFoi^5s=c4zAJp+RA4%*C%muVaIOt<-Jaa5?SP0e>XvF;euFGMHw_{9c?x?G+?MEb%py0Y7} z=$`Su)Vi&BN@-Mqbhr2Kk9J1AVE(C|)h32jj15{^TJ7jtbo}acG3`u;EICYH0;-4Q zrPn)(_e)cuBzP=l*9n%6X5-jRhoJ;~p3?~fZ;~%}8U$EbrLMMix3|mLtc+W!QgDv> z_;@dm1MvjT22#tvX-$S4BuFdk8`5dJmPVV@8O&2H*htdi+sy)$_ISNpdT}NZdN}U5 zGa}q({Jq`~WaYDdW=5?h^>0r)b>O_q7XJV)@DESoqXbSh53@)ZB*dy6j@Htv`!*B# zZX>eTzC31k1?-k0k=TW@BW3!R`u?F;&+t+#e_4F54+Rwnki}ju^vQj|)=d5IYm8#z z^#gMjRXP(!m@{fMSma~#<~t))dhd0X{w>PRg6e6b@^?|sE}d@-y36|hvaHzBuZ0IS zm!wbnxgJk0AD+P@K8qZ67+DNGhCXpiOXz#0>c%cL?mNl?CqDf{e-a`W29sD6Bu_9){~wmW~GaQBj0 z?gZKtLZTd+VzMg+EV9`>a5%GPPIwbl&1#*fX{1m z3{JPUps^Zk)3?*aZ@FmgYy<`8Kw^G#`rR#t>M;9%$`G_ z;GI}MR92|S_$_57C53qKqt5Mi)jI`&xW%0n{nP#0#w)IM*JxpBi58!|PmqlMi+3CnjoxtT? zZdW} z^k}wv0n*KiReLBn*#xbqk~h7_NG8WZrF=vfva?CaZ1Ptvw^Zv*Mc!da7V&CqET~8vKOsx;1oGTz=ob2QL6=lf#|ea|%b2jiaLw z*BMkNKv=EenYNGJ8Q|4WUyqD@Oh%^E=a4bT(s1b{BQ1?br}ihEpFVL(>XM)zG-0)0 z9l#N1F0Frg@_fJN7El(T9Ouq$3dQVectt@a@>FCDo{RIi0v)@RSJjM?u?#rKvpX}R zwT}LwD)g8=b*Ebv`|@6n)eHBo z7(E!W4R0qL-(C?_5AQZZ>D)vc;$p)|yhy*F-RDR&4+~D*EM?8tJ>*dD3X!HZJ-XE# zlM?@;HLq|`WQ1y;SXppkHYw?c6>ec>4?5f0KC~zrOF=`qX_jq#x#+g(%tm}xqFR$- zZox-OadDbM5_4fg2YSb*jFPiQrh$M(ASd(!D=7msAXnNm4XQ%DTGdD;F@pf)^Hq!W$y2DSsmq@^%z0phWDq3`|8dJ`&QwvM?p+uX@%@Iw{-q z7m%ZjrRrxA@UHf2Q&S$!2C|l>W@b}WkA)4&lVy{ud(C*s2ePvt=!2puT5;3tO<^CyQgrocoF5 z59`~|iTL@kp5ox(n5Y&lEGz87Qs!kHnWL`GJ7q_AJV&ZMqo?Vf802)a2GOd`&rYto zoUMIHjMe-Yz0&eAHQ1wmtm)=>7cYO?donbUgxCJXO0uP2MCPIY2XlUdJox)z5N;lC zs?(w~tDfUjcEFLavySAT!P2EZFJ>ysWZ0v zSvsHjj^j z5RoSVaA#)+kC2d(#Bu6vM)u!m&4RO?uwnUObX=in%lNqSoVOmle|<`r4b8K!DvXPR$0AS=43VMOwkM+10^5_B^(;Qqggp5lRC9#&?Kqvb+7 z2{V^6bkV6N$WW}O{2tp6DRx~;jFOomu$`Dlv}#vckWX*T`#4gQH8@Kg%&Gm+rk3ZA zXL(3i(caob)A~VZw;&*oLV^$IZZ$wS?Vqma=1ufy+DV0v$2NVX9Af%L$e`yl@8Sj3 z@W-9QrghFWgIWXGnb+*6EUB^`S!i4DH6yGvInQ95USH8qiuLx=pbT`MFFRp%h?Fyr z!>JNZ1M5t&+Xx9OoR~FqGUJJZp*4nY{Gv%YM|_?LmzJ%(*|gS9H&`Vcb698*Zr^rUC%#9Z^165Q)k`+?d6k$q0c0%O&6|p z1|0vCmfHrDlX*_gT>ZBzpP(0)9O4Lx-%HeUpuVAe`v77L%DH#Um*B(~wGuXBL9rUL z@$55aGr(=sztWPd=LU=<7z;iT_f=1Dc~3FRrSel^?dhIL4PtF|zN-+Rsar2_lMH}# zbJm0p?kx6gFF=X)i>U4c7Z;ssTV9K-#)3MPw459mw~u;ZL9uK}PPRi|){|9PQ-_=H z?fk%Ch+G-1?C4ERae5sR_LQ&oghOv`E^TYJvpylGTF)M=>@nEBuq@_yU#B zTI8cnq;EzL8^$xw1%xM}9K9h}g1+}&FOv<-&D120*I6<)RyFz^BNnRjvYeF$O#%L)_l(njdt^MLlH$AxUQ0Q zLW#ney7kaOAzwyLPS?)vbA5e{>-MsAZBeL4kHoc{N|i4en@+=lXjdJ(QbUgQLQTP& ziy^jCM_ZWOams3OQUo-A56xX`dq$-wsh{>{Q(v~@p5nwkklIGybxBiI=BLcmSdIKT zbg|GLRi9mpB5=y+ftjo~8eq z;3CcT0Ud|$UO^LuVukYe6+);=E(#rM;Cx{o(k_LkmuZHe{7&F!ef9~T%E(Zi zq%V9mf4|5M9J-nG(>9&D7$r^B+7<1cUn8UqeWm2MGd?48JVElqkw`c36sM_V7Tw%; zC$9za^*{_gw3~lIf!_V4n)qK2oV>DyeKS*HzbohF2(fJTR=HMDLOBe(x-e7aR`#^efLOV?eee1 z0=ixce07OYv=~^!E${Os)b`{ejFm4=pW+V7ur0)VjI(t-ev}Kg($L*j!bJ$f1gthB z(Z9(aW(Rx0x`odD$;9F+Ot7bY;dqbVhQ%1!<*^O&_A$+-gp(R2A}5fZ7Q89S(iX09 zoXgLV0lem@D_J&SNVLPB^Hc~M`d&f`Oe1W}~qp`sCeefIPn4TUkF4*eg zfaeQCIP3v=uB06J}M-a5*XG>mn!2=uHFNVyP7AE%|A@yad=4e}23jiwytfG-yE zxGu(9iFHL?9=q2t_FQohPxDBHZ4pAd{wHR5f0-p)4*S(7)z=O~}Mx=*8EEYi}I&wgOcC2Q}_d&Xe(XfCns+3uIo!FQr5 z?qz{l-4#2vIa-r4fIkTMl(?Vo@OB$+f#AfMo`D&KM{HIUiN<(%Vooo>^J{8y@P2u~ zskA$i7M2Ja7uEdP-7mbW;{VCp!v3(0r8eHXU0MWB(lF^%zxOguBBC}dB zh~s*>YBVXMYlw$;QEMi_K0y7=9FDZS?}4pUiqY)8SGyBwp`^UsTFa&-7I#|}_TqQ>rAO07Dp8PVM3S+TG(?&z-Eu9O#aV(wf6P>xT zDU3gb{i+uczbg|V@)FWFGK=dPY(0&;94bLmj_OR2352rK(MizEC3$xID*GhyY_X5h5aN@z+YNjEmV6#hu;3ui1*>xx`2#y(oxZUNUq#n#ld^{yw2rH&0u`q z*)@Dd=baH;n$#sF^2?sy+pG6%4g|4<#SREsU zrhAQ&0-{W0ax}#&f-H3w-#9_4=2n)@tcer?ch((k5Q~ZT>B=(Ud!_0Y zZu^iKC92pvmfPQuvN@18I`Z= zJ{k^Uls;1hO4w(xoK(5)7K|Wm5h*PEN5r*eKpd1A$#GP@`q*HdGUEnM|8{& zLW>hATO02z#klFz(9y}xH{i{_33&(xa(%&Z`eO<21LiRoFC5*J!@yCtiL&YAnjuVY$+rez}$O{g>t;goA@;bwFA8p*-^O zvuU}?zcwwPFxsGbaV{Ge2MGX{S+kXT9w!?|Yf1tzniM%{C$^&oI;rZlQGJetr;2s{ zsfzC(4)tcC|NF4^=K)VQsRtO|#f_L)!`Q8u z>$;Q53N!T6WqKy*mt_n_exRi2ZGRrP6(ycD4sRe z3PnKtWo_O8S|;8G{FD{<1F66Es9-aG$pecA$u$$(M`?&8&ZxRY~I zQ&Y=bx%t-_r{u&MzkLPL(UWi8F_{6hN=IHK)7^Vm8?xHj{^9&Ez=xa;yJ5uN^Zj} z&dI41tr|yNeEIU_knuqB$sv1uH?mW zAbS)qfbr2|8KuOk$!~x+w?4U&ta66yAz+4DfVH8&TbthpJjVXx{Z0xB%9-Wu)ZKZH zHRuhjRHDQ4sVgJe{_T~BYc-K(gm$Z=zYC2D8-w6Gon#GlfeAx){AjI&Vnii9Sw zW+(wNAnx!ud7g`JyCWDA$hH)g++jo1Ox=4UVKwI&YAxHqQIh`Y;(I!Rfl=V z$eg5+T}#n69j{EB+sBL+Dp+?7J+SLKo!y%XIYzPgOjp27RkM&p3EmP1rT{Rie7l?hN6a=7OsF?zZvmQ`Pl1 zt^z8-wudMU@J-Y4tRRru$@9(95$1B9yI`A>%C?ao`x66VP$wfs&N$lIg6Vr+jGPPH zIFPcjwafPbj(8(8>p>{X|7q_$qng~-b{#3Q1Q8M2qN+$o&;?S3fQSf473oC;Dbj1` zK@<^{A`k*nLKW#qZy}1H6a}fFBfW$gN+-vo#$qrto1gzDEF8_MfRCsholE}a+%&pnc zd?Q%VWhOrr7Buxf?=6sfD*1;p{u)>C`2*ZS(sJmfJBz+6u2(g?i*;`Y8_~t;lcb7Z zV#rJQXC6p4>&e{9ks=k7>0Wdz=ySd}%}-cgr>99#&ld#VH?Q##g$aoRSH5DFPgI@y zeJC+5!Bm(@0L@MwZb!I521zPx-^77qSVhM|88wux4poh_InX?eA#BTCR(~-6j=tXx zWR-RM$(-bPNyjmYytq#o?jOCS-=eN-XlMXT0vvBl&1QMd4XX)zk4ykAk$wW$g2ogJ z`-|GIsv6!x7j*1>%-ikD5&tS4)21sKtI zcemu-TU%OA&^T{S^^0PLBzgJys{y(Pto~@vX0J@V##y;_x!43#{vgo7p$0yT^EFRG zScG^kpIa&ky`-{`1&raJiZ|Dh&8%M2Z46vt%HX}_!lK9T!*^D%qcO`%3?T;3*`dR+ z!USh0o`^Ib1wWD8o?~F&uc)}S5TX1?%aHTW{RsD`$?CtOMi##R=crNt>xi@Z7XnV7 zI3Zy+8$cvhU$rrVi*H1_8o1m%%GXbtwPxZ^UI4B8z5Dx5;_{^+E<1cf1>du5!XXxm zsj{@tc(t=8L__m&Kb0AZzNO%B6<9!p^7OVp zNRTRNBh+?MZ-6ITu!+AynAdPO;_=93s3_fMizS}UZN`KT;~7pa(?p)gNo+nw`+Lt? z9A7oLbs*)To9tG9?d>wOBm%^qHaIvKEJL9n7uYTEV}hEou-m7>p1ykraQkBss1L94cagDxXN{m@!>9G zs&aw2$Etn%HJP!6Z>w?-r)9E?^Y4Vi&-+sp*pmMS@n>9Wq=1yOoE$FiQAD;#;kt97 zt{$$&eu*OjAvc9!yI+8?eldY~$L2Qs&8}n8tv%#OfuEGS6#E-2ZiR-LxU*AKRHU72 zd_Fm6v+`j(4Sp^krT3QLhPEb4a#c9&2o|%?Bbmoo(K zzs}@Y>sPdOVaz|XK1^6bf{5>Z0OCp%FM6%d&4f7NNbWcD9b;qTp@XxCv*(O3PhTr1 zW}oyKyFRn-=(2JYtiqjGPml8LZAx$N=sZuie1Aij=r)@XElY!2hZfy$zpc9>$lv~0 zy^_Kc5QxY~_CpYLCz8ht7>1e}Sm?p+eyc8shaj?PTN2P|4tooWHA2e`ZI6K)){@(# z_?~AzR6~moe zypMk-Yf=>)G^L^!+}61$Au>BTaLt%{W>D?-%f8c!N1@=r;GWiKX5z71|9N-k$;bf# zbW2yayu}1tVHUvMo-M$U0afj<~MXw2zlKevO-IPuUI1axsn6`h5#wQ z3X1*J270sciCibij`lm?ZjEN;Sb1mqG$t(6_-`%1DDwxFe(-yH@v$%N+_|&27?(eB zq<};~55u7XW#}l!k(GIaA!g}Hi?3AzhA&MD9HW6wg~+Io=97A~J%T}Qh=k~i=?fk1FdfFUIn`-rx2p0SH!Y!&2xdenY{sMAf7s#kFN zXYJRq|MAh4U`fE8>*(rk^jwJ~BPTP#^|Y(M?ebciYnuxG%rrGI;aB6^{HeUeqW{?M z!qu{m6^J`TwFGH#x2-32bvHE5GBTFBE-T3;Trv<9(EmfH(wFB*lI@%%gAF#%X5g9x z?;GH_mhY#H>#nmi798wuy5>LkD8lzpj_o60a{@FKc!@^D9oI;%mMwgCt4b4TNl?bI z2-&{hllH)9q;i4%_jY6H*SHdojbw!>!I)E0UO=@x`CX~%Pp{QPl~uK+!&075k0nJU=`B9> zXmp(!xZ`Y?$uy+jb2|!35`FIl{^A&&l2IrVbR{j|xFTa*=Yej3>TNm|oiRQEHo87P z-xS)eAG&i)ZP=tHehDBnutCofL3n{@`Gl2ZUJc3(tS^kGO6- z--Ps%&mX;)PJQwmLw;zqAcj{wuanl{k}YQwTgGwl@m5_NI_H;P`hNwD57vNJQF*0j zwlkA~OO-e|I(h+V^>w**Oqv#D6`z<`vsX2Urw&wQsVuQ=`;=Cw2dFSkIxYlFN&N>~WYePomv@bz1K*Ds zu;2#K8q6$8=G5thp&}eE!GvGGz%a@oq+fg)ZU)S@pVMla?y{XabxM)r`a2ga zmXj9vfV^GLoJs_VEdy)wp(QwJgc8MG&vI&n5MquvSh5g%*?#u@`JFt&ih*>OR`7M| zVUlC#pxL%;%#aio{$eh~!4;|IZogW0XXf`A8*Kf}btZlkwUKj2ZB}61pu^Yh;@uP6 z6(oD`bFcYfRnj))-`?ENAhv}Ykw&wh;eS29m|-)VR}@rL#ogN2_@B`Ed@)E*864*1 zq@lHUesp`8M9w3E6ArB|FWYq$&VP@&#pd83XR3ZLTny5IqZyBznX%s8mB@_HI3W`( z^=$$2nl`G3JfFiD5zjgL?%`VhPzDX5M3d{%`IUys$Ym(eIx`?6V;veM%DlPG#LAlJ za172RDd`QisuaU1w(!{4-Xd7W>dWG`)FG%l5gS|dW&pnTcxUS2OA*?=>W{Lirz}eL&({6|Q97|zRm?M8<;aO1OLYrRyA=Qiu zKgR}3;2YPZEK1n3AhdjFlY<(TE_G?!(W06y2(1zQ<(7-0oN?CjE_=L>v*kP6w{$aI zelk0ut5K+O;C9M>sueN^?P+>L>d;#d42rJiVkmC7=O0C>D41+>2ZN9Wi2ntUOMn|4 zJyCUkXEk#LnDYG_)bz5%t?|0c-LTHY zzvJ=;mgW9xH?xNi3!O|s&rys_c;F<-oWP%n=W&B@tiNZPJCf8Z1B#M&$RlyRe6qko znWOb>-w#vmBQERe2MC>35now>*5+o={Ver)EABTMv&N)-W}1e2-&eC|uTLB)q)Zvv zqD6I87eyOhJQmC(YFlVNLq^X*A6a(uGxLV&-da|@Jh06OXW9k_1{F2@Fmdpm(mG3} zY*hFYs39~-nG~DbgE*XE226dPzCAa|`XjGA$-%{C1ZDSbe)^fs!K(e6Ev0gD`3yai z6uan4%yG3^SV*k z-mXpKLpo{oDg9AIU0vOs47EIc^!+dWW8-+s*TO2Qs=K(0<@d)bf_Z5q$+?fs*L^Ss zVGQGO;M}lgAS=_@83Jy5=!wvAa`Dwa}dVT8TxCx-ZjcYu3q%U*p8Vm3f zGged*?YC}6TB56c+B@!)^kE`u!AbT3x^t6VkZPLj#S0qRSal~4+w?+LGc_Up=BoJg zAQzESpFU_Jg2ULivsFKR_g zpyJ|IxxV{Rc=}^#n z|8q_*-SL^0Es3WUT88I_c<%n;ez@Q+ZfYVBID=odKKQ32a^o!XlZV5lzO_KKZzcT) zv`2&`aOx-8qjszOB)x{qpKQ+sO}|5j9^u7Et+~!9bG|iNs=Rb>vEH1!LjdKmN)PB8 zy{Cp$>cd!90#Zjw+nbfyP+m3g?3*VH6BVAGgI>kWExVS?k;_kBD(80PPgJ=BKydh;DnnlNBgG>2H~GWgN;=%BKM&(I10EarN2(o^PKT8lr%~ zM3=ugx37dUUd^?A-5a}W+g&`xac{3kk2Bvl>IP|ad(weyQV2cEF8Bg<`ao>5M`yIe z2w&!X$HIrflO+i1n(!^aG&yk2laea62R{~kGx2YRdfE&Y`RG+mxC zx)AKS+1Q*YdlMxxtKet4w{A_p%%s7utaRsuAcF1>=Ec*?tjjdkkj8ctzR^L#U)phN zKGmagMag1p@b2=FMD+0L3=0RZho`k<@#0n& zwzRCXC)y(y(U?0o@USQ$Yz{j88C4S&VpL<^_I%JAMzUP>4!)lgVZF9`N7X*mR45mA z&)X|y{|}z9E6~vbpd0q#=qs4_*I5R_TBzW~?SOlR9qr2RJ%kX~;?h0lQ!gHfKyQMt z&AN{3GD6hLkuCCi!rb z_xA?E>i_CKz(sUCvHXemR1*h`s%lCrYAIp_J5f^Xt0MaK;$iWNb{=B)JXr!gP3R;k_)QgI(CH5eVHRsM^i;L$unYo#zUwa1fX0RYzEaD$3hihw=MM(3^ciFbH9)d-(UWyT4uX2 zi%CFwgv52q07s*i(@gB3q@A6dJS{Z-^-B(qSuNXML_R)wOCl05Z%ue=xRn+<}!R-6448jFYTHs`Hu*y=XD-Ep z=qZ_s01O7RF-ruRSs5vCW1YoH*VKGZc2sml)?qbH+#A2rirz3EUB z?&vD3*T7MV#fE>T5T_Jjj^-);&?~t*+3yAPZAFu+zJ<#jd!9L_2l+~%aay@oCB?y4 z{IKm)!Sylq0odXWCvEBlsuyzkqEF>_79SHBulj7IpD}2p4S6gmuGiRtlJLdH4N6ie z(4G1mo?rS<(x&BP#hc#2r11{liKYjUUtL9VGs-eD6jr}u;oI{)oph7sRTXqzsf#r` z-rj4|4%STRagX^+FI+xn<#>Bf+$E!CtI0+?fIT_F$!hrWcAk~BU?HB>056|5j!sD# z(y*(!%wZe{X+p+PKx8Ujc;x8sloDoYb3@2fl^d=VE|?SP;QCofZB~;lD4tM;I($=4 zn1tJODaa6b7mq|@9G7h?S~h~s>M)>x6&Sb`9-ajky|nAtOSU`=bZQ720s9UuW@SB4 zptx9*0J<=B!v?8lfY_7E(z+xdpkHa5toT5g|608KSEdQtg(#!!o39WOmI9S6`V(kh zRE8_A4k)RdazY!DvE~E=vwImrLJ_&wgR$NMuxcz?XTfv0Aur|QsGxfnUbanc0uMqV zX1j~fVlg0AmiAh=PSfhZ*A;`-jmmskxdxei`1Eg# zhk9`1SQAQEzPrB0Q3d&w*4bRL1Hh`_w$<_|Wiu5WW2u|LK!uCtcoPQQ1FX;!(x`TYP7} zUR6`m9l-$hk<%IzkIpRkJoHyvGSZ$k=SYw$^EMt`GJONyNb-rJ7xnK!M%p54vOTvAeZvv>F?!%-+f!SRWSN^4=fv%f$= zdAT~XQG+P$ltN4{KX7GO>z>BEGw>ASv$e>l(2&(Cig>R{T8|p3e@J|Oj)L(-CcNOj zOT0v1a7-^8v>fjr6cLv_Z^#8cX+9%&{rdQWvF`?^KhguzDWcO`rY0wSO3b`L)UiSc zt3`SCxcxmBCcD3K44MmI!K<_C2f&f= zG&XXc^6~YhI(AmXu>l7VcaZm|nsDuNQ=evsrlFA$IT;!0>-+Vmat%72?p^*z+P)UB z4BuC((z@WFmj45D0B8DLXKu8*CSLxX_5ZqZyM2 z;xR2doAcZ`tM(_>B{tYd<`F=LTjb)UUD`fbzVrDzbq^+Bfw6*gpn757iZq()*;gNs zC^O&ZE*!Nugf21}wsL~-_^q&Ab+!$&&z~Bfv=UwzE$GmsY`o5Wn{na5w#yh2$363{ z2B%}tzk9bxEr7+<-KZ9dQqFg6I&)(YTtiR{66TEv{yV@=j+`BJ@z_s z0ydbjM-tq3e)D-cK*ev$6H1GjVg^5v(uuwnC6D%r5xQ(^ROBL07@ze(mY&T z2G{E~T7TnT4|y(6Jfy1$?7gIg@If#*vXcSjBpIYL_2d!$JaCGzf8Av#{a@1c|KJg~ zG9@MD!omWuxD`6X2***B+Pq7OhaiafuV6$5E`l=~Rek*|)idv39f4@+kH*~aIjx)d z9_V!~XAvmR7w02KsY%8G(p54FQt$S!w~V9%Z_@Sa(XTQ1^*z|13cu#Uuk~R6i|}hr z{Iw?jS`&Y*iT__~q`o~6cD=W^LdVn&KFPzRYK|O|>YINzh=v{H!9gI3@~SuTuHOsz EAD`t&tN;K2 literal 0 HcmV?d00001 From bc18c6d27343eed3edfa51bac5951a22adb7a576 Mon Sep 17 00:00:00 2001 From: Zeying Zhu <50204836+zzylol@users.noreply.github.com> Date: Mon, 12 Oct 2026 19:29:20 +0000 Subject: [PATCH 2/2] Ack inputs that a processor consumes into state asap_sketches, window_merge and the answer processors keep their input in state instead of forwarding it, but never acked it. Upstream nodes that wait for acks (the official fanout does by default) then held each message until timeout, cutting a branch's throughput to about a quarter. Each processor now acks the input once it has taken it. --- asap-precompute-rs/src/matchers.rs | 46 ++++++++++----------- asap-precompute-rs/src/otap/answer_nodes.rs | 6 +++ asap-precompute-rs/src/otap/processor.rs | 6 +++ asap-precompute-rs/src/otap/window_merge.rs | 4 ++ 4 files changed, 39 insertions(+), 23 deletions(-) diff --git a/asap-precompute-rs/src/matchers.rs b/asap-precompute-rs/src/matchers.rs index c932fda..bc04473 100644 --- a/asap-precompute-rs/src/matchers.rs +++ b/asap-precompute-rs/src/matchers.rs @@ -205,6 +205,29 @@ pub fn series_attrs(labels: &[KeyValue], aggregate_by: &[String]) -> Vec`, value = +/// the attribute's value as bytes. A cardinality or frequency sketch over +/// these series answers "how many distinct values" and "which values +/// dominate" per attribute key. +pub fn per_attribute(obs: &Observation, keys: &[String]) -> Vec { + let all = keys.iter().any(|k| k == "*"); + obs.labels + .iter() + .filter(|kv| all || keys.contains(&kv.key)) + .map(|kv| Observation { + timestamp_ms: obs.timestamp_ms, + metric: obs.metric.clone(), + resource_labels: obs.resource_labels.clone(), + labels: vec![KeyValue::new(ATTRIBUTE_KEY_LABEL, kv.key.clone())], + value: crate::observation::ObservationValue::bytes(kv.value.as_bytes().to_vec()), + }) + .collect() +} + #[cfg(test)] mod tests { use super::*; @@ -242,26 +265,3 @@ mod tests { assert!(LabelMatcher::matches_all(&matchers, &obs)); } } - -/// Label carrying the attribute key in per-attribute series. -pub const ATTRIBUTE_KEY_LABEL: &str = "attribute.key"; - -/// Splits one data point into one observation per attribute key in `keys` -/// (`"*"` = every attribute it has): labels `attribute.key=`, value = -/// the attribute's value as bytes. A cardinality or frequency sketch over -/// these series answers "how many distinct values" and "which values -/// dominate" per attribute key. -pub fn per_attribute(obs: &Observation, keys: &[String]) -> Vec { - let all = keys.iter().any(|k| k == "*"); - obs.labels - .iter() - .filter(|kv| all || keys.contains(&kv.key)) - .map(|kv| Observation { - timestamp_ms: obs.timestamp_ms, - metric: obs.metric.clone(), - resource_labels: obs.resource_labels.clone(), - labels: vec![KeyValue::new(ATTRIBUTE_KEY_LABEL, kv.key.clone())], - value: crate::observation::ObservationValue::bytes(kv.value.as_bytes().to_vec()), - }) - .collect() -} diff --git a/asap-precompute-rs/src/otap/answer_nodes.rs b/asap-precompute-rs/src/otap/answer_nodes.rs index 1fab626..c7e6286 100644 --- a/asap-precompute-rs/src/otap/answer_nodes.rs +++ b/asap-precompute-rs/src/otap/answer_nodes.rs @@ -26,12 +26,14 @@ use linkme::distributed_slice; use otel_arrow_dfe_config::node::NodeUserConfig; use otel_arrow_dfe_engine::config::ProcessorConfig; use otel_arrow_dfe_engine::context::PipelineContext; +use otel_arrow_dfe_engine::control::AckMsg; use otel_arrow_dfe_engine::control::NodeControlMsg; use otel_arrow_dfe_engine::error::Error; use otel_arrow_dfe_engine::local::processor as local; use otel_arrow_dfe_engine::message::Message; use otel_arrow_dfe_engine::node::NodeId; use otel_arrow_dfe_engine::processor::ProcessorWrapper; +use otel_arrow_dfe_engine::ConsumerEffectHandlerExtension; use otel_arrow_dfe_engine::{MessageSourceLocalEffectHandlerExtension, ProcessorFactory}; use otel_arrow_dfe_otap::pdata::OtapPdata; use otel_arrow_dfe_otap::OTAP_PROCESSOR_FACTORIES; @@ -272,6 +274,8 @@ impl local::Processor for SketchDetector { let Message::PData(pdata) = msg else { return Ok(()); }; + // Consumed into state here: ack so upstream (e.g. fanout) can move on. + effects.notify_ack(AckMsg::new(pdata.clone())).await?; let (mut out, mut events) = (Vec::new(), Vec::new()); for obs in observations(pdata, effects).await { let Some(env) = obs.value.envelope.filter(|e| !e.payload.is_empty()) else { @@ -420,6 +424,8 @@ impl local::Processor for ExactAnswers { } match msg { Message::PData(pdata) => { + // Consumed into state here: ack so upstream (e.g. fanout) can move on. + effects.notify_ack(AckMsg::new(pdata.clone())).await?; for obs in observations(pdata, effects).await { self.observe(&obs); } diff --git a/asap-precompute-rs/src/otap/processor.rs b/asap-precompute-rs/src/otap/processor.rs index ec1c3cf..0adaf84 100644 --- a/asap-precompute-rs/src/otap/processor.rs +++ b/asap-precompute-rs/src/otap/processor.rs @@ -74,6 +74,8 @@ use std::time::Duration; use async_trait::async_trait; use linkme::distributed_slice; +use otel_arrow_dfe_engine::control::AckMsg; +use otel_arrow_dfe_engine::ConsumerEffectHandlerExtension; use serde::{Deserialize, Serialize}; use otel_arrow_dfe_config::error::Error as OtapConfigError; @@ -417,6 +419,10 @@ impl local::Processor for AsapSketchesProcessor { match msg { Message::PData(pdata) => { + // Consumed into state here: ack so upstream (e.g. fanout) can move on. + effect_handler + .notify_ack(AckMsg::new(pdata.clone())) + .await?; let outcome = match decode_pdata_to_observations(pdata) { Ok(outcome) => outcome, Err(error) => { diff --git a/asap-precompute-rs/src/otap/window_merge.rs b/asap-precompute-rs/src/otap/window_merge.rs index 6a5534b..e61db4a 100644 --- a/asap-precompute-rs/src/otap/window_merge.rs +++ b/asap-precompute-rs/src/otap/window_merge.rs @@ -20,12 +20,14 @@ use linkme::distributed_slice; use otel_arrow_dfe_config::node::NodeUserConfig; use otel_arrow_dfe_engine::config::ProcessorConfig; use otel_arrow_dfe_engine::context::PipelineContext; +use otel_arrow_dfe_engine::control::AckMsg; use otel_arrow_dfe_engine::control::NodeControlMsg; use otel_arrow_dfe_engine::error::Error; use otel_arrow_dfe_engine::local::processor as local; use otel_arrow_dfe_engine::message::Message; use otel_arrow_dfe_engine::node::NodeId; use otel_arrow_dfe_engine::processor::ProcessorWrapper; +use otel_arrow_dfe_engine::ConsumerEffectHandlerExtension; use otel_arrow_dfe_engine::{MessageSourceLocalEffectHandlerExtension, ProcessorFactory}; use otel_arrow_dfe_otap::pdata::OtapPdata; use otel_arrow_dfe_otap::OTAP_PROCESSOR_FACTORIES; @@ -181,6 +183,8 @@ impl local::Processor for WindowMergeProcessor { } match msg { Message::PData(pdata) => { + // Consumed into state here: ack so upstream (e.g. fanout) can move on. + effects.notify_ack(AckMsg::new(pdata.clone())).await?; let observations = match decode_pdata_to_observations(pdata) { Ok(outcome) => outcome.observations, Err(e) => {