Déployer Loki avec Docker Compose en 2 minutes !
Vous souhaitez centraliser les logs de vos applications ou de vos conteneurs Docker ? Le tout avec une solution Open Source, qui s'intègre très bien à l'écosystème de Prometheus et Grafana ? Loki est la solution que vous devez déployer !
Développé par Grafana Labs, Loki est un système d’agrégation de logs inspiré de Prometheus. Contrairement à d’autres solutions de logs, Loki n’indexe pas le contenu complet des logs, mais principalement des labels, ce qui le rend plus léger et économique à exploiter.
Regardons dans cet article comment déployer Loki avec Docker Compose en 2 minutes.
Présentation
Loki permet de stocker et de rechercher des logs à l’aide de LogQL, un langage de requête inspiré de PromQL. Il s’intègre très bien avec Grafana pour visualiser les logs, filtrer par labels, rechercher des erreurs ou suivre le comportement d’une application.
Il fait office de SIEM (Security Information and Event Management) et est souvent comparé à un ELK (Elasticsearch, Logstash, Kibana) "light" si on le couple avec Grafana.
Installation
Pour cette installation, nous allons créer deux fichiers docker-compose.yml et loki-config.yml.
Commençons par créer un dossier dédié au déploiement de Loki :
mkdir loki
cd lokiCréez ensuite le fichier docker-compose.yml :
---
services:
loki:
image: grafana/loki
container_name: loki
restart: unless-stopped
ports:
- 3100:3100
volumes:
- ./loki-config.yml:/etc/loki/local-config.yaml:ro
- loki-data:/loki
command:
- "-config.file=/etc/loki/local-config.yaml"
volumes:
loki-data:Dans ce fichier, nous déclarons un service loki.
Le port 3100 du conteneur est exposé sur le port 3100 de l’hôte. Cela permettra d’interroger Loki directement depuis un navigateur, Grafana ou un outil comme curl.
Le volume loki-data permet de conserver les données de Loki même si le conteneur est supprimé ou recréé.
Configuration Loki
Créons maintenant le fichier loki-config.yml :
auth_enabled: false
server:
http_listen_port: 3100
common:
path_prefix: /loki
storage:
filesystem:
chunks_directory: /loki/chunks
rules_directory: /loki/rules
replication_factor: 1
ring:
kvstore:
store: inmemory
schema_config:
configs:
- from: 2024-01-01
store: tsdb
object_store: filesystem
schema: v13
index:
prefix: index_
period: 24h
limits_config:
allow_structured_metadata: false
retention_period: 168h
compactor:
working_directory: /loki/compactor
retention_enabled: true
delete_request_store: filesystemCette configuration permet de lancer Loki en mode simple, avec un stockage local sur le système de fichiers.
La directive auth_enabled: false désactive l’authentification. C’est pratique pour un environnement local, un lab ou un usage interne isolé.
Le bloc schema_config définit le format de stockage utilisé par Loki.
Le bloc limits_config permet ici de définir une rétention de 7 jours avec :
retention_period: 168hDéploiement
Une fois les deux fichiers créés, il suffit de démarrer le conteneur :
docker compose up -dVous pouvez vérifier que le conteneur est bien démarré :
docker compose psNAME IMAGE STATUS PORTS
loki grafana/loki:3.7.0 Up 0.0.0.0:3100->3100/tcpVérification
Pour vérifier que Loki est prêt, vous pouvez accéder à l’URL suivante :
http://localhost:3100/readyAlloy
Maintenant que votre conteneur Loki est déployé, il vous faut déployer Alloy sur chaque serveur où vous souhaitez collecter et agréger les logs.