Lernen Sie die Grundlagen von Grafana Loki kennen, einem mandantenfähigen System zur Protokollaggregation.

In einer Produktionsumgebung sind Ausfallzeiten nicht hinnehmbar. Sie können zu einem massiven Verlust an Geschäftseinnahmen und Ansehen führen. Wenn Sie jedoch über ein angemessenes Protokollierungs- und Überwachungssystem verfügen, wissen Sie, wie Sie solche Szenarien, die zu Ausfallzeiten führen, debuggen können.

Es hilft, Kosten zu sparen und Probleme zu erkennen, die in Zukunft auftreten könnten.

Heutzutage werden DevOps-Prinzipien und -Tools von Unternehmen jeder Größe eingesetzt. Container und Kubernetes sind die beliebtesten davon. Und die Überwachung eines solchen Systems wird mit Prometheus sehr effizient durchgeführt. Aber Prometheus hinkt bei der Protokollierung hinterher. Es bietet kein zentralisiertes Protokollierungssystem, und hier kommt Loki ins Spiel.

Was ist Grafana Loki?

Grafana Loki ist ein mandantenfähiges Log-Aggregationssystem, das 2018 von Grafana gestartet und unter der Apache 2.0 Lizenz veröffentlicht wurde. Dieses System wurde entwickelt, indem es sich von Prometheus inspirieren ließ. Es wird hauptsächlich mit Cloud-Anbietern und mit Tools wie Prometheus und Grafana verwendet.

Loki ähnelt dem ELK/EFK-Stack, ist aber einfacher einzurichten und zu bedienen und verfügt über bessere Funktionen. Loki indiziert nicht den Inhalt des Protokolls, sondern Zeitstempel und eine Reihe von Bezeichnungen für einen Protokollstrom. Dadurch wird der Index kleiner, was die Abläufe vereinfacht und letztendlich die Kosten senkt.

Loki Vorteile

Nachfolgend finden Sie die Vorteile der Verwendung von Loki in Ihrem Stack:

  • Da Loki nur Metadaten indiziert, ist es sehr kosteneffizient. Die Ausführung von Indizes für die Volltextverarbeitung erfordert größere RAM-Instanzen, die sehr teuer sind. Die Speicherung von Protokollen auf Objekten, die wie S3 gespeichert werden, macht es ebenfalls sehr kostengünstig.
  • Loki unterstützt Multi-Tenancy durch die Verwendung von TenantID, so dass die Daten der Tenants separat gespeichert werden.
  • Sie können Loki lokal für kleine Operationen betreiben oder es für große Operationen einfach horizontal skalieren.
  • Es verwendet den Dynamo-Stil, um die Quorum-Konsistenz bei Lese- und Schreibvorgängen zu gewährleisten.
  • Es ist standardmäßig so konfiguriert, dass 3 Replikate der Protokolle vorhanden sind, um dem Risiko von Prozessabstürzen und abrupten Beendigungen, bei denen die Protokolle verloren gehen, zu begegnen. Ja, es würde einige zusätzliche Kosten verursachen, aber nicht so hoch, die Integrität der Daten ist wichtiger.
  • Einfach mit gängigen Tools wie Kubernetes, Prometheus und der Visualisierung in Grafana zu verbinden.

Loki-Architektur

loki architecture - geekflare

Die Loki-Architektur besteht aus drei Komponenten – Promtail, Loki und Grafana.

Promtail ist ein Agent, der auf jedem Knoten installiert werden muss, auf dem Ihre Anwendungen oder Dienste laufen. Die Hauptaufgabe von Promtail besteht darin, das Ziel zu erkennen, die von den Pods kommenden Lo-Streams mit Labels zu versehen und diese Protokolle an die Loki-Instanzen zu senden. Der Agent Promtail holt die Protokolle aus dem lokalen Dateisystem und sendet sie an den zentralen Server von Loki. Danach können Sie Ihre Protokolle mit Grafana abfragen.

Loki Anwendungsfälle

Nachfolgend finden Sie die gängigen Anwendungsfälle für den Einsatz eines Protokollierungssystems wie Loki.

  • Business Intelligence: Dies ist ein immerwährender Anwendungsfall, denn es kann immer sehr nützlich sein, aus Protokolldaten verwertbare Erkenntnisse zu gewinnen. Loki kann Ihnen dabei helfen, Protokolldaten zu verstehen und neue Strategien für das Unternehmenswachstum zu entwickeln. Zum Beispiel können Sie mit Hilfe von Protokolldaten eines Unternehmens die Konversionsraten eines Werbekanals ermitteln.
  • Überwachung: Prometheus wird in der Branche häufig zur Überwachung eingesetzt. Aber Sie können viele Dinge erkennen, wenn Sie Ihre Protokolle mit Tools wie Loki überwachen. Es kann Ihnen helfen, die Fehlerquoten auf Ihrer Website zu überwachen, indem es die Protokolle durchgeht und Warnmeldungen sendet, sobald ein Schwellenwert überschritten wird.
  • Fehlersuche und Fehlerbehebung: Loki kann dem DevOps-Team mit einigen schnellen Antworten helfen, z.B. wann die App abgestürzt ist, der Grund für den Absturz, der letzte Status vor dem Absturz, usw.
  • Cyber-Sicherheit: In den letzten Jahren haben Cyber-Attacken auf E-Commerce-Portale exponentiell zugenommen. Mit Hilfe von Loki können Sie die Protokolle überprüfen, um Bedrohungen, Probleme oder bösartige Aktivitäten im System Ihres Unternehmens zu erkennen. Auch wenn der Hack erfolgreich war, kann Loki für das Forensikteam hilfreich sein, um zu verstehen, was im Detail im System vor sich ging. Es wird ihnen dabei helfen, die Hacker zurückzuverfolgen.
  • Einhaltung von Vorschriften: Um den Branchenvorschriften zu entsprechen, müssen die Unternehmen ihre Audit-Protokolle bis zu 7 Jahre lang aufbewahren. Die lokalen Behörden können die Protokolle jederzeit überprüfen. Loki kann Ihre Audit-Protokolle sicher aufbewahren.

Installation von Loki und Promtail

Lassen Sie uns schnell herausfinden, wie Sie Protokolle auf Grafana installieren und visualisieren. In dieser Demonstration verwende ich die generische Konfiguration, die die Protokolle aus /var/log/*log abruft

Gehen Sie auf die Loki-Releases-Seite, scrollen Sie nach unten zu Assets, hier finden Sie mehrere Loki und Promtail Pakete. Laden Sie das Loki-Paket herunter, das zu Ihrem System passt. Laden Sie keine cli oder canary Loki Pakete herunter. Ich lade loki-linux-amd64.zip und promtail-linux-amd64.zip für mein Ubuntu-System herunter.

Nach dem Herunterladen entpacken Sie die Dateien von Loki und Promtail und legen sie in einem einzigen Verzeichnis ab.

geekflare@geekflare:~$ mkdir loki
geekflare@geekflare:~$ mv loki-linux-amd64 promtail-linux-amd64 loki
geekflare@geekflare:~$ cd loki/
geekflare@geekflare:~/loki$ ls
loki-linux-amd64 promtail-linux-amd64

Laden Sie nun die generische Konfigurationsdatei von Loki und Promtail herunter.

geekflare@geekflare:~/loki$ wget https://raw.githubusercontent.com/grafana/loki/master/cmd/loki/loki-local-config.yaml
--2021-04-30 12:00:51-- https://raw.githubusercontent.com/grafana/loki/master/cmd/loki/loki-local-config.yaml
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.111.133, 185.199.110.133, 185.199.109.133, ...
Verbindung zu raw.githubusercontent.com (raw.githubusercontent.com)|185.199.111.133|:443... hergestellt.
HTTP-Anfrage gesendet, erwarte Antwort... 200 OK
Länge: 1832 (1.8K) [text/plain]
Speichern in: 'loki-local-config.yaml'

loki-local-config.yaml 100%[===============================================================================================>] 1.79K --.-KB/s in 0s

2021-04-30 12:00:51 (16.6 MB/s) - 'loki-local-config.yaml' gespeichert [1832/1832]
geekflare@geekflare:~/loki$ wget https://github.com/grafana/loki/blob/main/clients/cmd/promtail/promtail-local-config.yaml
--2021-04-30 12:05:07-- https://github.com/grafana/loki/blob/main/clients/cmd/promtail/promtail-local-config.yaml
Auflösen von github.com (github.com)... 13.234.210.38
Verbindung zu github.com (github.com)|13.234.210.38|:443... hergestellt.
HTTP-Anfrage gesendet, warte auf Antwort... 200 OK
Länge: nicht spezifiziert [text/html]
Speichern in: 'promtail-local-config.yaml'

promtail-local-config.yaml [ <=> ] 109.16K --.-KB/s in 0.002s  

2021-04-30 12:05:08 (66.8 MB/s) - 'promtail-local-config.yaml' gespeichert [111779]
geekflare@geekflare:~/loki$ ls
loki-linux-amd64 loki-local-config.yaml promtail-linux-amd64 promtail-local-config.yaml

Um Loki zu starten, führen Sie den folgenden Befehl mit der Loki-Konfigurationsdatei aus. Dadurch wird Loki gestartet und die Loki-Protokolle werden im Terminal angezeigt.

geekflare@geekflare:~/loki$ ./loki-linux-amd64 -config.file=loki-local-config.yaml
level=info ts=2021-04-30T16:08:37.990311491Z caller=main.go:130 msg="Loki starten" version="(version=2.2.1, branch=HEAD, revision=babea82e)"
level=info ts=2021-04-30T16:08:37.990856871Z caller=server.go:229 http=[::]:3100 grpc=[::]:9096 msg="Server hört auf Adressen"
level=info ts=2021-04-30T16:08:37.991613443Z caller=shipper_index_client.go:100 msg="boltdb shipper im 0-Modus starten"
level=info ts=2021-04-30T16:08:37.992568288Z caller=mapper.go:38 msg="gemapptes Regelverzeichnis aufräumen" path=/tmp/loki/rules-temp
level=error ts=2021-04-30T16:08:37.992623632Z caller=mapper.go:42 msg="Verzeichnis rules kann nicht gelesen werden" path=/tmp/loki/rules-temp err="open /tmp/loki/rules-temp: no such file or directory"
level=info ts=2021-04-30T16:08:37.993520927Z caller=table_manager.go:171 msg="Tabellen hochladen"
level=info ts=2021-04-30T16:08:37.993941099Z caller=module_service.go:59 msg=initialising module=store
level=info ts=2021-04-30T16:08:37.994011839Z caller=module_service.go:59 msg=initialisiere Modul=Mitgliederliste-kv
level=info ts=2021-04-30T16:08:37.99412775Z caller=module_service.go:59 msg=initialising module=server
level=info ts=2021-04-30T16:08:37.994379648Z caller=module_service.go:59 msg=initialising module=ingester
level=info ts=2021-04-30T16:08:37.994415984Z caller=ingester.go:241 msg="Wiederherstellung vom Checkpoint"

Um Promtail zu starten, führen Sie den unten stehenden Befehl mit der Promtail-Konfigurationsdatei aus. Promtail ist erforderlich, um die Protokolle in Loki zu erhalten.

geekflare@geekflare:~/loki$ ./promtail-linux-amd64 -config.file=promtail-local-config.yaml
level=info ts=2021-04-30T16:35:52.775998059Z caller=server.go:229 http=[::]:9080 grpc=[::]:42557 msg="Server hört auf Adressen"
level=info ts=2021-04-30T16:35:52.776283661Z caller=main.go:112 msg="Starte Promtail" version="(version=2.2.1, branch=HEAD, revision=babea82e)"
level=info ts=2021-04-30T16:35:57.776226323Z caller=filetargetmanager.go:254 msg="Ziel hinzufügen" key="{job=\"varlogs\"}"
ts=2021-04-30T16:35:57.776902427Z caller=log.go:124 level=info msg="Gesucht /var/log/fontconfig.log - &{Offset:11055 Whence:0}"
level=info ts=2021-04-30T16:35:57.776983546Z caller=tailer.go:125 component=tailer msg="tail routine: started" path=/var/log/auth.log
level=info ts=2021-04-30T16:35:57.777009023Z caller=tailer.go:125 component=tailer msg="tail routine: started" path=/var/log/fontconfig.log
ts=2021-04-30T16:35:57.777094698Z caller=log.go:124 level=info msg="Gesucht /var/log/lastlog - &{Offset:0 Whence:0}"
ts=2021-04-30T16:35:57.777712594Z caller=log.go:124 level=info msg="Gesucht /var/log/apport.log - &{Offset:0 Whence:0}"
ts=2021-04-30T16:35:57.778200383Z caller=log.go:124 level=info msg="Gesucht /var/log/alternatives.log - &{Offset:456 Whence:0}"
ts=2021-04-30T16:35:57.780467419Z caller=log.go:124 level=info msg="Gesucht /var/log/syslog - &{Offset:56911 Whence:0}"
level=info ts=2021-04-30T16:35:57.780646032Z caller=tailer.go:125 component=tailer msg="tail routine: started" path=/var/log/kern.log
level=info ts=2021-04-30T16:35:57.781289004Z caller=filetargetmanager.go:254 msg="Adding target" key="{job=\"varlogs\"}"
level=info ts=2021-04-30T16:35:57.787770104Z caller=tailer.go:125 component=tailer msg="tail routine: started" path=/var/log/grafana/grafana.log
ts=2021-04-30T16:35:57.782276009Z caller=log.go:124 level=info msg="Gesucht /var/log/grafana/grafana.log - &{Offset:0 Whence:0}"

Log mit Loki und Grafana visualisieren

Grafana bietet integrierte Unterstützung für Loki. Loki ist bereits in den Datenquellen von Grafana enthalten.

Schritt 1: Gehen Sie zu Grafana Configurations und klicken Sie auf “Data Sources”.

grafana

Schritt 2: In Datenquellen können Sie die Quelle nach Name oder Typ suchen.

configuration

Schritt 3: Suchen Sie nach dem Namen Loki. Sie können sehen, dass diese Datenquelle bereits in Grafana vorhanden ist. Klicken Sie auf Auswählen.

add loki

Schritt 4: Geben Sie den Namen ein, den Sie der Datenquelle geben möchten, und tragen Sie http://localhost:3100 (ändern Sie dies in Server-IP, wenn Loki auf einem anderen Server als Grafana läuft) in die URL ein, da wir Loki auf Port 3100 gestartet haben.

loki data source

Klicken Sie auf die Schaltfläche Testen und Speichern am unteren Rand. Wenn Sie Loki richtig eingerichtet haben, erhalten Sie die unten stehende Meldung in einem grünen Kasten.

save and test

Schritt 5: Klicken Sie auf die Registerkarte Erkunden auf der linken Seite. Wählen Sie Loki aus dem Dropdown-Menü zur Auswahl der Datenquelle. Jetzt möchte ich die Aktivität der Grafana-Protokolle visualisieren. Dazu müssen Sie die Abfrage <em>{filename="/var/log/grafana/grafana.log"}</em> im Log Browser hinzufügen. Die grünen Balken unten sind Einträge von Ereignissen in der Protokolldatei.

grafana log

Sie können den Zeitbereich auswählen, für den die Visualisierung auf dem Dashboard erscheinen soll, und Sie können auch das Aktualisierungsintervall der Abfrage festlegen, nach dem die Abfrage erneut ausgeführt wird. Wenn Sie weitere Details zu den Protokollen sehen möchten, scrollen Sie nach unten und klicken Sie auf einen der Protokolleinträge, dann erhalten Sie alle möglichen Informationen zu diesem Protokoll.

detail log

Sieht schön aus, nicht wahr?

So, das war alles für den Anfang. Ich empfehle Ihnen dringend, sich das folgende Webinar-Video anzusehen, in dem die Beobachtbarkeit mit Loki erklärt wird.

Fazit

Ein verteiltes System besteht aus vielen Anwendungen oder Mikrodiensten, von denen jeder einzelne eine Unmenge von Protokollen hat. Sie benötigen eine kostengünstige Möglichkeit, die Protokolle zu sammeln, zu speichern und dann zu nutzen. Loki ist eine perfekte Lösung für solche Fälle. Tatsächlich können Sie durch die Integration von Loki in Ihre Produktionsumgebung rund 75 % Ihrer Protokollierungs- und Überwachungskosten einsparen.

Loki ist auch über die Grafana Cloud verfügbar. Probieren Sie es aus, wenn Sie den Installationsprozess nicht durchlaufen möchten.

Als nächstes lernen Sie Grafana Tempo kennen.