Specify Poker Mimir
Quick Start (Local Compose)
- Bring up the stack:
docker compose up --build -d - Verify Mimir Prometheus API:
curl -sS http://localhost:9009/prometheus/api/v1/status/buildinfo | jq .data.version - Confirm ingestion for all services:
curl -sS 'http://localhost:9009/prometheus/api/v1/query?query=count%20by%20(job)%20(process_cpu_user_seconds_total)' | jq -r '.data.result[].metric.job' | sort
- Check scrape health series:
curl -sS 'http://localhost:9009/prometheus/api/v1/query?query=up' | jq -r '.data.result[] | "\(.metric.job) \(.metric.instance) up=\(.value[1])"' | sort
If these commands fail due to Docker socket / localhost restrictions in a sandboxed agent environment, rerun them with escalated permissions.
How Metrics Flow
- Services expose Prometheus-format metrics on
/metrics. otel-collectorscrapes viareceivers.prometheusand exports:prometheusremotewrite→ Mimir (/api/v1/push)- derived trace metrics via
connectors: servicegraph, spanmetrics(used by Tempo Service Map)
- Grafana’s Prometheus datasource points at Mimir (
/prometheusprefix).
Key Config Files
infra/mimir/mimir.yaml: Single-node dev config (ensureingester.ring.replication_factor: 1).infra/otel/collector-config.yaml:receivers.prometheusscrape configs +exporters.prometheusremotewrite.infra/grafana/provisioning/datasources/datasource.yaml: Prometheus datasourceurl: http://mimir:9009/prometheus.
Common Failure Patterns
Mimir exits on startup (config parse errors)
- Inspect:
docker compose logs mimir - Validate keys against Mimir’s config schema:
docker run --rm grafana/mimir:<version> -print.config > /tmp/mimir-default.yaml
- Keep the local config minimal; avoid fields not present in the current schema.
Remote write fails: “at least 2 live replicas required”
- Symptom (Mimir logs):
at least 2 live replicas required, could only find 1 - Fix: set
ingester.ring.replication_factor: 1ininfra/mimir/mimir.yaml.
Remote write fails: “empty ring” (often right after restart)
- Symptom: Mimir returns 500
empty ringwhile modules start. - Fix: wait ~10–30s; if persistent:
docker compose restart mimir otel-collector
otel-collector unhealthy in compose
- The
otel/opentelemetry-collector-contribimage doesn’t supportCMD-SHELLhealthchecks. - Prefer
["CMD","/otelcol-contrib","--version"]indocker-compose.yml.
Grafana Validation (Optional)
- Confirm datasource URL:
curl -sS -u admin:admin http://localhost:3001/api/datasources/uid/PROMETHEUS | jq -r .url
- Confirm Grafana can query Mimir:
curl -sS -u admin:admin 'http://localhost:3001/api/datasources/proxy/1/api/v1/query?query=up' | jq '.data.result | length'
Cleanup
- If you removed Prometheus from compose and see “orphan containers” warnings:
docker compose up -d --remove-orphans
