Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 49 additions & 0 deletions deploy/configs/sketchcol-agent-b0-raw.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
# Baseline B0 — raw OTel forward (no sketching, no compression).
#
# Pipeline: OTLP in → batch → OTLP out to gateway. Metric bytes
# on the wire between agent and gateway are raw-OTLP full-
# fidelity. This is the paper's "do nothing" control against
# which every other baseline is measured.
#
# §6.2 bandwidth figure: the other baselines' savings are
# expressed as a fraction of what B0 sends.
#
# Works with `asap/sketchcol:dev` because the patched binary
# still ships the stock `batch` processor.
receivers:
otlp:
protocols:
grpc:
endpoint: 0.0.0.0:4317
http:
endpoint: 0.0.0.0:4318

processors:
batch:
timeout: 1s
send_batch_size: 1024

exporters:
otlp/gateway:
endpoint: gateway:4317
tls:
insecure: true

service:
pipelines:
metrics:
receivers: [otlp]
processors: [batch]
exporters: [otlp/gateway]

telemetry:
logs:
level: info
metrics:
level: detailed
readers:
- pull:
exporter:
prometheus:
host: 0.0.0.0
port: 8890
68 changes: 68 additions & 0 deletions deploy/configs/sketchcol-agent-b1-serf.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
# Baseline B1 — Serf (Gorilla-style XOR float compression).
#
# Paper §6.2 baseline: lossless float-column compression with no
# sketch math. Windows incoming data into tumbling intervals,
# XOR-encodes deltas, writes SERF1 binary blobs to local disk.
# Bandwidth savings come purely from bit-level compression, not
# from summarization.
#
# Unlike the sketch pipelines, the serfprocessor does NOT forward
# compressed data over OTLP — it writes to S3 or a local
# directory. `DropOriginal: true` disables the redundant raw-OTLP
# forward, so the bytes-on-wire figure is zero and the
# bandwidth-consumed figure is the size of files written to
# /var/tmp/asap-serf-out inside each agent container.
#
# Mount the output dir as a tmpfs or named volume from the
# compose overlay to keep it off the host disk. Size accounting
# via `du -sb /var/tmp/asap-serf-out` inside the container, or
# via the serfprocessor's self-telemetry
# `otelcol_datacollector_processor_output_bytes_total`.
receivers:
otlp:
protocols:
grpc:
endpoint: 0.0.0.0:4317
http:
endpoint: 0.0.0.0:4318

processors:
serf:
window_interval: 10s
# 0 MaxDiff + xor = lossless Gorilla.
compression: xor
max_diff: 0.0
drop_original: true
local_dir: /var/tmp/asap-serf-out

exporters:
# No OTLP forward — serfprocessor is a sink-style processor
# with DropOriginal=true. Keep an OTLP/gateway exporter wired
# for consistency with other baselines' service graph but feed
# it from a pipeline that carries no data.
otlp/gateway:
endpoint: gateway:4317
tls:
insecure: true

service:
pipelines:
metrics:
receivers: [otlp]
processors: [serf]
# A processor chain with DropOriginal=true ends in no data;
# the otlp/gateway exporter is kept as a hook for future
# modes that want to fan out alongside the Serf writer.
exporters: [otlp/gateway]

telemetry:
logs:
level: info
metrics:
level: detailed
readers:
- pull:
exporter:
prometheus:
host: 0.0.0.0
port: 8890
66 changes: 66 additions & 0 deletions deploy/configs/sketchcol-agent-b3-delta.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
# Baseline B3 — Delta sketch transmission over fixed 60s window.
#
# Paper §6.2 baseline: same DDSketch + HLL semantics as B2 (full
# sketch), but the wire payload is the SKETCH DELTA since the
# last flush, not the full sketch state. Delta = sparse diff of
# only-changed buckets/registers, so per-window bytes drop
# dramatically once the sketch fills in.
#
# Window length is fixed at 60 s here; B4 exposes it as an env
# knob for the window-tuning experiments.
receivers:
otlp:
protocols:
grpc:
endpoint: 0.0.0.0:4317
http:
endpoint: 0.0.0.0:4318

processors:
ddsketch:
mode: window
window_duration: 60s
transmit_sketch: true
delta_transmission: true
# Buckets changing by ≥1 count enter the delta; tune to trade
# accuracy tail vs payload size.
delta_threshold: 1
enable_self_monitoring: true
quantiles: [0.5, 0.9, 0.99]
metric_suffix: "_quantile"

HLL:
mode: window
window_duration: 60s
transmit_sketch: true
delta_transmission: true
enable_self_monitoring: true

batch:
timeout: 1s
send_batch_size: 1024

exporters:
otlp/gateway:
endpoint: gateway:4317
tls:
insecure: true

service:
pipelines:
metrics:
receivers: [otlp]
processors: [ddsketch, HLL, batch]
exporters: [otlp/gateway]

telemetry:
logs:
level: info
metrics:
level: detailed
readers:
- pull:
exporter:
prometheus:
host: 0.0.0.0
port: 8890
70 changes: 70 additions & 0 deletions deploy/configs/sketchcol-agent-b4-tunable.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
# Baseline B4 — Delta sketch with tunable time granularity.
#
# Paper §6.2 baseline-sweep: same semantics as B3 but
# `window_duration` is controlled by the `SKETCH_WINDOW` env var,
# so a single agent image + config can sweep 5s / 30s / 60s /
# 300s without rebuilding.
#
# Use via the compose overlay:
#
# SKETCH_WINDOW=10s docker compose -f base.yml \
# -f agents-N1.yml -f baseline-b4.yml up -d
#
# The `${env:SKETCH_WINDOW}` expansion is the OTel collector's
# standard config-var syntax. An unset var triggers a startup
# error — set a default in the overlay. Each agent gets its own
# value so N>1 runs can mix window durations if ever useful.
receivers:
otlp:
protocols:
grpc:
endpoint: 0.0.0.0:4317
http:
endpoint: 0.0.0.0:4318

processors:
ddsketch:
mode: window
window_duration: ${env:SKETCH_WINDOW}
transmit_sketch: true
delta_transmission: true
delta_threshold: 1
enable_self_monitoring: true
quantiles: [0.5, 0.9, 0.99]
metric_suffix: "_quantile"

HLL:
mode: window
window_duration: ${env:SKETCH_WINDOW}
transmit_sketch: true
delta_transmission: true
enable_self_monitoring: true

batch:
timeout: 1s
send_batch_size: 1024

exporters:
otlp/gateway:
endpoint: gateway:4317
tls:
insecure: true

service:
pipelines:
metrics:
receivers: [otlp]
processors: [ddsketch, HLL, batch]
exporters: [otlp/gateway]

telemetry:
logs:
level: info
metrics:
level: detailed
readers:
- pull:
exporter:
prometheus:
host: 0.0.0.0
port: 8890
10 changes: 9 additions & 1 deletion deploy/docker-compose/agents-N1.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,12 @@ x-agent: &agent-base
command:
- "--config=/etc/otel/config.yaml"
volumes:
- ../configs/sketchcol-agent.yaml:/etc/otel/config.yaml:ro
# Default baseline = B2 full-sketch. Override via env var
# AGENT_CONFIG to mount a different pipeline yaml — the
# paper baselines' compose overlays (baseline-b*.yml) set
# it before `docker compose up`. Compose expands the
# ${VAR:-default} syntax at container start.
- ../configs/${AGENT_CONFIG:-sketchcol-agent-b2-full.yaml}:/etc/otel/config.yaml:ro
environment:
CONTROLLER_OPAMP_URL: "ws://controller:4320/v1/opamp"
# Runtime-samples push endpoint — sketch-runtime sends
Expand All @@ -44,6 +49,9 @@ services:
CONTROLLER_OPAMP_URL: "ws://controller:4320/v1/opamp"
SKETCH_RUNTIME_GRPC_ENDPOINT: "http://controller:4321"
RUST_LOG: "info"
# Consumed by sketchcol-agent-b4-tunable.yaml; other
# baselines ignore it. Default 60s.
SKETCH_WINDOW: "${SKETCH_WINDOW:-60s}"

# Override fake-exporter to target the agent instead of
# the gateway — the agent's sketch pipeline is the thing we
Expand Down
Loading