Start with the failure path, not the cloud provider
At 02:17, a payment API started timing out for customers in Gauteng. The application dashboard showed healthy pods in AWS Cape Town. The database dashboard showed normal CPU. The incident channel blamed the carrier, then the DNS provider,…
Unified Monitoring for Multi-Cloud Ecosystems: One Operational View Across SA’s Hybrid Estate
At 02:17, a payment API started timing out for customers in Gauteng. The application dashboard showed healthy pods in AWS Cape Town. The database dashboard showed normal CPU. The incident channel blamed the carrier, then the DNS provider, then the application team. The actual fault was less dramatic: a route between the on-premise data centre and eu-west had developed packet loss, while retries pushed the checkout service towards saturation.
That is the problem Unified Monitoring for Multi-Cloud Ecosystems must solve. It is not merely a larger dashboard. It is a consistent way to connect metrics, logs, traces, network signals, cost, and operational context across public cloud, private infrastructure, and regional connectivity.
Start with the failure path, not the cloud provider
Multi-cloud monitoring often begins with an inventory: AWS here, Azure there, Kubernetes clusters over there. This produces separate views of infrastructure rather than an understanding of how a customer request moves through it.
For a South African service, a more useful map might look like this:
- A mobile client reaches an edge or CDN POP.
- Traffic enters an API gateway hosted in a local cloud region.
- The request crosses a private link to an on-premise service.
- The service calls a managed database and a fraud provider in Europe.
- Logs and traces are shipped to a central observability platform.
Each hop has a different failure mode. A pod can be ready while its node is losing power. The application can report a 200 response while an upstream call takes 1.8 seconds. A cloud load balancer can be healthy while the last-mile link is dropping packets.
Design dashboards around these user journeys and service dependencies. Provider-specific dashboards still matter for diagnosis, but the first question during an incident should be, “Which part of the request path is degrading?” rather than, “Which cloud account is red?”
Unified Monitoring for Multi-Cloud Ecosystems needs a common telemetry contract
The LGTM stack provides a practical foundation: Prometheus for collection, Mimir for scalable long-term metrics, Loki for logs, Tempo for traces, and Grafana for exploration, dashboards, and alerting. Grafana documentation describes Loki as a composable logging system, Tempo as a high-volume distributed tracing backend, and Mimir as scalable long-term storage for Prometheus metrics.[11]
The tools are less important than the labels and metadata shared between them. Define a small telemetry contract before onboarding the next account or cluster:
service: the logical service name, independent of deployment platform.environment: production, staging, or development.region: such asaf-south-1, Johannesburg, Cape Town, or eu-west.cloud: AWS, Azure, private cloud, or on-premise.clusterandnamespace: only where they add diagnostic value.teamandcriticality: for ownership and prioritisation.
Do not put request IDs, customer IDs, full URLs, or exception text into metric labels. High-cardinality labels make metrics expensive and difficult to operate. Keep those values in logs and traces, where they can be searched when a metric indicates a problem.
Prometheus agents or local Prometheus servers can scrape Kubernetes, virtual machines, databases, network devices, and application exporters. Remote-write metrics to Mimir with external labels that identify the source estate. This preserves local collection during a WAN interruption while providing a common query layer for longer-term analysis.
global:
scrape_interval: 15s
external_labels:
estate: hybrid-sa
region: cape-town
remote_write:
- url: https://mimir.example.invalid/api/v1/push
headers:
X-Scope-OrgID: platform-production
scrape_configs:
- job_name: checkout-api
kubernetes_sd_configs:
- role: pod
relabel_configs:
- source_labels: [__meta_kubernetes_pod_label_app]
regex: checkout
action: keep
The endpoint above is illustrative: production configuration must use the actual Mimir gateway, authentication, tenant model, and TLS settings. The important design choice is that every series carries enough context to compare equivalent services across estates.
Use metrics to detect, traces to localise, and logs to explain
A useful cross-cloud alert should describe customer impact, not merely infrastructure activity. For example, a latency alert can combine request duration with the service and region dimensions:
histogram_quantile(
0.95,
sum by (le, service, region) (
rate(http_request_duration_seconds_bucket{
job="checkout-api",
route="/payments"
}[5m])
)
) > 0.8
That query tells the team where the 95th-percentile latency is high, but not why. A trace in Tempo can show that the checkout request spent most of its time waiting for a fraud check in eu-west. Its trace ID then provides the bridge into Loki.
Keep logs structured and attach stable correlation fields:
{
"timestamp": "2026-09-25T02:17:04.921Z",
"level": "WARN",
"service": "checkout-api",
"region": "cape-town",
"trace_id": "4bf92f3577b34da6a3ce929d0e0e4736",
"dependency": "fraud-provider",
"message": "upstream request exceeded deadline",
"duration_ms": 1842
}
Loki should index a restrained set of labels, such as service, environment, and region. The remaining fields can be parsed at query time. This keeps ingestion manageable while retaining the evidence needed during an incident.
Grafana is particularly useful at the point where these signals meet. A panel showing elevated latency can link directly to related logs and traces using the trace ID, allowing an engineer to move from symptom to request-level evidence without changing tools.
Model South African conditions as first-class signals
Load-shedding-aware monitoring is not a special dashboard for facilities teams. It belongs in service reliability. Track UPS runtime, generator state, battery health, node shutdown events, and the availability of monitoring agents. If a site loses power, an alert storm from unreachable exporters is less useful than one clear notification stating that an estate has entered degraded power operation.
Use maintenance windows or event annotations for scheduled power work, but do not suppress every alert. A service that normally fails over during a power event should have a separate alert when failover has not completed within its tested recovery objective.
Connectivity to Europe deserves similar treatment. Measure packet loss, round-trip time, DNS resolution, TLS handshake duration, and application-level synthetic transactions between South African regions and eu-west. A 200 response from a synthetic check is not sufficient if its latency has doubled or it is succeeding only after retries.
Last-mile instability also changes how alerting should work. A single probe going dark may indicate a local access problem. The same failure observed by probes in Cape Town, Johannesburg, and a cloud region is more likely to be a service or routing incident. Use multiple vantage points and alert on quorum where appropriate.
Keep POPIA boundaries visible in the telemetry design
POPIA does not create a blanket requirement for every record to remain in South Africa, but cross-border transfers must satisfy the conditions in section 72. Observability data can still contain personal information: email addresses in URLs, account identifiers in log messages, or request bodies accidentally captured by middleware.
Classify telemetry before centralising it. Application metrics are usually easier to aggregate globally than raw logs. Traces may require attribute filtering. Logs containing customer data may need local retention, redaction, or a regional Loki deployment with carefully controlled query access.
- Remove request bodies and authorisation headers from logs by default.
- Hash or tokenise identifiers only when correlation genuinely requires it.
- Separate tenant access in Mimir and Loki.
- Define retention by data class rather than applying one global period.
- Record where telemetry is stored and which operators can query it.
The 2024 National Data and Cloud Policy also highlights the importance of South African infrastructure for certain government data, including information tied to national security and sovereignty.[15] That does not automatically determine every private-sector architecture, but it is a