Evidence ledger
One row per claim in Every backend you add is a six-year promise: ten years of Grafana Labs in git: who published it, what grade it carries, when it was written, when the link was last checked, and the quote or figure it rests on. Nothing in the guide is cited from memory, so anything not in this table is not in the guide.
Field guide: Every backend you add is a six-year promise: ten years of Grafana Labs, read from its own git history. Research date: 2026-09-26. Every row was read in this session.
How these sources were read, and the limit on this hunt
This session's network policy allowed GitHub and nothing else. Engineering blogs, conference
talks, papers, vendor documentation sites and status pages were all refused at the egress proxy
(HTTP 403 on CONNECT), including grafana.com, which is where Grafana Labs publishes its own
architecture posts and its own Grafana Cloud incident reviews. Two consequences the reader
should hold onto:
- Every claim here is a git object. Each repository below was cloned in full
(
git clone --filter=blob:none) and read withgit log,git showandgit ls-tree. Where a row cites a commit, the SHA is given, so the claim can be re-checked offline withgit show <sha>against a clone of the same repository. Nothing is cited from memory, and nothing is cited from a search-result summary. - There is no vendor narrative in this guide, and no first-party incident review. The
announcement posts that would normally explain why a change was made were unreachable, so
motives are read from commit messages, design proposals, changelogs and
go.modcomments, and are marked as inference where they are inference. Grafana Labs' own public postmortems were unreachable; the three operator postmortems below come from other organisations running this stack.
Link convention: file rows link to raw.githubusercontent.com, which is the exact bytes that
were read. Commit rows link to the github.com commit or pull-request page, which is the
readable view of the same object; those pages answer 403 to scripted requests from this
network, which the link checker reports as bot-blocked rather than dead.
| # | Org | Title / artefact | Tier | Published | Checked | URL | Claim taken from it | Supporting quote or figure |
|---|---|---|---|---|---|---|---|---|
| 1 | Grafana Labs | grafana/loki commit e59adccf — "create smaller unique files from boltdb shipper and other code refactorings (#2261)" |
source | 2020-07-28 | 2026-09-26 | https://github.com/grafana/loki/commit/e59adccfa0bbdade7dfd7a1e0747c2629064e931 | The object-storage-only index (boltdb-shipper) landed in Loki in July 2020 | Commit subject as quoted; first commit under pkg/storage/stores/shipper/ |
| 2 | Grafana Labs | grafana/loki commit 8c1095a5 — "Moves TSDB to the stores package. (#5852)" |
source | 2022-04-11 | 2026-09-26 | https://github.com/grafana/loki/commit/8c1095a55447c8d3a9d0b4c222fd4f9ebb578465 | The second object-store index generation (TSDB) began in April 2022 | First commit under pkg/storage/stores/tsdb/ |
| 3 | Grafana Labs | grafana/loki commit 9a215902 — "chore(dataobj): initial commit of value encoding (#15606)" |
source | 2025-01-07 | 2026-09-26 | https://github.com/grafana/loki/commit/9a21590238c1dfa743438558c5b35b6517c54fe9 | A third storage generation ("dataobj") started in January 2025 and has 494 commits touching pkg/dataobj by 2026-09-25 |
git log --oneline -- "pkg/dataobj/*" \| wc -l → 494 |
| 4 | Grafana Labs | grafana/loki commit 1846a8ff — "chore!: Remove support for BigTable/GCP storage backend (#21502)" |
source | 2026-04-16 | 2026-09-26 | https://github.com/grafana/loki/pull/21502 | BigTable index support was deleted in April 2026 | Commit subject as quoted |
| 5 | Grafana Labs | grafana/loki commit 7c647070 — "chore!: Remove deprecated Cassandra storage backend (#21574)" |
source | 2026-04-17 | 2026-09-26 | https://github.com/grafana/loki/pull/21574 | Cassandra support was deleted in April 2026, 68.6 months after the replacement shipped | Commit subject; deletes pkg/storage/chunk/client/cassandra/* |
| 6 | Grafana Labs | grafana/loki commit 67bf1e61 — "chore!: Remove deprecated DynamoDB storage backend (#21601)" |
source | 2026-04-20 | 2026-09-26 | https://github.com/grafana/loki/pull/21601 | DynamoDB support was deleted three days after Cassandra | Commit subject as quoted |
| 7 | Grafana Labs | grafana/loki commit ba9864c3 — "chore!: Remove deprecated BoltDB Shipper storage backend (#21678)" |
source | 2026-05-15 | 2026-09-26 | https://github.com/grafana/loki/pull/21678 | Even the first-generation object-store index was removed, 69.6 months after it shipped | Commit subject as quoted |
| 8 | Grafana Labs | grafana/loki commit 7733be06 — "making clearer that TSDB is the new recommended index" (#9246) |
source | 2023-08-16 | 2026-09-26 | https://github.com/grafana/loki/pull/9246 | The documentation first declared the legacy index stores doomed in August 2023, 32.0 months before they were deleted | Added lines: "The following are deprecated for the index and will be removed in a future release:", "[Amazon DynamoDB]… Support for this is deprecated and will be removed in a future release." |
| 8b | Grafana Labs | grafana/loki commit 8b63b66c — "docs: Update supported and deprecated type in Manage > Storage (#12742)" |
source | 2024-04-23 | 2026-09-26 | https://github.com/grafana/loki/pull/12742 | A later pass made the same deprecation more visible rather than starting it | Diff lines: +### ❌ Deprecated index stores, replacing prose that already said they "will be removed in a future release" |
| 9 | Grafana Labs | grafana/loki commit 8d82d856 then 5b4cd230 — removal of /api/prom endpoints and its revert eight days later |
source | 2026-06-11 / 2026-06-19 | 2026-09-26 | https://github.com/grafana/loki/pull/22466 | A breaking removal that passed review was reverted eight days later | Revert commit subject: "revert: Remove deprecated /api/prom API endpoints (#21569) (#22466)" |
| 10 | Grafana Labs | grafana/loki commit 4245b4a0 — "chore!: Remove targets for Simple Scalable Deployment (SSD) (#21481)" |
source | 2026-06-24 | 2026-09-26 | https://github.com/grafana/loki/pull/21481 | The middle deployment topology was withdrawn | Commit body: "BREAKING CHANGE: This PR removes the targets write, read, and backend… The Simple Scalable Deployment mode was deprecated and can be remove prior to Loki 4.0" |
| 11 | Grafana Labs | grafana/loki commit d178f4c7 — "feat: Implement WAL segment ingestion via Kafka with partition ring (#14043)" |
source | 2024-09-10 | 2026-09-26 | https://github.com/grafana/loki/pull/14043 | Loki put a Kafka partition log in the write path in September 2024 | First commit under pkg/kafka/ |
| 12 | Grafana Labs | grafana/loki commit 88950906 — "fix: dataobj-consumers commit incorrect offset, which can cause data loss (#18833)" |
source | 2025-08-13 | 2026-09-26 | https://github.com/grafana/loki/pull/18833 | The new consumer committed offsets that could lose data | Commit subject as quoted; a second fix, 44aba622 (2025-08-29), is titled "fix possible data loss in dataobj-consumers (#19060)" |
| 13 | Grafana Labs | grafana/loki commit 20ea556e — "fix(query-engine): Fix OR operations being silently dropped (#21204)" |
source | 2026-03-19 | 2026-09-26 | https://github.com/grafana/loki/pull/21204 | The rewritten query engine silently dropped a logical operator | Commit subject as quoted |
| 14 | Grafana Labs | grafana/loki go.mod at main |
source | 2026-09-25 | 2026-09-26 | https://raw.githubusercontent.com/grafana/loki/main/go.mod | Loki still carries a fork of the Cassandra driver five months after deleting the Cassandra backend, and replaces Thanos' object-storage library with its own fork | "// Use fork of gocql that has gokit logs and Prometheus metrics.", "replace github.com/thanos-io/objstore => github.com/grafana/objstore" |
| 15 | Grafana Labs | grafana/mimir go.mod at main |
source | 2026-09-25 | 2026-09-26 | https://raw.githubusercontent.com/grafana/mimir/main/go.mod | Mimir replaces Prometheus itself, plus memberlist, regexp, goautoneg, yaml and the OTLP translator, with Grafana forks | "replace github.com/prometheus/prometheus => github.com/grafana/mimir-prometheus"; "// Replace memberlist with our fork which includes some changes that haven't been merged upstream yet for years and we don't expect to change anytime soon."; "// Use Mimir fork of prometheus/otlptranslator to allow for higher velocity of upstream development, while allowing Mimir to move at a more conservative pace." |
| 16 | Grafana Labs | grafana/mimir commit fa86354b — "Chore: Rename from Cortex to Mimir (#121)", and 174f599c — "Apply standard Grafana Labs governance and license (#22)" |
source | 2021-08-11 / 2021-08-05 | 2026-09-26 | https://github.com/grafana/mimir/commit/fa86354b5d47dcaac200bf98005f339df2755b63 | The fork was named and relicensed in August 2021, 7.6 months before the public mimir-2.0.0 tag of 2022-03-28 |
Commit subjects as quoted; git log -1 --format=%ad mimir-2.0.0 → 2022-03-28 |
| 17 | Grafana Labs | grafana/mimir CHANGELOG.md at tag mimir-2.0.0 |
source | 2022-03-28 | 2026-09-26 | https://github.com/grafana/mimir/blob/mimir-2.0.0/CHANGELOG.md | Removing one storage engine took eighteen pull requests, listed in a single changelog line | "* [CHANGE] Remove chunks storage engine. #86 #119 #510 #545 #743 #744 #748 #753 #755 #757 #758 #759 #760 #762 #764 #789 #812 #813" |
| 18 | Grafana Labs | grafana/mimir CHANGELOG.md at tag mimir-3.0.0 |
source | 2025-10-31 | 2026-09-26 | https://github.com/grafana/mimir/blob/mimir-3.0.0/CHANGELOG.md | Mimir 3.0 removed Redis caching, the read-write deployment mode and the embedded query-scheduler, made its own query engine the default, and defaulted the HA tracker to gossip | "[CHANGE] Remove support for Redis as a cache backend. #12163"; "[CHANGE] Remove support for the experimental read-write deployment mode. #12584"; "[CHANGE] Query-frontend: Use the Mimir Query Engine (MQE) by default. #12361"; "[CHANGE] Distributor: Use memberlist by default for the HA tracker. #12998" |
| 19 | Grafana Labs | grafana/mimir commit 24591ae5 — "Add experimental support to write incoming data to a Kafka-compatible backend (#6888)" |
source | 2023-12-12 | 2026-09-26 | https://github.com/grafana/mimir/pull/6888 | Mimir was first of the three to put Kafka in the write path, in December 2023 | First commit under pkg/storage/ingest/ |
| 20 | Grafana Labs | grafana/mimir commits 96c92c99, 91972b95, 1bbffa50 — three data-loss fixes in the Kafka ingestion path |
source | 2024-11-20 / 2026-01-24 / 2026-08-28 | 2026-09-26 | https://github.com/grafana/mimir/pull/16493 | The new write path produced a repeating class of data-loss bugs over 21 months | Subjects: "Fix data loss bug in the experimental ingest storage when a Kafka Fetch is split into multiple requests and some of them return an error (#9963)"; "Block-builder-scheduler: fix data loss bug in partitions that are fully consumed at startup (#14136)"; "Block-builder: fix silent data loss for single-record jobs (#16493)" |
| 21 | Grafana Labs | grafana/mimir docs/sources/mimir/configure/about-versioning.md |
vendor | read at main |
2026-09-26 | https://raw.githubusercontent.com/grafana/mimir/main/docs/sources/mimir/configure/about-versioning.md | The written guarantee is two minor releases for deprecated features, two years for reading old data, and nothing at all for experimental features | "We will keep deprecated features in place for two minor releases."; "The Grafana Mimir maintainers commit to ensuring that future versions can read data written by versions within the last two years."; "We do not guarantee backwards compatibility for experimental features and flags." |
| 22 | Grafana Labs | grafana/mimir README.md |
vendor | read at main |
2026-09-26 | https://raw.githubusercontent.com/grafana/mimir/main/README.md | The headline scale figure is an internal test, not a measurement anyone else reproduced | "Internal testing shows that Grafana Mimir handles up to 1 billion active time series." |
| 23 | Cortex maintainers | cortexproject/cortex docs/proposals/blocks-storage-bucket-index.md (Marco Pracucci, November 2020) |
adr | 2020-12-09 | 2026-09-26 | https://raw.githubusercontent.com/cortexproject/cortex/master/docs/proposals/blocks-storage-bucket-index.md | The design document that moved block discovery off bucket listing, with the numbers that forced it | "we would have 400 blocks for a single-tenant cluster, but 4M blocks for a 10K tenants cluster"; "The cold start of queriers and store-gateways (empty caches) take tens of minutes"; "represents a significant % of bucket API calls baseline costs, regardless the tenants QPS (costs we have even if the cluster has 0 queries)" |
| 24 | Cortex maintainers | cortexproject/cortex commits e5114151 and e3b21d39 — chunks storage deprecated, then "Remove support for chunks storage entirely: Take 2" |
source | 2021-06-18 / 2022-08-10 | 2026-09-26 | https://github.com/cortexproject/cortex/pull/4812 | Upstream Cortex took 13.7 months from deprecation to deletion, and needed a second attempt | Commit subjects: "Deprecated Cortex chunks storage (#4268)"; "Remove support for chunks storage entirely: Take 2 (#4812)" |
| 25 | Grafana Labs | grafana/tempo commits 08a49950, fc33ae5f, 2c125a14 — vParquet, vParquet4, vParquet5 block formats |
source | 2022-06-23 / 2024-05-07 / 2025-08-18 | 2026-09-26 | https://github.com/grafana/tempo/pull/1479 | Tempo shipped five on-disk formats in 38 months, each with a conversion path | First commits under tempodb/encoding/vparquet*; "Add Parquet block format (#1479)" |
| 26 | Grafana Labs | grafana/tempo commit 3a0fc682 — "Rhythm: Livestore (#5563)" and CHANGELOG.md at v3.0.0 |
source | 2025-08-25 / 2026-05-28 | 2026-09-26 | https://github.com/grafana/tempo/pull/5563 | Tempo was last of the three to adopt the Kafka write path, and its 3.0 chose failing over serving incomplete recent data | Changelog: "[CHANGE] BREAKING CHANGE Recent data queries guarantee complete results by failing when an instance is lagging. Defaults query_frontend.query_end_cutoff to 30s and live_store.fail_on_high_lag to true." |
| 27 | Grafana Labs | grafana/agent README.md (archived project) |
source | read at main |
2026-09-26 | https://raw.githubusercontent.com/grafana/agent/main/README.md | Grafana Agent's end of life is stated in the repository itself | "Grafana Agent has reached End-of-Life (EOL) on November 1, 2025." |
| 28 | Grafana Labs | grafana/alloy commit 8c2c7a0f — "all: rename main module to github.com/grafana/alloy" |
source | 2024-03-25 | 2026-09-26 | https://github.com/grafana/alloy/commit/8c2c7a0f69e3936596df24ae57b7d21b9840c702 | Alloy is the Agent repository renamed, not a new codebase: both repositories share the initial commit of 2019-11-25 | git log --reverse in both repos gives "2019-11-25 initial commit." |
| 29 | Grafana Labs | grafana/loki commits 572df016, 04294bb7 — "feat: Remove Promtail support" and removal of pkg/promtail |
source | 2026-03-25 | 2026-09-26 | https://github.com/grafana/loki/pull/21245 | The log agent that defined Loki's early deployments was deleted 13.4 months after deprecation banners went into the docs (b8b3ed17, 2025-02-12) |
Commit subjects as quoted |
| 30 | Grafana Labs | grafana/phlare README.md (archived) |
source | read at main |
2026-09-26 | https://raw.githubusercontent.com/grafana/phlare/main/README.md | Phlare was archived after the Pyroscope acquisition | "On 2023-03-15, Grafana Labs acquired Pyroscope… As a result, Grafana Labs Phlare has been archived." |
| 31 | Grafana Labs | grafana/pyroscope commit 795b2eff — "chore: renames phlaredb to pyroscopedb (#2260)" |
source | 2023-08-17 | 2026-09-26 | https://github.com/grafana/pyroscope/pull/2260 | After the acquisition the acquirer's engine survived under the acquired product's name; the acquired code remains at HEAD in pkg/og |
Commit subject; git ls-tree -d HEAD pkg/ lists both pkg/phlaredb and pkg/og |
| 32 | Grafana Labs | grafana/beyla README.md |
source | read at main |
2026-09-26 | https://raw.githubusercontent.com/grafana/beyla/main/README.md | The eBPF instrumentation agent was given away to OpenTelemetry rather than kept | "Beyla has been donated to the CNCF OpenTelemetry Project, under the project name OpenTelemetry eBPF Instrumentation… All Beyla current maintainers work full time on the upstream repository." |
| 33 | Grafana Labs | grafana/grafana commits 8db3eb90, and grafana/loki a9d85de4, grafana/tempo 37aeb4d1 |
source | 2021-04-20 | 2026-09-26 | https://github.com/grafana/grafana/commit/8db3eb90ae8c20e1a2bbbad300e0683def9bf8fb | Three products were relicensed to AGPLv3 on the same day | Commit subjects: "Re-license Grafana to AGPLv3 (#33184)", "Re-license to AGPLv3 (#3630)", "Re-license to AGPLv3 (#660)" |
| 34 | Grafana Labs | grafana/grafana commit f96e4e9a — "Frontend: Remove Angular (#99760)" |
source | 2025-04-04 | 2026-09-26 | https://github.com/grafana/grafana/pull/99760 | The frontend framework present since the 2013-01-25 initial commit was removed in April 2025, 146 months later | Commit body: "chore(angularsupport): delete feature toggle to disable angular… feat(angular-support): remove config.angularSupportEnabled" |
| 35 | DFDS | dfds/postmortems — "PM2024-003 - Kube state metrics exposing wrong labels" |
postmortem | 2024-06-06 | 2026-09-26 | https://raw.githubusercontent.com/dfds/postmortems/master/PM2024-003%20-%20Kube%20state%20metrics%20exposing%20wrong%20labels.md | Migrating collectors changed the label set and broke alerts; the fix could not be rolled out the same day | "Reason was the configuration change on the labels exposed by the kube state metrics, as a result on our efforts to migrate to Grafana Cloud from our legacy Prometheus setup."; "These alarms had to be silenced until the next day" |
| 36 | DFDS | dfds/postmortems — "PM2022-001 - Prometheus is down with connection refused errors" |
postmortem | 2022-01-25 | 2026-09-26 | https://raw.githubusercontent.com/dfds/postmortems/master/PM2022-001%20-%20Prometheus%20is%20down%20with%20connection%20refused%20errors.md | The single-instance monitoring deployment failed three times in one day through the node under it | "No resource requests or limits were set on the Helm chart that deploys the Prometheus pod."; timeline 10:21 to 15:00 UTC with three nodes entering NotReady |
| 37 | DFDS | dfds/postmortems — "PM2022-007 - Kafka metrics stopped being exported to Prometheus" |
postmortem | 2022-07-07 | 2026-09-26 | https://raw.githubusercontent.com/dfds/postmortems/master/PM2022-007%20-%20Kafka%20metrics%20stopped%20being%20exported%20to%20Prometheus.md | Telemetry collection failed on a credential owned by a person, and partial recovery hid missing metrics for another three hours | "API key used by kafka exporter belong to a personal account"; timeline: outage closed 10:09, "Reported missing some metrics" 12:03, metrics restored 13:34 |
| 38 | Zalando | zalando-incubator/kubernetes-on-aws — "Total DNS outage in Kubernetes cluster" |
postmortem | 2019-01-07 | 2026-09-26 | https://raw.githubusercontent.com/zalando-incubator/kubernetes-on-aws/dev/docs/postmortems/jan-2019-dns-outage.md | An operator incident record kept in the repository rather than on a status page; the pattern this guide relies on for incident evidence | "The spike in DNS queries further resulted in a spike in memory usage of CoreDNS pods, which let to the pods running out of memory and getting OOM Killed at the same time." |
Tier mix
source(git history, changelogs,go.mod, repository READMEs): 29postmortem(operator incident reviews kept in public repositories): 4adr(design proposal): 1vendor(project's own documentation of its guarantees and claims): 2
What the hunt could not reach
- Grafana Labs' own engineering posts and Grafana Cloud incident reviews (
grafana.com): blocked. - Conference talks and papers about running these systems: blocked (
usenix.org,youtube.com,arxiv.org,infoq.comall refused). - GitHub issues and pull-request discussion: the GitHub API is scoped to this session's own repository, so the argument inside a pull request was not readable. Only the merged result, its message, and the code are evidence here. Rejected pull requests, normally the best material in an archaeology of this kind, are therefore absent; the nearest substitute is the reverted commit (row 9) and the second attempt (row 24).
- Deployment counts, cluster sizes, cost figures and the real blast radius of the data-loss bugs in rows 12 and 20: unpublished, and not derivable from a repository.