Grafana is a frontend destination for observability: it queries backend data sources and presents selected signals through dashboards, visualizations, and alerts. It is especially suited to time-series-focused, graph-oriented views while supporting multiple backends. section 6.1.1 section 5.0
Its central resources organize the observability workflow:
- Data sources connect dashboards and alerts to backends such as Prometheus, Jaeger, MySQL, and Amazon CloudWatch. section 6.1.1
- Dashboards organize related visualizations and can parameterize queries with dashboard variables. section 6.1.1
- Alerts evaluate conditions and notify contact points such as email, Slack, PagerDuty, Kafka, or webhooks. section 7.2.2
Grafana is useful as a single pane across multiple observability backends, but it does not replace those backends: it queries them to visualize or evaluate signals. Alert rules can still incur backend-query costs even when notifications are silenced. section 7.2.2 section 5.0
From service error to root cause
An on-call engineer opens a Grafana dashboard and sees an increased error rate in Prometheus metrics. An exemplar trace ID leads to Jaeger, where trace duration and error codes guide a drill-down into service logs. This metric-to-trace-to-log workflow correlates signals rather than relying on one signal type alone. section 1.5.2
Listing 6.1 The Docker Compose configuration for the Grafana instance
version: "3.5"
services:
grafana:
image: grafana/grafana-oss:9.1.4
ports:
- "3000:3000"
volumes:
- ./grafana.ini:/etc/grafana/grafana.ini #1
- ./ds.yaml:/etc/grafana/provisioning/datasources/datasource.yaml #2
depends_on:
- prometheus
prometheus:
image: prom/prometheus:latest
ports:
- "9090:9090"
volumes:
- ./prom-config.yaml:/etc/prometheus/prometheus.yml
A Docker Compose configuration stands up Grafana 9.1.4 alongside Prometheus, exposes Grafana on port 3000, and provisions its data source configuration. section 6.1.1








