Am 19. November 2019 wurde die erste stabile Version von Loki veröffentlicht. Ein Tool, was von vielen lange und heiß erwartet wurde. Aber was ist Loki eigentlich genau?

Grafana beschreibt Loki folgendermaßen:

Loki: like Prometheus, but for logs. Loki is a horizontally-scalable, highly-available, multi-tenant log aggregation system inspired by Prometheus. It is designed to be very cost effective and easy to operate. It does not index the contents of the logs, but rather a set of labels for each log stream.

Mit anderen Worten: Loki ist eine Server-Applikation speziell zur Aggregation von Log-Daten mit Fokus auf Hochverfügbarkeit und Skalierbarkeit. Um im Gegensatz zu seinen Konkurrenten wirklich einfach zu installieren und enorm Resourcen-Effizient.

Einen Vergleich mit Elastic, Greylog und Co wird es auch noch geben. In diesem Artikel soll es aber vor allem erstmal darum gehen, wie man ein Loki Setup schnell und einfach installiert.

Das Setup

Neben Loki als Log-Server brauchen wir noch zwei weitere Tools: Grafana und Promtail. Grafana ist das weit bekannte Visualisierungs-Tool von dem gleichnamigen Hersteller. Promtail ist ein Log-Daten-Lieferant. Als Agent wird dieser genau dort installiert, wo die Log-Daten erstehen. Promtail ließt dann die gewünschten Logfiles aus und sendet den Inhalt an Loki.

Hier noch einmal eine Übersicht:

NameVersionDocs
Grafanav6.4.4https://grafana.com/docs/
Lokiv1.0.0https://github.com/grafana/loki/tree/master/docs
Promtailv1.0.0https://github.com/grafana/loki/blob/master/docs/clients/promtail/README.md

Die Installation von Grafana werde ich in dem Artikel hier nicht beschreiben, da es dafür eine exzellente Dokumentation und Anleitung von Grafana selbst gibt.

Installation Loki

Loki ist eine in Go geschriebene Software und dadurch denkbar einfach zu installieren. Dazu müssen wir die Binaries runterladen, entpacken und einfach starten.

Zunächst laden wir die Binary herunter.

mkdir /opt/loki/ && cd /opt/loki/
wget https://github.com/grafana/loki/releases/download/v1.0.0/loki-linux-amd64.gz
gunzip loki-linux-amd64.gz
chmod a+x loki-linux-amd64

Nun legen wir noch die Basis Konfiguration in die /opt/loki/config.yaml dazu.

auth_enabled: false

server:
  http_listen_port: 3100

ingester:
  lifecycler:
    address: 127.0.0.1
    ring:
      kvstore:
        store: inmemory
      replication_factor: 1
    final_sleep: 0s
  chunk_idle_period: 5m
  chunk_retain_period: 30s

schema_config:
  configs:
    - from: 2018-04-15
      store: boltdb
      object_store: filesystem
      schema: v9
      index:
        prefix: index_
        period: 168h

storage_config:
  boltdb:
    directory: /tmp/loki/index

  filesystem:
    directory: /tmp/loki/chunks

limits_config:
  enforce_metric_name: false
  reject_old_samples: true
  reject_old_samples_max_age: 168h

chunk_store_config:
  max_look_back_period: 0

table_manager:
  chunk_tables_provisioning:
    inactive_read_throughput: 0
    inactive_write_throughput: 0
    provisioned_read_throughput: 0
    provisioned_write_throughput: 0
  index_tables_provisioning:
    inactive_read_throughput: 0
    inactive_write_throughput: 0
    provisioned_read_throughput: 0
    provisioned_write_throughput: 0
  retention_deletes_enabled: false
  retention_period: 0

Eine genau Beschreibung darüber was die Konfiguration im einzelnen macht, lässt sich am besten der Dokumentation entnehmen. Zusammengefasst starten wir hier einen Loki Server, der auf Port 3100 lauscht. Die Log-Daten werden von Loki auf dem Filesystem gespeichert und indiziert. Wer ein solches Setup produktiv verwenden möchte sollte darauf achten nicht /tmp/ als Directory zu verwenden, da dieser Ordner nach einem Neustart der Node wieder leer ist.

Damit ist Loki jetzt schon einsatzbereit. Mit dem folgenden Kommando lässt sich der Server einfach starten:

/opt/loki/loki-linux-amd64 -config.file /opt/loki/config.yaml

Ein Beispiel für eine Systemd Unit findet sich hier:

[Unit]
Description=Like Prometheus, but for logs.
Documentation=https://github.com/grafana/loki

[Service]
ExecStart=/opt/loki/loki-linux-amd64 -config.file /opt/loki/config.yaml

[Install]
WantedBy=multi-user.target

Installation Promtail

Promtail ist ein Agent, der die Log-Daten für Loki bereitstellt und an Loki sendet. Die Inhalte der Logfiles können durch Promtail gelabelt, manipuliert und restrukturiert werden.

Promtail ist genauso einfach zu installieren, wie Loki.

mkdir /opt/promtail/ && cd /opt/promtail/
wget https://github.com/grafana/loki/releases/download/v1.0.0/promtail-linux-amd64.gz
gunzip promtail-linux-amd64.gz
chmod a+x promtail-linux-amd64

Auch Promtail will ein wenig konfiguriert werden. Deswegen legen wir noch eine /opt/promtail/config.yaml dazu.

# Promtail Server Config
server:
  http_listen_port: 9080
  grpc_listen_port: 0

# Positions
positions:
  filename: /tmp/positions.yaml

# Loki Server URL
clients:
  - url: http://localhost:3100/loki/api/v1/push

scrape_configs:
  - job_name: syslog
    static_configs:
      - targets:
          - localhost
        labels:
          job: syslog
          host: localhost
          __path__: /var/log/syslog

Die wichtigste Konfiguration hier ist der Abschnitt scrape_configs. Hier legen wir fest, welche Logfiles gelesen und berücksichtigt werden sollen. Die Manipulation von Logeingrägen lässt sich in den pipeline_stages realisieren.

In unserem Beispiel lesen wir einfach die syslog aus und senden diesen unverändert an Loki.

Starten lässt sich Promtail nun via Konsole mit

/opt/promtail/promtail-linux-amd64 -config.file /opt/promtail/config.yaml

oder mit Systemd

[Unit]
Description=Promtail
Documentation=https://github.com/grafana/loki

[Service]
ExecStart=/opt/promtail/promtail-linux-amd64 -config.file /opt/promtail/config.yaml

[Install]
WantedBy=multi-user.target

Ab diesem Moment sollten bereits Logdaten in Loki reinlaufen. In Grafana fügen wir Loki nun als Datasource hinzu und können im Explorer die Logfiles beobachten, aggregieren und filtern.

Fazit

Die Inbetriebnahme von Loki ist einfach einfach. Ohne weitere Abhängigkeiten, wie Java oder Python, lässt sich mit Loki ein stabiler, schneller und resourcensparender Log-Server installieren, der eine ganze Bandbreite an Data-Backends unterstützt und gut mit existierendem Tooling zusammenarbeitet. Sowohl Loki, als auch der Agent Promtail sind effizient und einfach konfiguriert. Zusätzlich gibt es fertige Binaries für Linus, macOS, Windows und diverse Chip-Architekturen. Interessant wird es vor allem aber für Kubernetes Betreiber, denn das ist eigentlich die Zielgruppe von Loki.

In einem weiteren Artikel werde ich zeigen, was Loki im Detail kann und wie Loki im Vergleich zu seinen beliebtesten Konkurrenten steht.