Linux

Grafana Mimir — Docker Compose (GitHub)

Déployer un labo Mimir avec 3 instances, MinIO, NGINX et Grafana via Docker Compose, en s'appuyant sur la documentation officielle GitHub.

← Retour aux tutoriels Linux
📚 Ce qu'on fait ici On déploie une stack de labo : MinIO (stockage objet), Mimir x3 (memberlist), NGINX (load balancer sur le port 9009) et Grafana (port 9000).
⚠ Labo uniquement Les identifiants de démonstration (admin/changeme) sont faits pour du test. En production : secrets dédiés, TLS, réseau privé, durcissement des accès.

Consulter la documentation GitHub officielle

La base du tutoriel est la doc Mimir dans le repo GitHub principal. Le fichier de référence est :

docs/sources/mimir/get-started/play-with-grafana-mimir/docker-compose.yml

Tu peux l'ouvrir directement ici :

https://github.com/grafana/mimir/blob/main/docs/sources/mimir/get-started/play-with-grafana-mimir/docker-compose.yml

Préparer l'arborescence des fichiers

Depuis ton dossier de travail :

mkdir -p mimir-lab/config
cd mimir-lab

Structure attendue :

mimir-lab/
├── docker-compose.yaml
└── config/
    ├── mimir.yaml
    └── nginx.conf

Créer docker-compose.yaml

Crée le fichier docker-compose.yaml avec ce contenu :

services:
  minio:
    image: minio/minio
    command: minio server --console-address ":9001" --quiet /data
    environment:
      - MINIO_ROOT_USER=admin
      - MINIO_ROOT_PASSWORD=changeme
    volumes:
      - minio-data:/data
    ports:
      - 9001:9001

  mimir-1:
    image: grafana/mimir
    command: ["-config.file=/etc/mimir.yaml"]
    hostname: mimir-1
    depends_on:
      - minio
    volumes:
      - ./config/mimir.yaml:/etc/mimir.yaml
      - mimir-1-data:/data

  mimir-2:
    image: grafana/mimir
    command: ["-config.file=/etc/mimir.yaml"]
    hostname: mimir-2
    depends_on:
      - minio
    volumes:
      - ./config/mimir.yaml:/etc/mimir.yaml
      - mimir-2-data:/data

  mimir-3:
    image: grafana/mimir
    command: ["-config.file=/etc/mimir.yaml"]
    hostname: mimir-3
    depends_on:
      - minio
    volumes:
      - ./config/mimir.yaml:/etc/mimir.yaml
      - mimir-3-data:/data

  load-balancer:
    image: nginx:latest
    volumes:
      - ./config/nginx.conf:/etc/nginx/nginx.conf:ro
    depends_on:
      - mimir-1
      - mimir-2
      - mimir-3
    ports:
      - 9009:9009

  grafana:
    image: grafana/grafana:latest
    environment:
      - GF_LOG_MODE=console
      - GF_LOG_LEVEL=critical
    volumes:
      - grafana-data:/var/lib/grafana
    depends_on:
      - mimir-1
      - mimir-2
      - mimir-3
    ports:
      - 9000:3000

volumes:
  minio-data:
  mimir-1-data:
  mimir-2-data:
  mimir-3-data:
  grafana-data:

Créer mimir.yaml et nginx.conf

Fichier config/mimir.yaml :

# Run Mimir in single process mode, with all components running in 1 process.
target: all,alertmanager,overrides-exporter

# Configure Mimir to use Minio as object storage backend.
common:
  storage:
    backend: s3
    s3:
      endpoint: minio:9000
      access_key_id: admin
      secret_access_key: changeme
      insecure: true
      bucket_name: mimir

# Blocks storage requires a prefix when using a common object storage bucket.
blocks_storage:
  storage_prefix: blocks
  tsdb:
    dir: /data/ingester

# Use memberlist, a gossip-based protocol, to enable the 3 Mimir replicas to communicate.
memberlist:
  join_members: [mimir-1, mimir-2, mimir-3]

server:
  log_level: warn

Fichier config/nginx.conf :

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    upstream mimir {
        server mimir-1:8080;
        server mimir-2:8080;
        server mimir-3:8080;
    }

    server {
        listen 9009;

        location / {
            proxy_pass http://mimir;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
}

Démarrer la stack

docker compose up -d
docker compose ps

Tu dois voir les services minio, mimir-1, mimir-2, mimir-3, load-balancer et grafana en état running.

Vérifier Mimir et Grafana

  1. Tester l'endpoint Mimir via le load balancer :
    curl http://localhost:9009/ready
    # attendu: ready
  2. Ouvrir Grafana : http://localhost:9000.
  3. Ajouter une datasource Prometheus pointant vers : http://load-balancer:9009/prometheus (si Grafana est dans le même compose) ou http://localhost:9009/prometheus (depuis l'hôte).
✔ Résultat Ton labo Mimir est en place et prêt pour recevoir les métriques (Prometheus remote_write, Alloy, etc.).