Mimir is a metrics backend that is Prometheus-compatible and horizontally scalable. This episode discusses its component architecture, a comparison with Prometheus, the remote write path, and metric types and the dangers of high cardinality.

The first LGTM component you'll dive into is Grafana Mimir — a Prometheus-compatible metrics storage backend designed for large scale. Mimir takes the role of the place where all your application and infrastructure metrics are stored long term.
This episode covers Mimir's component architecture, a comparison with Prometheus and when to use each, the remote write path, and metric types and cardinality considerations. Understand the concepts in this episode because the PromQL queries in episode 7 will run on top of Mimir.
Mimir is a TSDB (Time Series Database) that speaks the Prometheus protocol. That means the entire Prometheus ecosystem — the PromQL query language, metric format, and remote write — works directly without modification. This makes migrating from Prometheus to Mimir very smooth.
The features that set Mimir apart from a standalone Prometheus:
blocks_storage:
backend: filesystem
filesystem:
dir: /data/blocks
tsdb:
dir: /data/tsdb
bucket_store:
sync_dir: /data/bucket-syncThe configuration above is the fuller version used in episode 4. In production, the backend: filesystem section is replaced with s3 or gcs — covered in episode 22.
Mimir splits the data path into small components, each of which can be scaled independently:
remote write -> distributor -> ingester -> object storage
^ |
query -> query-frontend -> querier <- store-gatewayThe distributor -> ingester -> object storage diagram is the core metric storage path. Meanwhile the query path goes through query-frontend, querier, and store-gateway, which reads from object storage.
A common migration path is to keep Prometheus as the scraper while adding remote write toward Mimir. That way, metrics remain available in Prometheus for short-term needs and are copied to Mimir for the long term.
remote_write:
- url: http://mimir:9009/api/v1/push
headers:
X-Scope-OrgID: localThe remote_write block above goes in the Prometheus config. The X-Scope-OrgID header is required when multi-tenancy is enabled; in local mode its value is arbitrary.
Mimir understands the four Prometheus metric types:
http_requests_total. It can only be reset.temperature_celsius.counter | gauge | histogram | summaryRemember this counter | gauge | histogram | summary pattern; the chosen type determines which query functions are valid, such as rate which only works for counters.
Cardinality is the number of unique label combinations on a metric. For example: a metric with a user_id label holding a thousand values will create a thousand time series. Multiply that by a few more labels and the count explodes, burdening storage and queries.
method, status, or service.user_id, email, or trace_id.Warning
Cardinality explosion is the most common cause of rising observability costs. A single metric with a user_id label can store millions of series. Design your labels carefully from the start.
In episode 6 you understood that Mimir is a Prometheus-compatible TSDB with a modular, horizontally scalable architecture, learned the role of each component from distributor to ruler, learned when to use Prometheus or Mimir, understood the remote write path, and the metric types and the dangers of cardinality.
The key takeaways:
In the next episode 7 we'll discuss PromQL — the Prometheus query language used to read all metrics in Mimir, from instant vectors and range vectors, aggregation operators, common query patterns like rate and histogram_quantile, to performance best practices. Your dashboards will start speaking the language of metrics.