Si vous envisagez d’utiliser Grafana et que vous recherchez également un moyen rapide de consigner tous vos systèmes, rejoignez-moi pendant que nous discutons et configurons Grafana Loki.Vous ne souhaitez pas l’héberger vous-même ? Découvrez Grafana Cloud et créez un compte gratuit.
🔧 Configuration de Docker
Consultez cet article sur la façon d’installer docker et docker-compose
📦 Exécution du conteneur (avec Docker Compose)
mkdir grafana
mkdir loki
mkdir promtail
touch docker-compose.yml
nano docker-compose.yml # copier le contenu ci-dessous
ls
docker-compose up -d --force-recreate # assurez-vous d’avoir créé promtail-config.yml et loki-config.yml avant
🛠️ docker-compose.yml
version: "3"
networks:
loki:
services:
loki:
image: grafana/loki:2.4.0
volumes:
- /home/serveradmin/docker_volumes/loki:/etc/loki
ports:
- "3100:3100"
restart: unless-stopped
command: -config.file=/etc/loki/loki-config.yml
networks:
- loki
promtail:
image: grafana/promtail:2.4.0
volumes:
- /var/log:/var/log
- /home/serveradmin/docker_volumes/promtail:/etc/promtail
restart: unless-stopped
command: -config.file=/etc/promtail/promtail-config.yml
networks:
- loki
grafana:
image: grafana/grafana:latest
user: "1000"
volumes:
- /home/serveradmin/docker_volumes/grafana:/var/lib/grafana
ports:
- "3000:3000"
restart: unless-stopped
networks:
- loki
⚙️ Configuration de Loki
nano loki/loki-config.yml
loki-config.yml
auth_enabled: false
server:
http_listen_port: 3100
grpc_listen_port: 9096
common:
path_prefix: /tmp/loki
storage:
filesystem:
chunks_directory: /tmp/loki/chunks
rules_directory: /tmp/loki/rules
replication_factor: 1
ring:
instance_addr: 127.0.0.1
kvstore:
store: inmemory
schema_config:
configs:
- from: 2020-10-24
store: boltdb-shipper
object_store: filesystem
schema: v11
index:
prefix: index_
period: 24h
ruler:
alertmanager_url: http://localhost:9093
⚙️ Configuration de Promtail
nano promtail/promtail-config.yml
promtail-config.yml
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:
# local machine logs
- job_name: local
static_configs:
- targets:
- localhost
labels:
job: varlogs
__path__: /var/log/*log
# docker logs
#- job_name: docker
# pipeline_stages:
# - docker: {}
# static_configs:
# - labels:
# job: docker
# __path__: /var/lib/docker/containers/*/*-json.log
# syslog target
#- job_name: syslog
# syslog:
# listen_address: 0.0.0.0:1514
# idle_timeout: 60s
# label_structured_data: yes
# labels:
# job: "syslog"
# relabel_configs:
# - source_labels: ['__syslog_message_hostname']
# target_label: 'host'
🔌 Pilote Docker Loki
Installer le plugin :
docker plugin install grafana/loki-docker-driver:latest --alias loki --grant-all-permissions
Modifier la configuration du démon Docker :
sudo nano /etc/docker/daemon.json
daemon.json :
{
"log-driver": "loki",
"log-opts": {
"loki-url": "http://localhost:3100/loki/api/v1/push",
"loki-batch-size": "400"
}
}
Redémarrer Docker :
sudo systemctl restart docker
⚠️ Vous devrez également recréer vos conteneurs après cette modification.
🔎 Exemples de requêtes LogQL
- Tous les journaux du flux
varlogs:{job="varlogs"} - Journaux filtrés contenant “docker” :
{job="varlogs"} |= "docker" - Journaux filtrés par conteneur
uptime-kumaet hôtejuno:{container_name="uptime-kuma", host="juno"}
🍓 Processeur ARM (Raspberry Pi)
Supprimer /etc/docker/daemon.json
Et ajouter le service vector au docker-compose.yml :
vector:
image: timberio/vector:0.18.1-debian
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /home/serveradmin/docker_volumes/vector/vector-config.toml:/etc/vector/vector.toml:ro
ports:
- "8383:8383"
restart: unless-stopped
networks:
- loki
Créer la configuration :
mkdir vector
cd vector
nano vector-config.toml
vector-config.toml
[sources.docker-local]
type = "docker_logs"
docker_host = "/var/run/docker.sock"
exclude_containers = []
multiline.condition_pattern = '^\x{200B}'
multiline.mode = "halt_before"
multiline.start_pattern = '^\x{200B}'
multiline.timeout_ms = 1000
[sinks.loki]
type = "loki"
inputs = ["docker*"]
endpoint = "http://loki:3100"
auth.strategy = "bearer"
auth.token = "none"
encoding.codec = "json"
healthcheck.enabled = false
labels.forwarder = 'vector'
labels.host = ''
labels.container_name = ''
labels.compose_service = ''
labels.compose_project = ''
labels.source = ''
labels.category = 'dockerlogs'

