A practical observability playbook for trading systems: use golden signals to quantify reliability, watch tail latency instead of averages, separate business failures from system faults, and manage change with error budgets while satisfying audit trails.
For a trading system, reliability isn't "good enough" — every millisecond has a price. A payment that's 500ms late may already have lost the customer; an order that stalls at one node can cause reconciliation mismatches. Observability here isn't a nice-to-have; it's part of risk control and compliance.
The nature of these systems dictates the focus: traffic has sharp peaks and valleys, latency must be read from the tail rather than the average, errors must distinguish business failures from system faults, and every step must leave an auditable trace. Let's work through metrics, SLOs and sampling.
Google SRE's golden signals fit trading systems well, with adjustments:
In Observe, build a metric card set per core interface showing P99 latency, QPS, error rate and queue backlog side by side. But a dashboard isn't the destination — it only tells you "is it healthy right now". SLOs tell you "how many more changes can we survive this month".
SLOs turn "reliable" from an adjective into a number. For a trading system, start with these three SLIs:
An SLI must be defined precisely enough to code against. Does "successful request" mean HTTP 2xx, or "business return code is success"? Which table in which system defines "successfully settled"? A vague definition makes the SLO meaningless.
Once SLOs are set, the error budget follows. With a 99.9% availability target and a 30-day month, the budget is 0.1% × 30 days ≈ 43 minutes. The team can spend those 43 minutes on releases, canaries and experiments — and should stop when the budget runs low. That's the real point of an SLO: not punishment, but a quantified space for change, turning "can we ship this?" from gut feeling into arithmetic.
With an error budget, the alerting strategy should shift too:
This turns alerting from watching instantaneous metrics into watching your reliability balance — a natural complement to the dynamic baseline described in our earlier article.
Trading traffic is heavy, and full tracing is expensive to store, so sampling is required. But sampling can't be one-size-fits-all:
The sampling policy itself must be auditable — you need to explain which traces were sampled and why. During a compliance audit, an enterprise customer will demand "the full trace of this specific transaction at this specific time"; if your sampling policy can't be explained, you effectively have no evidence. Observe supports rule-based sampling and writes sampling decisions into the log so they can be traced back.
Suggested rollout order: define SLIs and SLOs for core interfaces first, then build golden-signal dashboards, then tune sampling. Observability stacks layer by layer — don't chase "100% coverage with no blind spots" on day one; it's expensive and unnecessary.