558 lines
12 KiB
Markdown
558 lines
12 KiB
Markdown
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 |