Loki
Agrégation centralisée des logs système de toutes les VMs via Promtail.
Architecture
Chaque VM (Promtail — node_exporter role)
│ envoie /var/log/syslog
│
▼
Loki (port 3100) — VM monitoring
│
└── Datasource dans Grafana
Serveur Loki
Image : grafana/loki:3.4
Port : 3100
Rétention : 48h
Déploiement : Docker sur la VM monitoring (via rôle Ansible monitoring)
auth_enabled: false
server:
http_listen_port: 3100
common:
path_prefix: /tmp/loki
storage:
filesystem:
chunks_directory: /tmp/loki/chunks
rules_directory: /tmp/loki/rules
replication_factor: 1
limits_config:
retention_period: 48h
Agent Promtail (toutes les VMs)
Le rôle Ansible node_exporter installe Promtail en binaire + service systemd sur chaque VM. Il collecte /var/log/syslog et l'envoie au serveur Loki central.
# /etc/promtail/config.yml
server:
http_listen_port: 9080
positions:
filename: /tmp/positions.yaml
clients:
- url: http://192.168.1.31:3100/loki/api/v1/push
scrape_configs:
- job_name: system
static_configs:
- targets:
- localhost
labels:
job: syslog
host: "{{ ansible_hostname }}"
__path__: /var/log/syslog
Requêtes utiles dans Grafana
# Logs d'une VM spécifique
{host="traefik"}
# Logs SSH (toutes les VMs)
{job="syslog"} |= "sshd"
# Erreurs des 15 dernières minutes
{job="syslog"} |= "error"
# Pourcentage d'erreur par VM
sum by(host) (count_over_time({job="syslog"} |= "error"[1h]))
/
sum by(host) (count_over_time({job="syslog"}[1h]))
Vérification
# Loki ready ?
curl http://192.168.1.31:3100/ready
# Labels disponibles
curl http://192.168.1.31:3100/loki/api/v1/labels
# Promtail sur chaque VM
systemctl status promtail
journalctl -u promtail -f
Pour aller plus loin
- Observabilité — Vue d'ensemble — stack complète
- Grafana — visualisation des logs dans Grafana
- Phase 4.6 — Monitoring — déploiement complet