Unified Observability Platform at Enterprise Scale

Built centralized observability platform processing 500TB logs/month, providing unified metrics, traces, and logs with intelligent alerting and 90% reduction in MTTR.

[Overview] System Overview

A financial services company with 300+ microservices struggled with fragmented observability. Multiple logging platforms, inconsistent metrics, and no distributed tracing made incident response slow and painful.

We designed and implemented a unified observability platform: Prometheus for metrics, Jaeger for traces, and Loki for logs-all correlated through shared context. The platform processes 500TB of logs monthly and 1M metrics per minute.

Mean Time To Resolution (MTTR) dropped 90%. Engineers can now correlate a spike in latency with specific traces and corresponding log entries in minutes instead of hours.

[Context] Situation before

Observability was an afterthought. Each team chose their own tools. There was no unified view of system health.

##### Tool Fragmentation

6 different logging solutions: ELK, CloudWatch Logs, Splunk, custom file-based, Datadog (trial), and /dev/null.

Metrics were inconsistent. Some services exported Prometheus metrics; others used StatsD; many had no metrics.

Distributed tracing did not exist. Debugging cross-service issues meant correlating timestamps across log files.

##### Incident Response Pain

Average incident took 4 hours to resolve. Most time spent finding relevant data.

Post-mortems repeatedly cited "lack of visibility" as a contributing factor.

On-call engineers needed access to 6 different dashboards and 3 different log systems.

[Diagnosis] The real problem

The visible problem was tool fragmentation. The proposed solution was "standardize on one vendor."

But vendor consolidation would not solve the underlying issue: telemetry was not correlated. Knowing that errors spiked and latency increased did not answer why without tracing.

The real need was a unified telemetry model: every request should be traceable across services with corresponding logs and metrics attached to the same context.

Understanding the root cause changed everything.

[Boundaries] Working constraints

Enterprise observability must balance cost, performance, and compliance.

OPERATIONAL

  • Cannot impact application performance
  • Must support 500TB logs/month
  • 30-day retention requirement

COST

  • Budget $300K/year including infrastructure
  • Cannot use per-seat or per-GB pricing models
  • Open source preferred

TEAM

  • Platform team of 4
  • 300+ developers as users
  • No dedicated observability engineers

MIGRATION

  • Cannot force immediate adoption
  • Existing alerts must continue working
  • Historical data migration optional

IMMUTABLE

  • AWS and on-premises hybrid
  • Kubernetes and VM workloads
  • Regulatory audit trail requirements

Constraints are features, not obstacles. They guide design decisions.

[Decisions] Key tradeoffs

Observability architecture balanced capability, cost, and operational complexity.

REJECTED

Commercial APM (Datadog/New Relic)

Fully managed observability platform

Cost prohibitive at this scale. $1.5M+ annually based on estimates. Vendor lock-in concerns.

REJECTED

ELK + Prometheus only

Standard open source stack without tracing

Missing distributed tracing. ELK expensive at 500TB/month. Would not solve correlation problem.

CHOSEN

Grafana Stack (Prometheus + Loki + Tempo)

Unified open source with correlation

Native correlation between metrics, logs, and traces. Cost-effective at scale. Strong Kubernetes integration. Grafana provides unified UI.

[Design] Architecture design

The platform uses the Grafana stack: Prometheus (with Thanos for long-term storage) for metrics, Loki for logs, and Tempo for traces. Grafana provides a unified query interface.

All telemetry includes trace_id for correlation. From any metric alert, engineers can drill down to traces and corresponding logs.

OpenTelemetry provides consistent instrumentation across all services regardless of language.

"type": "architecture", "title": "Unified Observability Platform", "description": "Correlated metrics, logs, and traces with unified interface", "components": [ "name": "Services", "type": "service", "description": "Instrumented apps" }, "name": "OTel Collector", "type": "service", "description": "Telemetry routing" }, "name": "Prometheus", "type": "database", "description": "Metrics" }, "name": "Loki", "type": "database", "description": "Logs" }, "name": "Tempo", "type": "database", "description": "Traces" }, "name": "Thanos", "type": "database", "description": "Long-term storage" }, "name": "Grafana", "type": "user", "description": "Unified UI" } ], "connections": [ "from": "Services", "to": "OTel Collector", "label": "OTLP" }, "from": "OTel Collector", "to": "Prometheus", "label": "Metrics" }, "from": "OTel Collector", "to": "Loki", "label": "Logs" }, "from": "OTel Collector", "to": "Tempo", "label": "Traces" }, "from": "Prometheus", "to": "Thanos", "label": "Long-term" }, "from": "Grafana", "to": "Prometheus", "label": "Query" }, "from": "Grafana", "to": "Loki", "label": "Query" } ], "boundaries": [ "name": "Observability Platform", "contains": [ "OTel Collector", "Prometheus", "Loki", "Tempo" ] } ] }


{/* Diagram: data-flow - Incident Investigation Flow */}
{/* ```json
{
  "type": "data-flow",
  "title": "Incident Investigation Flow",
  "description": "Correlated debugging from alert to root cause",
  "components": [
    {
      "name": "Alert",
      "type": "external"
    },
    {
      "name": "Metric Dashboard",
      "type": "user"
    },
    {
      "name": "Trace View",
      "type": "user"
    },
    {
      "name": "Log Search",
      "type": "user"
    },
    {
      "name": "Root Cause",
      "type": "user"
    }
  ],
  "connections": [
    {
      "from": "Alert",
      "to": "Metric Dashboard",
      "label": "Click through"
    },
    {
      "from": "Metric Dashboard",
      "to": "Trace View",
      "label": "Exemplar link"
    },
    {
      "from": "Trace View",
      "to": "Log Search",
      "label": "trace_id filter"
    },
    {
      "from": "Log Search",
      "to": "Root Cause",
      "label": "Error details"
    }
  ]
}

[Approach] Execution model

Platform rollout proceeded in phases with gradual adoption.

Month 1-2: Core platform deployment. OpenTelemetry instrumentation library for Java and Go.

Month 3-4: Critical services onboarded. Demonstrated value with real incidents.

Month 5-6: Self-service onboarding. Documentation and training for remaining teams.

[Results] Measurable outcomes

MTTR reduced from 4 hours to 25 minutes-90% improvement.

Observability costs reduced from $500K (fragmented) to $280K (unified).

Developer satisfaction improved. NPS for platform tooling increased from -20 to +45.

Proactive incident detection enabled. Anomaly detection catches issues before users notice.

Key improvements achieved:

  • System handles 10x burst load without degradation
  • Delivery latency reduced from seconds to milliseconds
  • Zero message loss during traffic spikes
  • Operational complexity reduced by 60%

[Anti-patterns] What could have gone wrong

Incident resolution would continue taking hours. Engineer burnout from on-call would worsen.

Fragmented tooling costs would continue growing. Each team adding their own solution.

No path to proactive monitoring. Without correlation, anomaly detection is impossible.

  • Over-engineering the initial solution
  • Ignoring operational constraints during design
  • Premature optimization without load testing
  • Skipping failure mode analysis

[Applicability] Where this pattern applies

Unified observability applies to any organization with 20+ services and distributed architecture.

The Grafana stack is particularly cost-effective for high-volume environments.

Smaller organizations or single-application teams may find commercial APM more appropriate.

Every system is different. Context always matters.