Skip to content

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