Loki-Konfiguration

DockerBeginner
Jetzt üben

Einführung

Willkommen zu diesem praktischen Lab zum Thema Loki-Konfiguration. Loki ist ein horizontal skalierbares, hochverfügbares, mandantenfähiges Log-Aggregationssystem, das von Prometheus inspiriert wurde. Es wurde entwickelt, um sehr kosteneffizient und einfach zu betreiben zu sein.

In diesem Lab konzentrieren wir uns auf den vollständigen, grundlegenden Workflow zum Sammeln und Anzeigen von Logs. Wir werden drei Schlüsselkomponenten verwenden:

  • Loki: Der Hauptserver, der für die Speicherung und Verarbeitung von Logs verantwortlich ist.
  • Promtail: Ein Agent, der lokale Log-Dateien erkennt und diese an eine Loki-Instanz sendet.
  • Grafana: Eine Visualisierungsplattform, mit der wir uns mit Loki verbinden, um unsere Logs zu erkunden und abzufragen.

Diese Laborumgebung hat die Loki- und Grafana-Container bereits für Sie gestartet. Ihre Aufgabe ist es, Promtail so zu konfigurieren und auszuführen, dass es Systemprotokolle an Loki sendet, und diese dann in Grafana zu visualisieren.

Promtail Docker Image für die Log-Erfassung ziehen

In diesem Schritt laden Sie das offizielle Docker-Image für Promtail herunter. Promtail ist der Agent, der für das Auffinden von Log-Dateien und das Senden ihres Inhalts an Loki verantwortlich ist. Wir werden es als Docker-Container ausführen, um unser Setup sauber und isoliert zu halten.

Führen Sie den folgenden Befehl in Ihrem Terminal aus, um das Promtail-Image von Docker Hub zu ziehen.

docker pull grafana/promtail

Sie sehen eine Ausgabe, die den Download-Fortschritt für jede Schicht des Images anzeigt. Nach Abschluss steht das Image auf Ihrem lokalen Rechner zur Verfügung.

Using default tag: latest
latest: Pulling from grafana/promtail
Digest: sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Status: Downloaded newer image for grafana/promtail
docker.io/grafana/promtail

Nachdem wir nun das Image haben, können wir im nächsten Schritt mit der Erstellung einer Konfigurationsdatei dafür fortfahren.

Erstellen von promtail.yml zum Scraping von Systemprotokollen

In diesem Schritt erstellen Sie eine Konfigurationsdatei für Promtail. Diese YAML-Datei teilt Promtail mit, wo sich der Loki-Server befindet und welche Log-Dateien er überwachen soll. Alle Ihre Arbeiten sollten im Verzeichnis ~/project durchgeführt werden.

Erstellen Sie zunächst mit dem nano-Editor eine neue Datei mit dem Namen promtail.yml.

nano promtail.yml

Kopieren Sie nun die folgende Konfiguration und fügen Sie sie in den nano-Editor ein.

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:
  - job_name: varlogs
    static_configs:
      - targets:
          - localhost
        labels:
          job: varlogs
          __path__: /var/log/*.log

Lassen Sie uns diese Konfiguration aufschlüsseln:

  • server: Konfiguriert den eigenen Webserver von Promtail, der in diesem Lab nicht verwendet wird.
  • positions: Gibt eine Datei an, in der Promtail den zuletzt gelesenen Ort in jeder Log-Datei aufzeichnet, damit er beim Neustart keine alten Logs erneut sendet.
  • clients: Definiert die Adresse der Loki-Instanz. Wir verwenden http://loki:3100, da sowohl Promtail als auch Loki im selben Docker-Netzwerk laufen und loki der Containername ist.
  • scrape_configs: Dies ist der Kernabschnitt. Wir definieren einen job namens varlogs, der alle Dateien im Verzeichnis /var/log/ durchsucht, die auf .log enden.

Nachdem Sie den Inhalt eingefügt haben, speichern Sie die Datei und beenden Sie nano, indem Sie Ctrl+X, dann Y und schließlich Enter drücken.

Promtail Container ausführen und auf Loki verweisen

In diesem Schritt starten Sie den Promtail-Container unter Verwendung der gerade erstellten Konfigurationsdatei. Der Befehl wird sowohl Ihre Konfigurationsdatei als auch das Log-Verzeichnis des Hosts in den Container einbinden (mounten).

Führen Sie den folgenden docker run-Befehl aus, um Promtail zu starten:

docker run -d --name promtail --network monitoring-net -v $(pwd)/promtail.yml:/etc/promtail/config.yml -v /var/log:/var/log grafana/promtail -config.file=/etc/promtail/config.yml

Hier ist eine Erklärung der Flags des Befehls:

  • -d: Führt den Container im Detached-Modus (im Hintergrund) aus.
  • --name promtail: Weist dem Container einen Namen zur einfachen Referenzierung zu.
  • --network monitoring-net: Verbindet den Container mit demselben Netzwerk wie Loki und Grafana.
  • -v $(pwd)/promtail.yml:/etc/promtail/config.yml: Bindet Ihre lokale promtail.yml an der erwarteten Stelle in den Container ein.
  • -v /var/log:/var/log: Bindet das /var/log-Verzeichnis des Hosts in den Container ein, damit Promtail die Log-Dateien lesen kann.
  • -config.file=/etc/promtail/config.yml: Teilt dem Promtail-Prozess innerhalb des Containers mit, welche Konfigurationsdatei er verwenden soll.

Nach Ausführung des Befehls gibt Docker die eindeutige ID des neuen Containers aus. Sie können mit dem Befehl docker ps überprüfen, ob der Container läuft.

docker ps

Sie sollten promtail, loki und grafana in der Liste der laufenden Container sehen.

CONTAINER ID   IMAGE                   COMMAND                  CREATED          STATUS          PORTS                                       NAMES
...            grafana/promtail        "/usr/bin/promtail -c…"   A few seconds ago   Up a few seconds   0.0.0.0:9080->9080/tcp                      promtail
...            grafana/grafana         "/run.sh"                About a minute ago  Up About a minute  0.0.0.0:8080->3000/tcp                      grafana
...            grafana/loki            "/usr/bin/loki -conf…"   About a minute ago  Up About a minute  0.0.0.0:3100->3100/tcp, 9095/tcp            loki

Loki als Datenquelle in Grafana hinzufügen

In diesem Schritt konfigurieren Sie Grafana so, dass es Loki als Datenquelle verwendet. Dadurch können Sie die Logs abfragen und visualisieren, die Promtail an Loki sendet.

Bitte befolgen Sie diese Anweisungen sorgfältig:

  1. Aufgrund der Reverse-Proxy-Einstellungen der LabEx VM wechseln Sie zur Desktop-Oberfläche, klicken Sie auf den Firefox-Browser in der oberen linken Ecke und geben Sie http://localhost:8080 in die Adressleiste ein. Sie sollten die Grafana-Anmeldeseite sehen.

  2. Melden Sie sich bei Grafana an. Verwenden Sie den Benutzernamen admin und das Passwort admin. Möglicherweise werden Sie aufgefordert, das Passwort zu ändern; für das Lab können Sie dies überspringen.

  3. Klicken Sie im linken Menü auf das Symbol Connections (sieht aus wie ein Stecker oder Verbinder).

  4. Klicken Sie auf der Seite "Connections" auf Data sources.

  5. Klicken Sie auf der Seite "Data sources" auf die Schaltfläche Add new data source.

  6. Wählen Sie aus der Liste der verfügbaren Datenquellentypen Loki aus.

  7. Geben Sie im Suchfeld Loki ein und klicken Sie auf die angezeigte Loki-Datenquellenoption.

  8. Sie werden zur Konfigurationsseite der Loki-Datenquelle weitergeleitet. Geben Sie im Feld URL unter dem Abschnitt HTTP die folgende Adresse ein:

    http://loki:3100

    Wir verwenden loki als Hostnamen, da die Grafana- und Loki-Container sich im selben Docker-Netzwerk (monitoring-net) befinden und Docker die DNS-Auflösung zwischen Containern im selben Netzwerk ermöglicht.

  9. Scrollen Sie nach unten und klicken Sie auf die Schaltfläche Save & test.

Add Loki as Data Source in Grafana

Wenn alles korrekt konfiguriert ist, sehen Sie ein grünes Banner mit der Meldung "Data source is working". Sie haben Grafana nun erfolgreich mit Ihrer Loki-Instanz verbunden.

Grundlegende Logs in der Grafana Explore-Ansicht abfragen

In diesem letzten Schritt verwenden Sie die "Explore"-Ansicht von Grafana, um eine einfache Abfrage auszuführen und die Logs anzuzeigen, die Promtail aus Ihrer Umgebung sendet.

  1. Navigieren Sie in der Grafana UI zur linken Seitenleiste und klicken Sie auf das Kompass-Symbol (Explore).

  2. Oben links auf der Explore-Seite sehen Sie ein Dropdown-Menü zur Auswahl der Datenquelle. Falls es noch nicht ausgewählt ist, wählen Sie Loki.

  3. Sie sehen ein Eingabefeld namens "Log browser". Hier schreiben Sie Ihre LogQL-Abfragen.

  4. Klicken Sie auf die Schaltfläche "Code", um zum Code-Editor zu wechseln.

  5. Geben Sie die folgende Abfrage in das Eingabefeld ein:

    {job="varlogs"}

    Diese LogQL-Abfrage wählt alle Log-Streams aus, die das Label job mit dem Wert varlogs haben. Dieses Label haben wir in unserer promtail.yml-Datei definiert.

  6. Drücken Sie Shift+Enter oder klicken Sie auf die blaue Schaltfläche Run query auf der rechten Seite des Bildschirms.

Query Basic Logs in Grafana Explore View

Nach Ausführung der Abfrage sollten im Hauptfenster unterhalb des Abfrage-Editors Logzeilen erscheinen. Sie sehen Logs aus verschiedenen Dateien in /var/log. Dies bestätigt, dass Promtail erfolgreich Logs erfasst und an Loki sendet und Grafana diese abfragen kann.

Zusammenfassung

Herzlichen Glückwunsch! Sie haben erfolgreich eine grundlegende Logging-Pipeline mit Loki, Promtail und Grafana konfiguriert.

In diesem Lab haben Sie gelernt, wie man:

  • Docker-Container für Log-Verarbeitungstools wie Promtail zieht und ausführt.
  • Eine Promtail-Konfigurationsdatei erstellt, um einen Loki-Server anzugeben und Log-Scraping-Jobs zu definieren.
  • Docker-Networking nutzt, um Dienste (Promtail, Loki und Grafana) zu verbinden.
  • Loki als Datenquelle innerhalb der Grafana-Benutzeroberfläche hinzufügt.
  • Eine einfache LogQL-Abfrage in der Explore-Ansicht von Grafana ausführt, um Ihre Logs zu finden und zu inspizieren.

Dieses Setup bildet die Grundlage für ein leistungsstarkes, skalierbares und kosteneffizientes Log-Aggregationssystem. Von hier aus könnten Sie fortgeschrittenere LogQL-Abfragen, Log-Parsing und das Einrichten von Alarmen (Alerts) in Grafana basierend auf dem Log-Inhalt erkunden.