Mimir

by grafana1ccacf29049fApache-2.0279 starsListed Oct 8, 2026Updated Oct 8, 2026Repository updated today

Stand up Grafana Mimir for horizontally scalable, multi-tenant, long-term Prometheus + OTLP metrics storage. Covers monolithic / read-write / microservices deployment, S3 / GCS / Azure / filesystem block storage, Prometheus `remote_write` and OTLP ingestion, multi-tenancy with `X-Scope-OrgID`, ingester replication factor, compactor retention, and per-tenant limits. Use when running Mimir locally or on Kubernetes (Helm `mimir-distributed`), scaling Prometheus past a single node, picking ingest / query / backend split, configuring tenants and ingestion rate, debugging `/ready` 503s or `429 Too Many Requests`, or pointing Grafana at a Mimir datasource — even when the user says "I need long-term Prometheus storage", "scale Prometheus", "multi-tenant metrics backend", "Cortex replacement", "remote_write target", or "store 10M active series" without naming Mimir.

Instructions onlyDevOps & Cloud
AI-generated overview

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

yaml
# demo.yamltarget: allmultitenancy_enabled: false
blocks_storage:  backend: filesystem  bucket_store:    sync_dir: /tmp/mimir/tsdb-sync  filesystem:    dir: /tmp/mimir/data/tsdb  tsdb:    dir: /tmp/mimir/tsdb
compactor:  data_dir: /tmp/mimir/compactor  sharding_ring:    kvstore: { store: memberlist }
distributor:  ring:    instance_addr: 127.0.0.1    kvstore: { store: memberlist }
ingester:  ring:    instance_addr: 127.0.0.1    kvstore: { store: memberlist }    replication_factor: 1
server:  http_listen_port: 9009  grpc_listen_port: 9095  log_level: error
bash
# 1. Run itdocker run --rm -p 9009:9009 -v $(pwd)/demo.yaml:/etc/mimir/demo.yaml \  grafana/mimir:latest --config.file=/etc/mimir/demo.yaml
# 2. Verify readiness (expect HTTP 200, body: "ready")curl -sf http://localhost:9009/ready
# 3. Verify it's serving the APIcurl -s http://localhost:9009/api/v1/labels | jq '.status'   # → "success"
# 4. Verify self-metrics scrapecurl -s http://localhost:9009/metrics | grep -E '^mimir_(distributor|ingester)_' | head

2. Send metrics — Prometheus remote_write

yaml
remote_write:  - url: http://localhost:9009/api/v1/push    headers:      X-Scope-OrgID: tenant1   # required when multitenancy_enabled: true
bash
# Verify samples are landingcurl -s -H 'X-Scope-OrgID: tenant1' \  'http://localhost:9009/api/v1/query?query=up' | jq '.data.result | length'# Expect > 0 within ~30s of Prometheus scraping

3. Send metrics — Grafana Alloy

alloy
prometheus.remote_write "mimir" {  endpoint {    url = "http://mimir:9009/api/v1/push"    headers = { "X-Scope-OrgID" = "tenant1" }  }}

4. Deploy on Kubernetes (Helm, microservices)

bash
# 1. Installhelm repo add grafana https://grafana.github.io/helm-chartshelm install mimir grafana/mimir-distributed --version 6.0.6 -f values.yaml
# 2. Verify every pod is Running / Readykubectl get pods -n mimir#   distributor, ingester, querier, query-frontend, store-gateway, compactor, ruler
# 3. Verify the gateway is readykubectl port-forward -n mimir svc/mimir-nginx 9009:80 &curl -sf http://localhost:9009/ready

Multi-tenancy

yaml
multitenancy_enabled: true# Every request must include header:  X-Scope-OrgID: <tenant-id>

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

Source and attribution

Source:grafana/skillsinskills/grafana-lgtm/mimirat commit1ccacf2

License: Apache-2.0

Content belongs to its original authors. SourceWeft indexes it from a public repository.

Report or request removal

More from grafana/skills

React 19 Plugin Migration

grafana

Guides migration of a Grafana plugin to React 19 compatibility through ordered build, dependency and source-code steps.

Software Development279updated today

Plugin Bundle Size

grafana

Guides optimisation of Grafana app plugin bundle size using React.lazy, Suspense and webpack code splitting.

Software Development279updated today

Grafana Scenes

grafana

Builds Grafana plugin pages with the @grafana/scenes framework, covering scenes, panels, variables and drilldowns.

Software Development279updated today

Check Npm

grafana

Read-only audit of npm, yarn, or pnpm configuration for supply-chain hardening in a JS/TS repository.

Security279updated today

K6 Trend Analysis

grafana

Analyze Grafana Cloud k6 test run trends over time. Detects slow metric drift (e.g., P95 latency creeping up while still passing thresholds), computes headroom to thresholds, flags anomalies, and recommends threshold tightening. Use when the user asks about test performance trends, wants to know if metrics are degrading, asks whether thresholds should be tightened, or wants a health check across recent runs for a specific test. Trigger on phrases like "how is my test trending", "is P95 getting worse", "check for performance regression", "should I tighten thresholds", "are my tests degrading", "show me trends for test X", "analyze my k6 test runs", or "is my test getting slower". Also trigger when a user asks to check all tests in a project -- run this skill once per test and synthesize.

Awaiting classification279updated today

K6 Test Maintenance

grafana

Maintains and improves existing k6 load-test scripts: threshold tightening, version migration, refactoring, and best-practice audits.

Software Development279updated today