Découvrez Grafana LOKI, un système d’agrégation de journaux pour tout

Découvrez Grafana LOKI, un système d’agrégation de journaux pour tout

 

Je suis en quête d’un nouveau système de journalisation. J’en ai utilisé pas mal dans le passé, certains open source, certains propriétaires et certains développés en interne, mais récemment j’ai décidé de changer.Je suis passé à Grafana Loki pour tous mes journaux pour tous mes systèmes – cela inclut les machines, les appareils, les systèmes Docker et les hôtes, et tous mes clusters Kubernetes.
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-kuma et hôte juno :
    {container_name="uptime-kuma", host="juno"}
    

👉 En savoir plus sur LogQL


🍓 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'

 

Comments

No comments yet. Why don’t you start the discussion?

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *