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: - url: http://loki:3100/loki/api/v1/push scrape_configs: - job_name: varlogs static_configs: - targets: - localhost labels: job: varlogs __path__: /var/log/*log ✅ Étapes après le lancement 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: - url: http://loki:3100/loki/api/v1/push scrape_configs: - job_name: varlogs static_configs: - targets: - localhost labels: job: varlogs __path__: /var/log/*log ✅ Démarrage docker-compose up -d