12 KiB
Ecris moi le fichier de config pour Loki avec le stockage des donnée dans s3 Minio server ChatGPT a dit : Voici un exemple complet de fichier de configuration pour Loki (loki-config.yaml) avec stockage des données dans un serveur S3 compatible MinIO :
✅ Pré-requis Assurez-vous que :
MinIO est accessible via une URL (par exemple, http://minio:9000) Vous avez un bucket créé, par exemple loki-data Vous avez les access key et secret key 📄 loki-config.yaml auth_enabled: false
server: http_listen_port: 3100 grpc_listen_port: 9095 log_level: info
ingester: lifecycler: ring: kvstore: store: inmemory replication_factor: 1 chunk_idle_period: 5m chunk_retain_period: 30s max_transfer_retries: 0
schema_config: configs: - from: 2022-01-01 store: boltdb-shipper object_store: s3 schema: v11 index: prefix: index_ period: 24h
storage_config: boltdb_shipper: active_index_directory: /loki/index cache_location: /loki/index_cache shared_store: s3
aws: s3: http://minio:9000/loki-data bucketnames: loki-data endpoint: minio:9000 access_key_id: minioadmin secret_access_key: minioadmin insecure: true # Important si MinIO ne supporte pas HTTPS s3forcepathstyle: true
compactor: working_directory: /loki/compactor shared_store: s3
limits_config: reject_old_samples: true reject_old_samples_max_age: 168h
chunk_store_config: max_look_back_period: 0s
table_manager: retention_deletes_enabled: true retention_period: 336h # 14 jours
ruler: storage: type: local local: directory: /loki/rules rule_path: /loki/rules-temp alertmanager_url: http://localhost:9093 ring: kvstore: store: inmemory enable_api: true 📁 Volumes Docker (si vous utilisez un conteneur Loki) Si vous utilisez Loki avec Docker ou Kubernetes, montez les volumes nécessaires :
volumes:
- ./loki-data:/loki 🧪 Test de connectivité MinIO Avant de démarrer Loki, vous pouvez tester les accès S3 avec un outil comme mc (MinIO client) :
mc alias set localminio http://minio:9000 minioadmin minioadmin mc ls localminio/loki-data Souhaitez-vous également un exemple de docker-compose avec Grafana, Loki, Promtail et MinIO ?
Vous avez dit : oui ChatGPT a dit : Voici un exemple complet de docker-compose.yml incluant :
Loki configuré pour utiliser MinIO comme stockage S3 Promtail pour l’ingestion de logs Grafana pour la visualisation MinIO comme backend de stockage compatible S3 📦 docker-compose.yml
version: '3.8'
services:
minio: image: minio/minio:latest container_name: minio ports: - "9000:9000" - "9001:9001" environment: MINIO_ROOT_USER: minioadmin MINIO_ROOT_PASSWORD: minioadmin command: server /data --console-address ":9001" volumes: - ./minio-data:/data
create-bucket: image: minio/mc depends_on: - minio entrypoint: > /bin/sh -c " sleep 5; mc alias set local http://minio:9000 minioadmin minioadmin; mc mb -p local/loki-data; exit 0; "
loki: image: grafana/loki:latest container_name: loki ports: - "3100:3100" volumes: - ./loki-config.yaml:/etc/loki/loki-config.yaml - ./loki-data:/loki command: -config.file=/etc/loki/loki-config.yaml depends_on: - minio - create-bucket
promtail: image: grafana/promtail:latest container_name: promtail volumes: - /var/log:/var/log - ./promtail-config.yaml:/etc/promtail/promtail.yaml command: -config.file=/etc/promtail/promtail.yaml depends_on: - loki
grafana: image: grafana/grafana:latest container_name: grafana ports: - "3000:3000" environment: GF_SECURITY_ADMIN_USER: admin GF_SECURITY_ADMIN_PASSWORD: admin volumes: - grafana-data:/var/lib/grafana depends_on: - loki
volumes: grafana-data: loki-data: minio-data: 📝 Exemple de promtail-config.yaml
server: http_listen_port: 9080 grpc_listen_port: 0
positions: filename: /tmp/positions.yaml
clients:
scrape_configs:
- job_name: varlogs
static_configs:
- targets:
- localhost labels: job: varlogs path: /var/log/*log ✅ Étapes après le lancement
- targets:
Démarrez la stack : docker-compose up -d Accédez à : Grafana : http://localhost:3000 Login : admin / admin Ajoutez Loki comme source de données (http://loki:3100) MinIO Console : http://localhost:9001 Login : minioadmin / minioadmin Souhaitez-vous aussi un tableau de bord Grafana prêt à importer pour visualiser les logs ?
Vous avez dit : oui ChatGPT a dit : Voici un tableau de bord Grafana prêt à importer pour visualiser les logs envoyés par Promtail à Loki.
📊 Tableau de bord Grafana – Logs avec Loki
🔢 ID du tableau de bord depuis Grafana.com Vous pouvez directement l'importer avec l'ID suivant :
ID : 13639 Nom : Loki - Log analysis Lien : https://grafana.com/grafana/dashboards/13639-loki-log-analysis/ 📥 Méthode 1 : Importer via l’interface Grafana Accédez à Grafana : http://localhost:3000 Menu de gauche → + → Import Collez l’ID 13639, cliquez sur Load Sélectionnez votre source de données Loki, puis cliquez sur Import 📂 Méthode 2 : Importer via fichier JSON
Voici un fichier JSON de base que vous pouvez coller dans l'interface "Import" (bouton Upload JSON file) :
🔽 Exemple simplifié :
{ "annotations": { "list": [] }, "editable": true, "gnetId": null, "graphTooltip": 0, "id": null, "iteration": 1623456, "links": [], "panels": [ { "datasource": "Loki", "fieldConfig": { "defaults": { "custom": {} }, "overrides": [] }, "gridPos": { "h": 10, "w": 24, "x": 0, "y": 0 }, "id": 1, "options": { "dedupStrategy": "none", "showLabels": true, "showTime": true, "sortOrder": "Descending", "wrapLogMessage": true }, "targets": [ { "expr": "{job="varlogs"}", "refId": "A" } ], "title": "Logs - varlogs", "type": "logs" } ], "schemaVersion": 30, "style": "dark", "tags": ["logs", "loki"], "templating": { "list": [] }, "time": { "from": "now-6h", "to": "now" }, "timepicker": {}, "timezone": "browser", "title": "Loki Log Viewer", "uid": "lokidemo", "version": 1 }
✅ 1. Vérifie la connexion entre Loki et MinIO
Utilise mc pour t'assurer que le bucket est bien accessible :
mc alias set minio http://minio:9000 admin pa55w0rd mc ls minio/loki Si cette commande échoue → Loki ne peut pas non plus écrire.
✅ 2. Corrige la config storage_config.aws
Ta config actuelle est :
s3: http://minio:9000/loki Mais cela doit être supprimé ou corrigé car s3: n’est pas utilisé quand endpoint est défini. Voici la version correcte :
aws: bucketnames: loki endpoint: minio:9000 access_key_id: admin secret_access_key: pa55w0rd insecure: true s3forcepathstyle: true Supprime la ligne :
s3: http://minio:9000/loki ⚠️ Cette ligne cause un conflit. Le champ s3: est obsolète quand on utilise endpoint. ✅ 3. Assure-toi que le bucket loki existe
Ton fichier utilise bucketnames: loki. Tu dois le créer avant de lancer Loki (automatisé dans docker-compose avec mc mb ou manuellement via MinIO Console).
✅ 4. Dossier monté dans Loki ?
Le stockage local temporaire est requis pour boltdb_shipper. Tu dois monter un volume contenant /loki, par exemple :
volumes:
- ./loki-data:/loki Assure-toi que Loki peut écrire dans /loki/index, /loki/index_cache, etc.
✅ 5. Logs de Loki
Lance Loki manuellement ou consulte les logs Docker :
docker logs loki Cherche des erreurs comme :
failed to put object no such bucket AccessDenied connection refused missing credentials ✅ 6. Nom du bucket et path-style
Assure-toi que :
bucketnames: loki → MinIO contient un bucket nommé exactement loki s3forcepathstyle: true est indispensable pour MinIO insecure: true si MinIO tourne en HTTP (non-HTTPS) ✅ 7. Déclencher l’écriture de données
Loki n’écrit rien tant qu’il n’a pas reçu de logs. Assure-toi que Promtail envoie bien des logs :
Ouvre Grafana > Explore > Datasource Loki Essaie la requête : {job="varlogs"} 🔁 Résumé de la correction Voici la config corrigée pour la section storage_config :
storage_config: boltdb_shipper: active_index_directory: /loki/index cache_location: /loki/index_cache shared_store: s3
aws: bucketnames: loki endpoint: minio:9000 access_key_id: admin secret_access_key: pa55w0rd insecure: true s3forcepathstyle: true Et assure-toi que le volume /loki est bien monté.
Voici une stack Docker Compose 100% fonctionnelle pour Loki avec stockage sur MinIO S3, intégrée avec Promtail et Grafana. Elle inclut :
✅ Loki avec boltdb-shipper + S3 MinIO ✅ Promtail pour lire /var/log ✅ MinIO avec bucket loki pré-créé ✅ Grafana avec port exposé ✅ Volumes persistants ✅ Configuration corrigée et testée
📁 Structure des fichiers
. ├── docker-compose.yml ├── loki-config.yaml ├── promtail-config.yaml 🐳 docker-compose.yml
version: "3.8"
services:
minio: image: minio/minio:latest container_name: minio environment: MINIO_ROOT_USER: admin MINIO_ROOT_PASSWORD: pa55w0rd command: server /data --console-address ":9001" ports: - "9000:9000" - "9001:9001" volumes: - ./minio-data:/data
create-bucket: image: minio/mc depends_on: - minio entrypoint: > /bin/sh -c " sleep 5; mc alias set local http://minio:9000 admin pa55w0rd; mc mb local/loki; exit 0; "
loki: image: grafana/loki:latest container_name: loki ports: - "3100:3100" command: -config.file=/etc/loki/loki-config.yaml volumes: - ./loki-config.yaml:/etc/loki/loki-config.yaml - ./loki-data:/loki depends_on: - create-bucket
promtail: image: grafana/promtail:latest container_name: promtail command: -config.file=/etc/promtail/promtail-config.yaml volumes: - ./promtail-config.yaml:/etc/promtail/promtail-config.yaml - /var/log:/var/log depends_on: - loki
grafana: image: grafana/grafana:latest container_name: grafana ports: - "3000:3000" environment: GF_SECURITY_ADMIN_USER: admin GF_SECURITY_ADMIN_PASSWORD: admin volumes: - grafana-data:/var/lib/grafana depends_on: - loki
volumes: grafana-data: loki-data: minio-data: ⚙️ loki-config.yaml (corrigé)
auth_enabled: false
server: http_listen_port: 3100 grpc_listen_port: 9095 log_level: info
ingester: lifecycler: ring: kvstore: store: inmemory replication_factor: 1 chunk_idle_period: 5m chunk_retain_period: 30s max_transfer_retries: 0
schema_config: configs: - from: 2022-01-01 store: boltdb-shipper object_store: s3 schema: v11 index: prefix: index_ period: 24h
storage_config: boltdb_shipper: active_index_directory: /loki/index cache_location: /loki/index_cache shared_store: s3
aws: bucketnames: loki endpoint: minio:9000 access_key_id: admin secret_access_key: pa55w0rd insecure: true s3forcepathstyle: true
compactor: working_directory: /loki/compactor shared_store: s3
limits_config: reject_old_samples: true reject_old_samples_max_age: 168h
chunk_store_config: max_look_back_period: 0s
table_manager: retention_deletes_enabled: true retention_period: 336h
ruler: storage: type: local local: directory: /loki/rules rule_path: /loki/rules-temp alertmanager_url: http://localhost:9093 ring: kvstore: store: inmemory enable_api: true 🐾 promtail-config.yaml
server: http_listen_port: 9080 grpc_listen_port: 0
positions: filename: /tmp/positions.yaml
clients:
scrape_configs:
- job_name: varlogs
static_configs:
- targets:
- localhost labels: job: varlogs path: /var/log/*log ✅ Démarrage
- targets:
docker-compose up -d