Mimir
Grafana LabsOfficialPublished by Grafana Labs
- Skill
- Tool integration
- Cloud and DevOps
- Apache-2.0
- Low risk
AutoGineer summary
Written by AutoGineer from the skill’s own files, not by the author
Grafana Mimir provides a horizontally scalable, multi-tenant architecture for long-term storage of Prometheus and OpenTelemetry metrics. This skill covers the deployment of Mimir in various modes—from monolithic setups for local development to distributed microservices on Kubernetes. It details configuration for object storage backends (S3, GCS, Azure), ingestion via remote_write, and management of multi-tenancy using X-Scope-OrgID headers. The documentation also includes architectural references for components like distributors, ingesters, and compactors, alongside guidance on troubleshooting common issues like 503 readiness errors and 429 rate-limiting.
What it does
- Provides configuration templates for monolithic and microservices Mimir deployments.
- Explains how to integrate Prometheus and Grafana Alloy via remote_write.
- Details setup for object storage backends including S3, GCS, and Azure.
- Outlines multi-tenancy configuration and per-tenant limit management.
- Lists key architectural components and their roles in the read/write path.
- Offers troubleshooting steps for common ingestion and readiness issues.
When to use it
- When you need to scale Prometheus metrics storage beyond a single node.
- When implementing a multi-tenant metrics backend for multiple teams or clients.
- When setting up long-term storage for Prometheus or OTLP metrics.
- When deploying Mimir on Kubernetes using the official Helm charts.
- When debugging ingestion rate limits or readiness probe failures in a Mimir cluster.
Advantages
- Enables horizontal scalability for massive metrics workloads.
- Supports multi-tenancy with isolated data access per tenant.
- Integrates natively with existing Prometheus and OTLP ecosystems.
- Provides flexible deployment options from local dev to production microservices.
Usage examples
- “How do I configure Prometheus to send metrics to Mimir?”
- You must add a remote_write section to your Prometheus configuration pointing to the Mimir push endpoint, including the X-Scope-OrgID header if multi-tenancy is enabled.
- “Why am I getting 429 Too Many Requests errors when pushing metrics?”
- This indicates you have hit your configured ingestion limits; you should increase the limits.ingestion_rate and ingestion_burst_size in your Mimir configuration.
- “How do I deploy Mimir on Kubernetes?”
- Use the grafana/mimir-distributed Helm chart, providing a custom values.yaml file to configure your specific storage backend and component scaling requirements.
- “What is the difference between the distributor and the ingester?”
- The distributor validates and routes incoming samples via a hash ring, while the ingester handles in-memory storage, maintains the write-ahead log, and flushes blocks to object storage.
Install
Download the skill as a ZIP:
https://mp-staging.autogineer.com/agent-skills/grafana/mimir/downloadUnzip it into the cross-client skills folder of your project:
mkdir -p .agents/skills && unzip mimir.zip -d .agents/skills
Documentation by Grafana Labs
Grafana Mimir
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
# demo.yaml
target: all
multitenancy_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# 1. Run it
docker 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 API
curl -s http://localhost:9009/api/v1/labels | jq '.status' # → "success"
# 4. Verify self-metrics scrape
curl -s http://localhost:9009/metrics | grep -E '^mimir_(distributor|ingester)_' | head2. Send metrics — Prometheus remote_write
remote_write:
- url: http://localhost:9009/api/v1/push
headers:
X-Scope-OrgID: tenant1 # required when multitenancy_enabled: true# Verify samples are landing
curl -s -H 'X-Scope-OrgID: tenant1' \
'http://localhost:9009/api/v1/query?query=up' | jq '.data.result | length'
# Expect > 0 within ~30s of Prometheus scraping3. Send metrics — Grafana Alloy
prometheus.remote_write "mimir" {
endpoint {
url = "http://mimir:9009/api/v1/push"
headers = { "X-Scope-OrgID" = "tenant1" }
}
}4. Deploy on Kubernetes (Helm, microservices)
# 1. Install
helm repo add grafana https://grafana.github.io/helm-charts
helm install mimir grafana/mimir-distributed --version 6.0.6 -f values.yaml
# 2. Verify every pod is Running / Ready
kubectl get pods -n mimir
# distributor, ingester, querier, query-frontend, store-gateway, compactor, ruler
# 3. Verify the gateway is ready
kubectl port-forward -n mimir svc/mimir-nginx 9009:80 &
curl -sf http://localhost:9009/readyMulti-tenancy
multitenancy_enabled: true
# Every request must include header: X-Scope-OrgID: <tenant-id>For storage backends (S3 / GCS / Azure / filesystem) see references/storage.md. For component roles, ring options, limits, and API endpoint dumps see references/architecture.md.
Troubleshooting
/readyreturns 503 → ingester still joining ring; checkmimir_ring_membersand ingester logs429 Too Many Requestson push → bumplimits.ingestion_rate/ingestion_burst_sizeSamples written but query returns empty → confirm
X-Scope-OrgIDmatches between write and readQuery for old data returns nothing → check compactor logs and that store-gateway has synced blocks
Resources
Files
- ATTRIBUTION.mdAdded by AutoGineer830 B
- LICENSELicence file added by AutoGineer11.1 KiB
- SKILL.md4.5 KiB
- references/architecture.md2.0 KiB
- references/storage.md665 B
SKILL.md
Grafana Mimir
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
# demo.yaml
target: all
multitenancy_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# 1. Run it
docker 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 API
curl -s http://localhost:9009/api/v1/labels | jq '.status' # → "success"
# 4. Verify self-metrics scrape
curl -s http://localhost:9009/metrics | grep -E '^mimir_(distributor|ingester)_' | head2. Send metrics — Prometheus remote_write
remote_write:
- url: http://localhost:9009/api/v1/push
headers:
X-Scope-OrgID: tenant1 # required when multitenancy_enabled: true# Verify samples are landing
curl -s -H 'X-Scope-OrgID: tenant1' \
'http://localhost:9009/api/v1/query?query=up' | jq '.data.result | length'
# Expect > 0 within ~30s of Prometheus scraping3. Send metrics — Grafana Alloy
prometheus.remote_write "mimir" {
endpoint {
url = "http://mimir:9009/api/v1/push"
headers = { "X-Scope-OrgID" = "tenant1" }
}
}4. Deploy on Kubernetes (Helm, microservices)
# 1. Install
helm repo add grafana https://grafana.github.io/helm-charts
helm install mimir grafana/mimir-distributed --version 6.0.6 -f values.yaml
# 2. Verify every pod is Running / Ready
kubectl get pods -n mimir
# distributor, ingester, querier, query-frontend, store-gateway, compactor, ruler
# 3. Verify the gateway is ready
kubectl port-forward -n mimir svc/mimir-nginx 9009:80 &
curl -sf http://localhost:9009/readyMulti-tenancy
multitenancy_enabled: true
# Every request must include header: X-Scope-OrgID: <tenant-id>For storage backends (S3 / GCS / Azure / filesystem) see references/storage.md. For component roles, ring options, limits, and API endpoint dumps see references/architecture.md.
Troubleshooting
/readyreturns 503 → ingester still joining ring; checkmimir_ring_membersand ingester logs429 Too Many Requestson push → bumplimits.ingestion_rate/ingestion_burst_sizeSamples written but query returns empty → confirm
X-Scope-OrgIDmatches between write and readQuery for old data returns nothing → check compactor logs and that store-gateway has synced blocks
Resources
Requirements and compatibility
Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta
“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.
Needs: Needs network access, Needs a command-line tool
Security
What our scanner noticed· Low risk
- Instructions that use the network
A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.
Attribution and licence
- Published by
- Grafana Labs
- Publisher
- Grafana Labs (Official)
- Source
- grafana/skills · skills/grafana-lgtm/mimir · commit 8fb72a5
- Licence
- Apache License 2.0 (redistribution allowed)
- LICENSE (added by AutoGineer from LICENSE)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
AutoGineer is not affiliated with or endorsed by Grafana Labs.
Download ZIP
The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download mimir.zip