Déployer un labo Mimir avec 3 instances, MinIO, NGINX et Grafana via Docker Compose, en s'appuyant sur la documentation officielle GitHub.
admin/changeme) sont faits pour du test. En production : secrets dédiés, TLS, réseau privé, durcissement des accès.
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
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é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:
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;
}
}
}
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.
curl http://localhost:9009/ready
# attendu: ready
http://localhost:9000.http://load-balancer:9009/prometheus (si Grafana est dans le même compose) ou http://localhost:9009/prometheus (depuis l'hôte).