grafana-loki-minio/FROM-AI.md
2025-06-09 20:31:30 +02:00

558 lines
12 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 lingestion 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 linterface Grafana
Accédez à Grafana : http://localhost:3000
Menu de gauche → + → Import
Collez lID 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: nest 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 quil na 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