Guides standing up and operating Grafana Mimir for scalable, multi-tenant, long-term Prometheus and OTLP metrics storage.
- What it does
- This skill provides configuration and command guidance for deploying Grafana Mimir in monolithic, read-write, or microservices modes, including local Docker runs and Kubernetes Helm installs. It covers block storage backends, Prometheus remote_write and Grafana Alloy ingestion, multi-tenancy via the X-Scope-OrgID header, replication factor, compactor retention, and per-tenant limits. It also includes verification steps and troubleshooting for readiness failures, rate limiting, and empty query results.
- When to use it
- Use it when scaling Prometheus beyond a single node, setting up a multi-tenant long-term metrics backend, or replacing Cortex. It is also relevant when debugging Mimir readiness or ingestion errors, or connecting Grafana to a Mimir datasource.
- Requirements
- Docker or a Kubernetes cluster with Helm for deployment, an object-storage bucket (S3, GCS, or Azure) for production, and a Prometheus or Alloy instance able to remote_write. It ships no scripts; it is instructions only, with two reference documents.
Grafana Mimir
Docs: https://grafana.com/docs/mimir/latest/
Horizontally scalable, multi-tenant, long-term storage for Prometheus + OpenTelemetry metrics.
Prerequisites
- Docker (for quick start) or a Kubernetes cluster (for Helm)
- An object-storage bucket for production (S3/GCS/Azure) — filesystem only for dev
- Prometheus or Alloy able to remote_write to the Mimir push endpoint
Common Workflows
1. Stand up monolithic Mimir locally
2. Send metrics — Prometheus remote_write
3. Send metrics — Grafana Alloy
4. Deploy on Kubernetes (Helm, microservices)
Multi-tenancy
For storage backends (S3 / GCS / Azure / filesystem) see references/storage.md [blocked]. For component roles, ring options, limits, and API endpoint dumps see references/architecture.md [blocked].
Troubleshooting
/ready returns 503 → ingester still joining ring; check mimir_ring_members and ingester logs
429 Too Many Requests on push → bump limits.ingestion_rate / ingestion_burst_size
- Samples written but query returns empty → confirm
X-Scope-OrgID matches between write and read
- Query for old data returns nothing → check compactor logs and that store-gateway has synced blocks
Resources