Building an Observability Stack with Prometheus and Grafana
Metrics, alerting rules, and the dashboards that actually get looked at during an incident.
Most teams don’t have a metrics problem — they have a too many dashboards nobody looks at problem. This is the minimal setup we use to go from “no visibility” to “useful alerts and three dashboards people actually open during an incident.”
Prometheus v2.51 Grafana v10.4

Scrape config
Prometheus pulls metrics on an interval rather than receiving pushes, which keeps the failure mode simple: if a target stops responding, you get gaps, not silent data loss.
| |
Querying the same thing two ways
PromQL and Grafana’s query builder both end up expressing the same question — “what’s our p99 latency over the last 5 minutes” — just with different syntax depending on where you’re working:
| |
| |
The three dashboards that earn their keep
Everything else is useful for deep-dives, but these are the ones worth pulling up during an active incident:
- Golden signals — latency, traffic, errors, saturation, per service. If this doesn’t tell you where to look next, the next dashboard won’t either.
- Deploy correlation — a vertical marker on every graph for each deploy. Most “mystery regressions” are a deploy that happened 20 minutes before someone noticed.
- Dependency health — the two or three external services and datastores that, if slow, make everything downstream look broken.