DEV Community

Cover image for Deploying Mimir Scalable Metrics Storage on Ubuntu 24.04
Sanskriti Harmukh for Vultr

Posted on with Aashish Chaurasiya • Originally published at docs.vultr.com

Deploying Mimir Scalable Metrics Storage on Ubuntu 24.04

Mimir is an open-source, horizontally scalable long-term storage backend for Prometheus metrics from Grafana Labs. It accepts metrics via Prometheus remote write and serves them back through a Prometheus-compatible query API. This guide deploys Mimir using Docker Compose with Traefik handling automatic HTTPS, and verifies the backend through its status endpoints. By the end, you'll have Mimir storing and serving Prometheus metrics over HTTPS at your domain.


Set Up the Directory Structure

1. Create the project directory structure:

$ mkdir -p ~/mimir-metrics/{mimir-data,mimir-config}
$ cd ~/mimir-metrics
Enter fullscreen mode Exit fullscreen mode

2. Create the environment file:

$ nano .env
Enter fullscreen mode Exit fullscreen mode
DOMAIN=mimir.example.com
LETSENCRYPT_EMAIL=admin@example.com
Enter fullscreen mode Exit fullscreen mode

3. Create the Mimir configuration file:

$ nano mimir-config/mimir-config.yaml
Enter fullscreen mode Exit fullscreen mode
multitenancy_enabled: false

server:
  http_listen_port: 9009
  log_level: info

blocks_storage:
  backend: filesystem
  filesystem:
    dir: /data/blocks
  tsdb:
    dir: /data/tsdb
    retention_period: 24h

compactor:
  data_dir: /data/compactor
  sharding_ring:
    kvstore:
      store: memberlist

distributor:
  ring:
    kvstore:
      store: memberlist

ingester:
  ring:
    kvstore:
      store: memberlist
    replication_factor: 1

store_gateway:
  sharding_ring:
    kvstore:
      store: memberlist

ruler_storage:
  backend: filesystem
  filesystem:
    dir: /data/rules

limits:
  max_global_series_per_user: 0
  ingestion_rate: 0
  ingestion_burst_size: 0
Enter fullscreen mode Exit fullscreen mode

Deploy with Docker Compose

1. Create the Docker Compose manifest:

$ nano docker-compose.yaml
Enter fullscreen mode Exit fullscreen mode
services:
  traefik:
    image: traefik:v3.6
    container_name: traefik
    command:
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--entrypoints.web.address=:80"
      - "--entrypoints.websecure.address=:443"
      - "--entrypoints.web.http.redirections.entrypoint.to=websecure"
      - "--entrypoints.web.http.redirections.entrypoint.scheme=https"
      - "--certificatesresolvers.letsencrypt.acme.httpchallenge=true"
      - "--certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web"
      - "--certificatesresolvers.letsencrypt.acme.email=${LETSENCRYPT_EMAIL}"
      - "--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json"
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - "letsencrypt:/letsencrypt"
      - "/var/run/docker.sock:/var/run/docker.sock:ro"
    restart: unless-stopped

  mimir:
    image: grafana/mimir:latest
    container_name: mimir
    hostname: mimir
    expose:
      - "9009"
    volumes:
      - "./mimir-config/mimir-config.yaml:/etc/mimir/mimir-config.yaml"
      - "./mimir-data:/data"
    command: -config.file=/etc/mimir/mimir-config.yaml
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.mimir.rule=Host(`${DOMAIN}`)"
      - "traefik.http.routers.mimir.entrypoints=websecure"
      - "traefik.http.routers.mimir.tls.certresolver=letsencrypt"
      - "traefik.http.services.mimir.loadbalancer.server.port=9009"
    restart: unless-stopped

volumes:
  letsencrypt:
Enter fullscreen mode Exit fullscreen mode

2. Start the services:

$ docker compose up -d
Enter fullscreen mode Exit fullscreen mode

3. Verify the services are running:

$ docker compose ps
Enter fullscreen mode Exit fullscreen mode

4. View the logs:

$ docker compose logs
Enter fullscreen mode Exit fullscreen mode

Access Mimir

1. Check the readiness endpoint:

$ curl https://mimir.example.com/ready
Enter fullscreen mode Exit fullscreen mode

A ready response confirms the backend is up.

2. Check the build information:

$ curl https://mimir.example.com/api/v1/status/buildinfo
Enter fullscreen mode Exit fullscreen mode

3. Query the running configuration:

$ curl https://mimir.example.com/api/v1/status/config
Enter fullscreen mode Exit fullscreen mode

4. Check the ingester ring:

$ curl https://mimir.example.com/ingester/ring
Enter fullscreen mode Exit fullscreen mode

Next Steps

Mimir is running and ready to accept Prometheus metrics over HTTPS. From here you can:

  • Configure Prometheus remote_write to push metrics to your Mimir domain
  • Add Mimir as a Prometheus data source in Grafana for long-term queries
  • Move block storage to S3-compatible object storage for durable retention

For the full guide with additional tips, visit the original article on Vultr Docs.

Top comments (0)