Course outline

Observability / Basic: signals and measurement meaning / Lesson 6

Collection pipelines and visible data loss

Map telemetry from instrumentation to query and distinguish source silence, intentional filtering, buffering, export failure, and backend visibility.

About 4 min readContent reviewed
On this page

Lesson goals

  • Explain receiver, processor, and exporter responsibilities.
  • Reconcile synthetic stage counts with explicit loss.
  • Define freshness and independent pipeline health.

Draw every transformation boundary

Telemetry passes through several boundaries before a query can display it: instrumentation, SDK aggregation or buffering, transport, collection, processing, export, storage, and query selection. Not every deployment has every stage, and some stages are repeated. A collector can receive signals, apply configured processors, and export them through configured pipelines. Component availability and configuration syntax depend on the actual distribution and version. Treat a pipeline diagram as a model to verify, not evidence that every signal follows that path. Record where filtering, sampling, attribute removal, and temporality conversion can change the data.

Define what each stage accepts and emits

For each boundary, record signal type, accepted format, destination, expected transformations, failure handling, and ownership. A receiver being declared in a configuration does not by itself prove that it participates in an active service pipeline. A successful transport acknowledgement may mean accepted into a queue rather than durably stored and queryable. The editorial record below separates those states and names the required observations. It is intentionally not a runnable collector configuration: no endpoints, credentials, storage paths, or environment-specific component versions are supplied.

yaml Illustrative pipeline acceptance model
pipeline_review: parcel-telemetry
stages: [accepted, processed, queued, exported, queryable]
intentional_drop_policy: bounded-and-counted
retry_policy: finite-and-observable
freshness_measure: source-event-to-query-visibility
health_owner: telemetry-platform-team

The record distinguishes transport progress from query visibility. It is an editorial contract rather than OpenTelemetry Collector YAML.

Count intentional and unexpected loss separately

The offline example starts with one thousand accepted records, removes one hundred intentionally under policy, and observes twenty export failures from the remaining set. Eight hundred eighty reach the modeled destination. Reporting only an eighty-eight-percent delivery fraction would conceal the difference between expected filtering and unexpected failure. Real asynchronous pipelines also have in-flight and delayed records, so stage counts may not balance within one instant. Align windows and account for queue changes before declaring loss. Counter resets, retries, and duplicate exports can further complicate reconciliation.

python Offline pipeline accounting model
accepted = 1000
policy_dropped = 100
export_failed = 20
exported = accepted - policy_dropped - export_failed
assert accepted == policy_dropped + export_failed + exported
print("exported", exported)
print("unexpected_loss_fraction", f"{export_failed / (accepted - policy_dropped):.2%}")
Expected output
exported 880
unexpected_loss_fraction 2.22%

The unexpected fraction uses the 900 records eligible after intentional filtering. The model assumes no queued or duplicated records.

Recognize buffering and backpressure limits

Buffering can absorb a short interruption, but finite memory or persistent storage eventually fills when arrivals exceed successful exports. Retry behavior can delay visibility and consume resources, while a restart may lose in-memory work depending on implementation. Define what happens when buffers are full and how that condition becomes visible. A healthy application can become harder to diagnose when its telemetry pipeline is overloaded. Avoid making business requests wait indefinitely for telemetry export. Performance and durability tradeoffs require the actual SDK and collector behavior, not a universal queue-size recommendation.

Observe the observer with a separate question

Pipeline health asks whether expected telemetry is complete and timely enough to support decisions. Inspect accepted and rejected volume, queue pressure, export errors, processing failures, and data age under the actual component’s documented semantics. Keep a way to recognize when the normal query path itself is blind. Do not interpret an empty chart as zero service errors until collection and selection are checked. This course uses only local count arithmetic and editorial designs; it does not run a collector, open a port, send telemetry, fill a queue, or verify backend durability.

Common errors and fixes

An acknowledgement is reported as durable storage

Why it happens
Transport acceptance and backend persistence were conflated.
How to fix it
Identify the acknowledged boundary and verify later stages separately.
Prevent it next time
Document acceptance states and durability limitations.

Missing data is blamed on instrumentation immediately

Why it happens
Filtering, buffering, export, and query stages were skipped.
How to fix it
Trace the signal through each owned boundary.
Prevent it next time
Maintain stage-level counts and freshness evidence.

A buffer is treated as unlimited outage protection

Why it happens
Finite resources and sustained backlog were ignored.
How to fix it
Define overflow behavior and bounded recovery expectations.
Prevent it next time
Review capacity and failure semantics for the actual version.

Check your understanding

1. Accepted records rise, export volume falls, and the queue grows. Has all missing data been lost?

Show worked solution

Not necessarily. Some records may still be buffered or retrying, and the observed interval may end before they export. Compare queue change, failure and drop counters, timestamps, and later visibility using compatible windows. Do not declare durable safety either; inspect the implementation’s persistence and overflow behavior.

2. Why should intentional filtering be counted?

Show worked solution

It makes the data contract auditable and distinguishes expected reduction from a broken pipeline. A new filter can otherwise look like an application traffic drop. Record the policy, bounded reasons, affected signal, and revision so downstream consumers understand which population remains and why.

Key takeaways

  • Pipeline acceptance has several distinct boundaries.
  • Account for policy drops, failures, and in-flight work.
  • Telemetry freshness and completeness need explicit ownership.

Official references