Back openDesk Edu for a sovereign, open-source education — every vote counts.
Vote nowSave products you love by clicking the heart icon.
Comprehensive guide to building effective Grafana dashboards for infrastructure monitoring with multiple data sources and alerting.
The 2026 sovereignty question: Who actually holds your metrics? Most teams wire logs, traces and user behaviour into a US-hosted SaaS and call it "observability". The bill arrives later — as data-residency risk, renewal lock-in, and a dashboard you cannot audit.
💡 Fact: Every error trace, user agent and request path you send to a third-party observability vendor leaves your jurisdiction. Under GDPR that is a transfer decision, not a configuration detail.
A managed observability platform is convenient until it isn't. The structural costs are the ones that hurt:
| Cost | What it actually means | Example |
|---|---|---|
| Data residency | Telemetry leaves your jurisdiction | EU user data in a US region |
| Vendor lock-in | Query language and agents are proprietary | Cannot export without re-instrumenting |
| Opaque pricing | Cost scales with ingestion, not value | 10× bill after one noisy service |
📊 The trade-off in one line: you trade control for convenience, and convenience compounds into dependence.
A self-hosted stack does not mean building telemetry from scratch. It means assembling four mature, open-source projects behind your own network boundary:
🔍 Why these four: they are the components the CNCF landscape has already settled on. Self-hosting them gives you the same workflow as a SaaS — minus the jurisdiction problem.
Comparison: self-hosted vs. SaaS observability
| Dimension | Self-hosted (Prometheus / Loki / Grafana) | SaaS (Datadog / Grafana Cloud) |
|---|---|---|
| Data location | Your infrastructure | Vendor's region |
| Query language | PromQL / LogQL (open) | Proprietary |
| Lock-in | None — standard formats | High |
| Marginal cost | Storage and compute you already run | Per-host / per-GB ingestion |
| Effort | You operate it | Vendor operates it |
Alloy sits at the edge of your services and ships to Prometheus (metrics) and Loki (logs). Grafana reads both. Nothing leaves your network:
services ──> Alloy ──> Prometheus (metrics)
└─────> Loki (logs)
Grafana ──queries──> Prometheus + Loki
scrape_configs:
- job_name: app
static_configs:
- targets: ["app:3000"]
- job_name: alloy
static_configs:
- targets: ["alloy:12345"]
logging {
level = "info"
}
loki.source.file "app_logs" {
targets = [{"__path__" = "/var/log/app/*.log"}]
forward_to = [loki.write.local.receiver]
}
loki.write "local" {
endpoint { url = "http://loki:3100/loki/api/v1/push" }
}
Self-hosting is not free. The honest list:
💡 Rule of thumb: if a single missed dashboard would not page anyone today, a self-hosted stack on the same Kubernetes you already trust is more than enough.
/metrics endpoint.Owning your telemetry is the cheapest sovereignty you will ever buy — because you are already paying for the compute.