docs(telemetry): remove site measurements from the collector comments

The repo is public, so a comment must not carry one-site measurements or
claim a prior state of the source. Three comments did both.

The tail-sampling comment called itself "Box-only (uncommitted)", which names
our deployment and was untrue. It now states what the sampling does, and adds
the consequence that matters: Log.cpp writes a trace id only for a sampled
span, so sampling after that decision leaves log-to-trace links resolving to
nothing.

The histogram bucket comments justified each edge with measured percentages
and durations, and said what the buckets "used to" do. The mechanism is
unchanged and now stated without the figures. Also drops a duplicated line in
the Alloy copy. The bucket lists themselves are untouched and still agree
across all three files.
This commit is contained in:
Pratik Mankawde
2026-09-22 15:00:30 +01:00
parent a1b3b4486a
commit 54809960ff
3 changed files with 33 additions and 33 deletions

View File

@@ -315,15 +315,14 @@ otelcol.connector.spanmetrics "xrpld" {
explicit { explicit {
// Buckets MUST stay strictly ascending (the connector binary-searches // Buckets MUST stay strictly ascending (the connector binary-searches
// them and silently misbuckets otherwise) and MUST match the two // them and silently misbuckets otherwise) and MUST match the two
// otel-collector-config*.yaml lists. Sub-MILLISECOND boundaries exist // otel-collector-config*.yaml lists. Sub-millisecond boundaries exist
// because most xrpld spans sit far below 1ms (tx.preflight means // because most xrpld spans sit far below 1ms: a 1ms floor puts nearly
// ~0.012ms): a 1ms floor put >99.99% of samples in bucket one and pinned // every sample in bucket one and pins p95/p99 to that bucket's edge.
// every p95/p99 at a constant 0.95ms. // Sub-second boundaries cover RPC, tx and ledger spans. The 2s-4s edges
// otel-collector-config*.yaml lists. Sub-second boundaries cover // resolve second-scale consensus spans, and 10s/30s give the
// RPC/tx/ledger spans; 2s-4s resolve second-scale consensus spans // ledger.acquire catch-up tail a home so its p95/p99 stop reading +Inf.
// (consensus.round ~3.9s, consensus.establish ~1.9s) that used to pile // Each edge was chosen from a measured duration distribution for the
// into one 1s-5s bucket; 10s/30s give the ledger.acquire catch-up tail // spans it covers.
// (~17% exceeds 5s) a measurable home so its p95/p99 stop reading +Inf.
buckets = ["0.01ms", "0.05ms", "0.1ms", "0.25ms", "0.5ms", "1ms", "5ms", "10ms", "25ms", "50ms", "100ms", "250ms", "500ms", "1s", "2s", "3s", "4s", "5s", "10s", "30s"] buckets = ["0.01ms", "0.05ms", "0.1ms", "0.25ms", "0.5ms", "1ms", "5ms", "10ms", "25ms", "50ms", "100ms", "250ms", "500ms", "1s", "2s", "3s", "4s", "5s", "10s", "30s"]
} }
} }

View File

@@ -78,10 +78,13 @@ processors:
batch: batch:
timeout: 1s timeout: 1s
send_batch_size: 100 send_batch_size: 100
# Box-only (uncommitted): probabilistic 0.5% tail sampling on the # Probabilistic tail sampling, on the trace-storage branch only. The
# trace-storage branch only. spanmetrics-derived metrics see 100% of spans # spanmetrics branch sees every span, so span-derived RED metrics stay
# (they run on a separate branch) so RED remain exact; Tempo/Cloud stores # exact while stored trace volume is cut to bound cost on a long-running
# ~1/200 of traces to keep long-running node cost bounded. # node. Operators who need full traces raise sampling_percentage to 100.
# Note: a log line carries a trace id only when its span was sampled at
# the SDK, so sampling here drops traces whose ids are already in the
# logs, and log-to-trace links for those resolve to nothing.
tail_sampling: tail_sampling:
decision_wait: 10s decision_wait: 10s
num_traces: 50000 num_traces: 50000
@@ -177,16 +180,15 @@ connectors:
unit: ms unit: ms
explicit: explicit:
# Buckets MUST stay strictly ascending (the connector binary-searches # Buckets MUST stay strictly ascending (the connector binary-searches
# them and silently misbuckets otherwise). Sub-MILLISECOND boundaries # them and silently misbuckets otherwise) and MUST match the Alloy
# (0.01-0.5ms) exist because most xrpld spans are far below 1ms -- # list and the other collector config. Sub-millisecond boundaries
# tx.preflight means ~0.012ms, tx.preclaim ~0.15ms -- so a 1ms floor # exist because most xrpld spans sit far below 1ms: a 1ms floor puts
# put >99.99% of samples in the first bucket and pinned every p95/p99 # nearly every sample in the first bucket and pins p95/p99 to that
# at a constant 0.95ms. Sub-second boundaries cover # bucket's edge. Sub-second boundaries cover RPC, tx and ledger spans.
# RPC/tx/ledger spans; the 2s-4s boundaries resolve second-scale # The 2s-4s edges resolve second-scale consensus spans, and 10s/30s
# consensus spans (consensus.round ~3.9s, consensus.establish ~1.9s) # give the ledger.acquire catch-up tail a home so its p95/p99 stop
# that used to pile into a single 1s-5s bucket; 10s/30s give the # reading as +Inf. Each edge was chosen from a measured duration
# ledger.acquire tail (~17% exceeds 5s during catch-up) a measurable # distribution for the spans it covers.
# home so its p95/p99 stop reading as +Inf.
buckets: buckets:
[ [
0.01ms, 0.01ms,

View File

@@ -168,16 +168,15 @@ connectors:
unit: ms unit: ms
explicit: explicit:
# Buckets MUST stay strictly ascending (the connector binary-searches # Buckets MUST stay strictly ascending (the connector binary-searches
# them and silently misbuckets otherwise). Sub-MILLISECOND boundaries # them and silently misbuckets otherwise) and MUST match the Alloy
# (0.01-0.5ms) exist because most xrpld spans are far below 1ms -- # list and the other collector config. Sub-millisecond boundaries
# tx.preflight means ~0.012ms, tx.preclaim ~0.15ms -- so a 1ms floor # exist because most xrpld spans sit far below 1ms: a 1ms floor puts
# put >99.99% of samples in the first bucket and pinned every p95/p99 # nearly every sample in the first bucket and pins p95/p99 to that
# at a constant 0.95ms. Sub-second boundaries cover # bucket's edge. Sub-second boundaries cover RPC, tx and ledger spans.
# RPC/tx/ledger spans; the 2s-4s boundaries resolve second-scale # The 2s-4s edges resolve second-scale consensus spans, and 10s/30s
# consensus spans (consensus.round ~3.9s, consensus.establish ~1.9s) # give the ledger.acquire catch-up tail a home so its p95/p99 stop
# that used to pile into a single 1s-5s bucket; 10s/30s give the # reading as +Inf. Each edge was chosen from a measured duration
# ledger.acquire tail (~17% exceeds 5s during catch-up) a measurable # distribution for the spans it covers.
# home so its p95/p99 stop reading as +Inf.
buckets: buckets:
[ [
0.01ms, 0.01ms,