Case study · Telecom observability

From many monitoring tools to one view of what customers experience

Many monitoring tools, each owned by a different team, and incidents still reported by customers before anyone inside noticed. The goal was one telemetry pipeline, service-level objectives tied to customer journeys, and alerts that fire because users are affected rather than because a server is busy.

Case studyTelecom · Digital and IT servicesSumanta Mukhopadhyay8 min read
#observability#platform#kubernetes#architecture
CASE STUDY · CASE STUDY · TELECOM OBSERVABILITY28 Oct 2026 · 01:44 GST
At a glance
SectorTelecom · Digital and IT services
My rolePrincipal engineer, platform and observability
EngagementArchitecture, rollout and hand-off
ScopeInstrumentation, collector pipeline, SLOs, alerting, on-call
What changed
  • One telemetry pipeline for traces, metrics and logs instead of tool-by-tool agents
  • SLOs defined for key customer journeys and reviewed with product owners
  • Pages driven by error-budget burn rather than resource thresholds
  • Incidents traced across service boundaries from a single trace view
OpenTelemetry SDKsOBI (eBPF)OpenTelemetry CollectorOTLPPrometheusAlertmanagerTrace and log backendsKubernetes

Anonymised composite. Client names, identifying details and confidential figures are withheld; public facts are cited in the references.

The situation

A telecom operator ran customer-facing digital services (self-care apps, online ordering, payments and activation) on top of a mix of modern microservices and long-lived back-office systems. Monitoring had grown team by team. Each group had its own agents, dashboards and alert rules, and the same incident lit up several tools at once without any of them saying whether customers were affected.

The pattern on bad days was familiar: complaints arrived through support channels first, several teams investigated in parallel from their own dashboards, and the root cause sat at a boundary nobody's tool covered.

What had to be true

  • One vendor-neutral telemetry pipeline, so instrumentation is done once and backends can change.
  • Traces across boundaries, from the app request through the API layer to the back-office call.
  • Objectives tied to customer journeys, agreed with the people who own those journeys.
  • Alerts that mean action: page when users are being hurt, ticket when a budget is slowly eroding, and nothing else.
  • Cost under control, with sampling and cardinality managed centrally rather than service by service.

Architecture

The core was an OpenTelemetry Collector gateway: services and node-level agents send OTLP to a central endpoint per cluster or region, where processing, sampling and export happen once1. Deployment patterns are compared in OpenTelemetry Collector deployment patterns.

Sources
MicroservicesOTel SDKsLegacy serviceseBPF, no code changeKubernetescluster and node metricsNetwork and edgeexisting exporters
Collect
Node agentshost-local dataOBItraces and RED metrics
Gateway
Collector gatewayenrich, filter, sampleTrace-aware load balancingtail sampling tierCredentialsheld centrally
Store
Prometheusmetrics and rulesTrace backendsampled tracesLog storetrace-correlated
Act
SLO burn-rate alertspage or ticketJourney dashboardsper product ownerIncident reviewbudget impact
Layered architecture: instrument once, process centrally, and alert on objectives rather than on components.

For older services that could not be changed quickly, OpenTelemetry eBPF Instrumentation (OBI) captured spans and rate, error and duration metrics for HTTP and gRPC traffic without code changes2. It cannot see business context, so revenue-critical services also received SDK instrumentation for custom attributes. More in OpenTelemetry eBPF instrumentation.

The data flow, end to end

  1. InstrumentSDKs on new services, OBI on legacy ones, consistent resource attributes everywhere
  2. CollectNode agents add host and Kubernetes metadata and forward OTLP
  3. ProcessGateway filters noise, drops high-cardinality labels and applies sampling policy
  4. StoreMetrics to Prometheus, traces and logs to their backends, linked by trace ID
  5. EvaluateRecording rules compute SLIs and burn rates per journey
  6. RespondFast burn pages on-call; slow burn opens a ticket for the owning team
One path for every signal, with policy applied once at the gateway.

Prometheus held the SLI time series and evaluated recording and alerting rules, which suits numeric operational data well, though not anything that needs exact per-request accounting3.

The hard part: deciding what to promise

The pipeline was engineering. The objectives were negotiation. Each journey (sign in, view bill, pay, activate) needed an indicator measured close to the user, a target the business could defend, and an owner who accepted the consequences of the error budget5. In practice that meant:

  • Choosing indicators at the edge of the journey, not on internal components that customers never see.
  • Starting with targets the service already met most of the time, then tightening, rather than declaring aspirational numbers nobody could hold.
  • Writing a short error budget policy per journey that said what happens when the budget runs low.
  • Retiring old component alerts deliberately, with each team agreeing what replaced them.

Alerting followed the multiwindow, multi-burn-rate approach in the Google SRE Workbook, which pairs a long window for significance with a short window for fast reset4. The practical version for smaller teams is in SLOs and error budgets for small teams.

An SLO is a business decision expressed in numbers. If product owners have not agreed it, it is just another threshold.

How the engagement ran

Platform team
  1. Run collectors and gateway
  2. Own sampling and cost policy
  3. Publish instrumentation defaults
Service teams
  1. Adopt SDK or OBI
  2. Define SLIs with platform
  3. Own pages for their journeys
Product owners
  1. Agree targets
  2. Approve error budget policy
  3. Review budget each cycle
Platform owns the pipes, service teams own the signals, product owners own the promise.
Phase 1Assess
  • Tool and alert inventory
  • Recent incident review
  • Journey map
Phase 2Pipeline
  • Gateway and agents
  • One journey traced end to end
  • Attribute conventions
Phase 3Objectives
  • SLIs and targets
  • Burn-rate alerts
  • Retire legacy alerts
Phase 4Scale and hand off
  • Remaining journeys
  • On-call runbooks
  • Budget reviews in planning
Phased delivery: one customer journey fully observed before widening coverage.

Key decisions and trade-offs

DecisionAlternativeWhy
OpenTelemetry and OTLPVendor agents per toolInstrument once; backends become replaceable
Collector gatewayServices export directlyCentral sampling, filtering and credentials
OBI for legacy servicesWait for code changesBaseline traces now; SDKs where context matters
Journey-level SLOsPer-component thresholdsAlerts reflect customer impact, not resource noise
Multiwindow burn-rate alertsStatic error-rate alertsBetter precision and faster reset

What I'd do again, and differently

Again: trace one journey end to end before instrumenting everything, and make product owners co-own the targets. Differently: set attribute naming and cardinality rules before the first service onboards. Cleaning up inconsistent labels later cost more than agreeing them early.

If you're planning something similar, the fractional CTO page describes how I lead platform and reliability work, or analyse your challenge and bring the result to a call.

References
  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
FAQ

Common questions

Why put a collector gateway between services and backends?

A gateway gives one place to enforce sampling, filtering, enrichment and credentials, and lets you change or add backends without touching every service.

Can eBPF instrumentation replace SDKs?

It is a fast way to get baseline traces and RED metrics without code changes, but it cannot see business context. Critical services still benefit from SDK instrumentation for custom attributes and spans.

What is a burn-rate alert?

It alerts on how quickly a service is consuming its error budget, rather than on a raw error count. Combining a long and a short window keeps alerts both meaningful and quick to reset.

Keep reading

Related

Open to advisory, fractional CTO & select builds

Let's talk about what you're building.

The fastest route is a free 30-minute call. Prefer to write? Send a message and I'll reply personally within two business days.

Start a conversation

How would you like to reach me?

Book a 30-min callFastest. Pick any open slot on my calendar.→ Write in GmailOpens a pre-filled draft in your browser.→ Use my email appOutlook, Apple Mail or your default client.→

I reply personally within two business days. Time zones from the Americas and Europe to the Middle East and Asia-Pacific.