Grafana → Elastic · PromQL & TCO
Competitive lab · Challenge 1 · ~10 min

Multiple databases. Multiple queries. Worse for humans and AI.

Customer value: One observability store instead of Prometheus + Loki + Tempo — and keep PromQL where you already use it.

A typical Grafana stack spreads logs, metrics, and traces across three databases with three query languages. That slows humans in incidents and forces AI agents into multi-tool hops. On price, Elastic Serverless is modeled ~33% lower than Grafana Cloud on Prom workloads (see Challenge 3). This lab starts with Prom cost levers you can drop: scrape starvation, remote-write fan-out, and HA Prom + Thanos/Mimir ops — then one managed remote-write / OTLP path on Elastic.

STACK PAIN

Three stores

PromQL → LogQL → TraceQL. Manual joins, clipboard IDs, and Agent Builder needs three tool calls.

PROM COST LEVERS

Starve the scrape

15s → 60s scrapes · extra remote-write paths · relabel YAML · recording rules · shard the TSDB.

ELASTIC

Drop, don’t starve

One remote-write / OTLP endpoint · Streams Drop · lifecycle — PromQL kept, one investigation path.

Talk track: Multi-DB inefficiency first — then “and we’re ~33% lower on Grafana Cloud.” In the lab: paste PromQL A / B / C.
elastic
Competitive lab · Challenge 2 · ~15 min

Grafana continuity — panels map, plus easy migration.

Customer value: Familiar boards on Kibana — and a path to migrate a few real Grafana exports without a rewrite project.

Open Horizon — Grafana continuity, the sample board migrated with obs-migrate, then Horizon — Dashboard sprawl — which boards still query which indexes (Grafana folder sprawl).

MAP

Grafana → Kibana

Time series, stat, table → same story on the continuity board.

MIGRATE

obs-migrate

Sample: Prometheus Basics + PromQL alerts → Dashboards on live Horizon metrics.

ALERTS

Beyond Alertmanager

Keep PromQL in Kibana rules (ES|QL PROMQL) — one project, no Alertmanager sidecar.

SPRAWL

Boards → indexes

Grafana folder sprawl: Elastic inventories which dashboards still query which indexes, and alerts if a schema change would blank a widget.

In the lab: Continuity board → Sample: Prometheus Basics → Horizon — Dashboard sprawl → Streams metrics-generic.otel-default.
elastic
Competitive lab · Challenge 3 · ~15 min

Serverless TCO — ~33% lower on Grafana Cloud.

Customer value: Same PromQL workloads — modeled ~33% lower than Grafana Cloud, plus one store instead of three.

On the Grafana stack worksheet (12-month retention, Prometheus-sized samples): 100k samples/sec @ 296B → Grafana Cloud ~$33K/mo vs Elastic Serverless ~$22K/mo (~33% lower). Same ratio on a smaller footprint (~$3.1K → ~$2.1K). Pair with Challenge 1: multi-store inefficiency for humans and AI — and yes, we are cheaper. In the lab: Drop /debug/pprof, open Horizon — Streams savings, then open the sheet with your samples/sec.

Grafana Cloud
~$33K
Elastic Serverless
~$22K · ~33% lower
Smaller footprint (GC)
~$3.1K → Elastic ~$2.1K

Modeled list-rate · 12-mo Elastic retention vs Grafana Cloud’s included ~13-mo · ~33% lower in pricing analysis · tco-calc.o11ybot.app/?scenario=grafana-stack · confirm with measured usage

LEVER

Streams Drop

Cut scrape/debug noise before ingest — keep resolution without starving scrapes to control Grafana Cloud billable series.

TAKEAWAY

Leadership line

One observability store, one investigation query language, PromQL preserved — and ~33% lower than Grafana Cloud on modeled workloads.

In the lab: Drop → savings dashboard → open the TCO calc → one sentence for leadership.
elastic
Beyond PromQL · investigation

One ES|QL query across logs, metrics, and traces.

Customer value: Keep PromQL for dashboards — but stop exporting host lists and trace IDs between Loki, Prometheus, and Tempo.

In a typical Grafana stack, logs, metrics, and traces sit in three stores with three query languages. ES|QL subqueries (WHERE field IN (subquery)) keep the intermediate cohort inside Elasticsearch — saturated hosts, erroring hosts, or 500 slow trace IDs never land in a clipboard. One query answers questions like “what did the saturated hosts log?” or “470 of 500 slow traces share the same lock wait.” (Observability Labs · Aug 2026)

GRAFANA STACK

Three hops

PromQL chart → copy host names → LogQL → copy trace IDs → Tempo. Stale lists, manual joins, negative checks skipped.

ELASTIC

One store

Metrics → logs, logs → metrics, traces → logs, or all three nested — OTel fields kept on ingest, one time picker.

REPRODUCIBLE

Saved correlation

One ES|QL string anyone can re-run in Discover — not a join that lives in one engineer’s head during the incident.

Talk track: PromQL stays for metrics boards; Elastic wins when the question crosses signals — and when Agent Builder needs one query, not three tool calls.
elastic