Loki – Protokollsammlung unter Verwendung des Prometheus-Ansatzes

Hallo, Habr-Bewohner! Im Vorfeld des Starts eines neuen Kurses „DevOps-Praktiken und Werkzeuge“ haben wir fĂŒr Sie eine interessante Übersetzung vorbereitet.

Dieser Artikel ist eine kurze EinfĂŒhrung in Loki. Das Projekt Loki wird von Grafana unterstĂŒtzt und zielt darauf ab, Protokolle zentral zu sammeln (von Servern oder Containern).

Die Hauptquelle der Inspiration fĂŒr Loki war Prometheus mit der Idee, seine AnsĂ€tze fĂŒr das Log-Management anzuwenden:

  • Verwendung von Labels zur Datenspeicherung
  • geringer Ressourcenverbrauch

Wir werden noch auf die Funktionsweisen von Prometheus zurĂŒckkommen und einige Beispiele fĂŒr seine Verwendung im Kontext von Kubernetes anfĂŒhren.

Ein paar Worte ĂŒber Prometheus

Um vollstĂ€ndig zu verstehen, wie Loki funktioniert, ist es wichtig, einen Schritt zurĂŒckzutreten und sich ein wenig an Prometheus zu erinnern.

Eine der herausragenden Eigenschaften von Prometheus ist das Abrufen von Metriken aus den Sammlungspunkten (ĂŒber Exporteure) und deren Speicherung in einer TSDB (Time Series Data Base, Datenbank fĂŒr Zeitreihen) mit dem HinzufĂŒgen von Metadaten in Form von Labels.

Warum ist das notwendig?

In letzter Zeit hat sich Prometheus als De-facto-Standard in der Welt der Container und von Kubernetes etabliert: Die Installation ist sehr einfach, und im Kubernetes-Cluster ist standardmĂ€ĂŸig ein Endpunkt fĂŒr Prometheus vorhanden. Prometheus kann auch Metriken aus Anwendungen abrufen, die in Containern bereitgestellt werden, wĂ€hrend bestimmte Labels beibehalten werden. Daher ist die Überwachung von Anwendungen sehr leicht umzusetzen.

Leider gibt es fĂŒr die Protokollverwaltung bisher keine „Plug-and-Play“-Lösung, und Sie mĂŒssen selbst eine Lösung finden:

  • verwalteter Cloud-Service zur Zentralisierung von Protokollen (AWS, Azure oder Google)
  • Überwachungsdienst „Monitoring as a Service“ (zum Beispiel Datadog)
  • Erstellung Ihres eigenen Protokollsammlungsdienstes.

FĂŒr die dritte Option habe ich traditionell Elasticsearch verwendet, obwohl ich nicht immer zufrieden war (insbesondere aufgrund seiner Schwere und der schwierigen Konfiguration).

Loki wurde entwickelt, um die Implementierung gemĂ€ĂŸ den folgenden Prinzipien zu vereinfachen:

  • einfach zu starten
  • wenig Ressourcen zu konsumieren
  • selbststĂ€ndig ohne spezielle Wartung zu arbeiten
  • als ErgĂ€nzung zu Prometheus zu dienen, um bei der Fehlersuche zu helfen

Diese Einfachheit wird jedoch durch einige Kompromisse erreicht. Einer davon besteht darin, keinen Inhalt zu indexieren. Daher ist die Textsuche nicht besonders effizient oder umfangreich und erlaubt keine statistischen Auswertungen des Textinhalts. Da Loki jedoch das Äquivalent von grep und eine ErgĂ€nzung zu Prometheus sein möchte, stellt dies keinen Nachteil dar.

Incident Investigation

Um besser zu verstehen, warum Loki keine Indizierung benötigt, lassen Sie uns auf die Methode der Vorfalluntersuchung zurĂŒckblicken, die die Entwickler von Loki verwendet haben:

Loki – Protokollsammlung unter Verwendung des Prometheus-Ansatzes
1 Alert → 2 Dashboard → 3 Adhoc Query → 4 Log Aggregation → 5 Distributed Tracing → 6 Fix!
(1 Benachrichtigung → 2 Dashboard → 3 Adhoc-Abfrage → 4 Protokollaggregation → 5 Verteilte Nachverfolgung → 6 Behebung!)

Die Idee ist, dass wir eine Art Alert (Slack-Benachrichtigung, SMS usw.) erhalten und dann:

  • die Grafana-Dashboards ĂŒberprĂŒfen
  • die Metriken der Dienste ansehen (z. B. in Prometheus)
  • die Protokolle einsehen (z. B. in Elasticsearch)
  • möglicherweise einen Blick auf die verteilten Traces werfen (Jaeger, Zipkin usw.)
  • und schließlich das ursprĂŒngliche Problem beheben.

Hier, im Fall des Stacks Grafana + Prometheus + Elasticsearch + Zipkin, wird es erforderlich sein, vier verschiedene Werkzeuge zu verwenden. Um die Zeit zu verkĂŒrzen, wĂ€re es sinnvoll, alle Schritte mit einem einzigen Werkzeug, Grafana, durchfĂŒhren zu können. Es ist erwĂ€hnenswert, dass ein solcher Ansatz zur Datenanalyse in Grafana seit Version 6 umgesetzt ist. Somit ist es möglich, direkt auf die Prometheus-Daten aus Grafana zuzugreifen.

Loki – Protokollsammlung unter Verwendung des Prometheus-Ansatzes
Der Explorer-Bildschirm ist zwischen Prometheus und Loki aufgeteilt.

Auf diesem Bildschirm können Protokolle in Loki, die mit den Metriken von Prometheus verbunden sind, im Splitscreen-Modus angezeigt werden. Seit Version 6.5 ermöglicht Grafana die Verarbeitung der Trace-ID in den Loki-LogeintrĂ€gen, um Links zu Ihren bevorzugten Werkzeugen fĂŒr die verteilte Nachverfolgung (Jaeger) zu erstellen.

Lokaler Loki-Test

Der einfachste Weg, Loki lokal zu testen, besteht darin, docker-compose zu verwenden. Die docker-compose-Datei befindet sich im Loki-Repository. Sie können das Repository mit dem folgenden Befehl abrufen: git:

$ git clone https://github.com/grafana/loki.git

Dann mĂŒssen Sie in das Produktionsverzeichnis wechseln:

$ cd production

Anschließend können Sie die neueste Version der Docker-Images abrufen:

$ docker-compose pull

Schließlich wird Loki mit folgendem Befehl gestartet:

$ docker-compose up

Architektur von Loki

Hier ist ein kleines Diagramm zur Architektur von Loki:

Loki – Protokollsammlung unter Verwendung des Prometheus-Ansatzes
Prinzipien der Architektur von Loki

Der Web-Client startet Anwendungen auf dem Server, Promtail sammelt Protokolle und sendet sie an Loki, der Web-Client sendet auch Metadaten an Loki. Loki aggregiert alles und ĂŒbertrĂ€gt es an Grafana.
Loki ist gestartet. Um die verfĂŒgbaren Komponenten anzuzeigen, fĂŒhren Sie den folgenden Befehl aus:

$ docker ps

Im Falle einer neu installierten Docker-Umgebung sollte der Befehl folgendes Ergebnis zurĂŒckgeben:

IMAGE               PORTS                  NAMES
grafana/promtail:                          production_promtail_1
grafana/grafana: m  0.0.0.0:3000->3000/tcp production_grafana_1
grafana/loki: late  80/tcp,0.0.0.0:3100... production_loki_1

Wir sehen folgende Komponenten:

  • Promtail: Agent, verantwortlich fĂŒr die Zentralisierung von Protokollen
  • Grafana: bekanntes Tool fĂŒr Dashboards
  • Loki: Daemon zur Zentralisierung von Daten

Im Rahmen einer klassischen Infrastruktur (z. B. auf virtuellen Maschinen) muss auf jeder Maschine der Promtail-Agent installiert sein. Grafana und Loki können auf einer Maschine installiert werden.

Deployment in Kubernetes

Die Installation der Loki-Komponenten in Kubernetes beinhaltet folgendes:

  • daemonSet zur Bereitstellung des Promtail-Agenten auf jeder Maschine im Server-Cluster
  • Bereitstellung (Deployment) von Loki
  • und schließlich — Bereitstellung von Grafana.

GlĂŒcklicherweise ist Loki als Helm-Paket verfĂŒgbar, was die Bereitstellung erleichtert.

Installation ĂŒber Helm

Helm sollte bereits auf Ihrem System installiert sein. Sie können es aus dem GitHub-Repository des Projekts herunterladen. Die Installation erfolgt durch Entpacken des entsprechenden Archivs fĂŒr Ihre Architektur und HinzufĂŒgen von Helm zu $PATH.

Hinweis: Die Version 3.0.0 von Helm wurde kĂŒrzlich veröffentlicht. Da es viele Änderungen gab, wird den Lesern empfohlen, etwas zu warten, bevor sie es verwenden..

HinzufĂŒgen einer Quelle fĂŒr Helm

Der erste Schritt besteht darin, das “loki”-Repository mit dem folgenden Befehl hinzuzufĂŒgen:

$ helm add loki https://grafana.github.io/loki/charts

Nach diesem Schritt können Sie nach Paketen mit dem Namen “loki” suchen:

$ helm search loki

Das Ergebnis:

loki/loki       0.17.2 v0.4.0 Loki: wie Prometheus, aber fĂŒr Logs.
loki/loki-stack 0.19.1 v0.4.0 Loki: wie Prometheus, aber fĂŒr Logs.
loki/fluent-bit 0.0.2  v0.0.1 Verwendet das fluent-bit Loki Go-Plugin fĂŒr...
loki/promtail   0.13.1 v0.4.0 Verantwortlich fĂŒr das Sammeln von Logs und...

Diese Pakete haben folgende Funktionen:

  • Paket loki/loki entspricht nur dem Loki-Server
  • Paket loki/fluent-bit ermöglicht Ihnen die Bereitstellung eines DaemonSets mit fluent-bit zum Sammeln von Logs anstelle von Promtail
  • Paket loki/promtail enthĂ€lt den Log-Datei-Sammlungsagenten
  • Paket loki/loki-stack, ermöglicht es, Loki zusammen mit Promtail bereitzustellen.

Loki installieren

Um Loki in Kubernetes bereitzustellen, fĂŒhren Sie den folgenden Befehl im Namensraum „monitoring“ aus:

$ helm upgrade --install loki loki/loki-stack --namespace monitoring

Um die Speicherung auf der Festplatte zu aktivieren, fĂŒgen Sie das Argument hinzu --set loki.persistence.enabled=true:

$ helm upgrade --install loki loki/loki-stack 
              --namespace monitoring 
              --set loki.persistence.enabled=true

Hinweis: Wenn Sie Grafana gleichzeitig bereitstellen möchten, fĂŒgen Sie das Argument hinzu --set grafana.enabled=true

Wenn Sie diesen Befehl ausfĂŒhren, sollten Sie folgende Ausgabe erhalten:

LETZTE BEREITSTELLUNG: Di, 19. Nov 2019 15:56:54
NAMESPACE: monitoring
STATUS: BEREITGESTELLT
RESSOURCEN:
==> v1/ClusterRole
NAME ALTER
loki-promtail-clusterrole 189d
…
HINWEISE:
Der Loki-Stack wurde in Ihrem Cluster bereitgestellt. Loki kann jetzt als Datenquelle in Grafana hinzugefügt werden.
Siehe <a href="http://docs.grafana.org/features/datasources/loki/">http://docs.grafana.org/features/datasources/loki/</a> für weitere Details.

Schauen wir uns den Status der Pods im Namensraum „monitoring“ an, sehen wir, dass alles bereitgestellt ist:

$ kubectl -n monitoring get pods -l release=loki

Das Ergebnis:

NAME                   READY  STATUS   RESTARTS  AGE
loki-0                 1/1    Running  0         147m
loki-promtail-9zjvc    1/1    Running  0         3h25m
loki-promtail-f6brf    1/1    Running  0         11h
loki-promtail-hdcj7    1/1    Running  0         3h23m
loki-promtail-jbqhc    1/1    Running  0         11h
loki-promtail-mj642    1/1    Running  0         62m
loki-promtail-nm64g    1/1    Running  0         24m

Alle Pods laufen. Jetzt ist es an der Zeit, einige Tests durchzufĂŒhren!

Verbindung zu Grafana

Um sich mit Grafana unter Kubernetes zu verbinden, mĂŒssen Sie einen Tunnel zu seinem Pod öffnen. Unten steht der Befehl zum Öffnen des Ports 3000 fĂŒr den Grafana-Pod:

$ kubectl -n port-forward monitoring svc/loki-grafana 3000:80

Ein weiterer wichtiger Punkt ist die Notwendigkeit, das Passwort des Grafana-Administrators zurĂŒckzusetzen. Das Passwort wird im Geheimen aufbewahrt. loki-grafana im Feld .data.admin-user im base64-Format.

Um es zurĂŒckzusetzen, fĂŒhren Sie den folgenden Befehl aus:

$ kubectl -n monitoring get secret loki-grafana 
 --template '{{index .data "admin-password" | base64decode}}'; echo

Verwenden Sie dieses Passwort zusammen mit dem Standard-Administratorkonto (admin).

Festlegung der Loki-Datenquelle in Grafana

Stellen Sie zunÀchst sicher, dass eine Loki-Datenquelle erstellt wurde (Konfiguration / Datenquelle).
Hier ein Beispiel:

Loki – Protokollsammlung unter Verwendung des Prometheus-Ansatzes
Beispiel fĂŒr die Konfiguration einer Loki-Datenquelle

Durch Klicken auf "Test" können Sie die Verbindung zu Loki ĂŒberprĂŒfen.

Anfragen an Loki stellen

Gehen Sie nun in Grafana zum Bereich „Erkunden“. Beim Empfang von Protokollen von Containern fĂŒgt Loki Metadaten aus Kubernetes hinzu. So wird es möglich, die Protokolle eines bestimmten Containers zu betrachten.

Zum Beispiel kann der folgende Befehl verwendet werden, um die Protokolle des Containers promtail auszuwÀhlen: {container_name = "promtail"}.
Vergessen Sie hier auch nicht, die Datenquelle Loki auszuwÀhlen.

Diese Anfrage gibt die AktivitĂ€ten der Container in folgendem Format zurĂŒck:

Loki – Protokollsammlung unter Verwendung des Prometheus-Ansatzes
Abfrageergebnis in Grafana

HinzufĂŒgen zum Dashboard

Mit Grafana 6.4 können Sie Protokollinformationen direkt im Dashboard anzeigen. Dadurch kann der Benutzer schnell zwischen der Anzahl der Anfragen auf seiner Website und den Anwendungstraces wechseln.

Hier ist ein Beispiel-Dashboard, das diese Interaktion umsetzt:

Loki – Protokollsammlung unter Verwendung des Prometheus-Ansatzes
Beispiel eines Dashboards mit Prometheus-Metriken und Loki-Logs

Die Zukunft von Loki

Ich begann, Loki im Mai/Juni mit Version 0.1 zu verwenden. Heute ist bereits Version 1, sogar 1.1 und 1.2 veröffentlicht worden.

Es muss anerkannt werden, dass Version 0.1 nicht stabil genug war. Aber 0.3 zeigte bereits echte Anzeichen von Reife, und die folgenden Versionen (0.4, dann 1.0) verstÀrkten diesen Eindruck nur noch.

Nach 1.0.0 gibt es keine Entschuldigung mehr, dieses großartige Tool nicht zu verwenden.

ZukĂŒnftige Verbesserungen sollten sich nicht auf Loki, sondern vielmehr auf die Integration mit dem hervorragenden Grafana konzentrieren. TatsĂ€chlich gibt es in Grafana 6.4 bereits eine gute Integration fĂŒr Dashboards.

Grafana 6.5, das kĂŒrzlich veröffentlicht wurde, verbessert diese Integration noch weiter, indem es den Inhalt der Logs im JSON-Format automatisch erkennt.

Im folgenden Video sehen Sie ein kleines Beispiel dieses Mechanismus:

Loki – Protokollsammlung unter Verwendung des Prometheus-Ansatzes
Anzeige von Loki-Strings in Grafana

Es wird möglich, eines der JSON-Felder zu verwenden, z. B. fĂŒr:

  • Links zu einem externen Tool
  • Filtern von Protokollinhalten

Sie können beispielsweise auf traceId klicken, um zu Zipkin oder Jaeger zu gelangen.

Traditionell erwarten wir Ihre Kommentare und laden Sie ein zu einem offenen Webinar, in dem wir darĂŒber sprechen, wie sich die DevOps-Branche im Jahr 2019 entwickelt hat und mögliche Entwicklungswege fĂŒr 2020 diskutieren.

Quelle: habr.com

Erwerben Sie zuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz, VPS VDS-Server đŸ”„ Kaufen Sie zuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster