Hallo, Habr-Bewohner! Im Vorfeld des Starts eines neuen Kurses haben wir fĂŒr euch eine Ăbersetzung eines interessanten Materials vorbereitet.
Dieser Artikel ist eine kurze EinfĂŒhrung in Loki. Das Loki-Projekt unterstĂŒtzt und zielt darauf ab, Logs zentral zu sammeln (von Servern oder Containern).
Die Hauptquelle der Inspiration fĂŒr Loki war die Idee, seine AnsĂ€tze fĂŒr das Log-Management anzuwenden:
- die Verwendung von Labels zur Speicherung von Daten
- der geringe Ressourcenverbrauch
Wir werden noch auf die Funktionsweise von Prometheus zurĂŒckkommen und einige Beispiele fĂŒr seine Verwendung im Kontext von Kubernetes anfĂŒhren.
Ein paar Worte zu Prometheus
Um zu verstehen, wie Loki funktioniert, ist es wichtig, einen Schritt zurĂŒckzutreten und sich ein wenig an Prometheus zu erinnern.
Eine der charakteristischen Eigenschaften von Prometheus ist das Sammeln von Metriken aus den Sammelpunkten (ĂŒber Exporteure) und deren Speicherung in einer TSDB (Time Series Data Base) unter HinzufĂŒgung von Metadaten in Form von Labels.
Wozu das Ganze?
In letzter Zeit ist Prometheus zum De-facto-Standard in der Welt der Container und Kubernetes geworden: Seine Installation ist sehr einfach, und im Kubernetes-Cluster gibt es von Anfang an einen Endpunkt fĂŒr Prometheus. Prometheus kann auch Metriken aus in Containern bereitgestellten Anwendungen extrahieren, wobei bestimmte Labels beibehalten werden. Daher ist das Monitoring von Anwendungen sehr einfach umzusetzen.
Leider gibt es bisher keine schlĂŒsselfertige Lösung fĂŒr das Log-Management, und ihr mĂŒsst eine Lösung fĂŒr euch finden:
- einen verwalteten Cloud-Service zur Zentralisierung von Logs (AWS, Azure oder Google)
- einen Ăberwachungsdienst "Monitoring as a Service" (zum Beispiel Datadog)
- oder die Erstellung eines eigenen Log-Sammeldienstes.
FĂŒr die dritte Option habe ich traditionell Elasticsearch verwendet, obwohl ich nicht immer damit zufrieden war (insbesondere wegen seiner KomplexitĂ€t und der schwierigen Konfiguration).
Loki wurde mit dem Ziel entworfen, die Implementierung gemÀà den folgenden Prinzipien zu erleichtern:
- einfach zu starten sein
- wenig Ressourcen verbrauchen
- eigenstÀndig ohne spezielle Wartung funktionieren
- als ErgÀnzung zu Prometheus dienen, um bei der Fehlersuche zu helfen.
Diese Einfachheit wird jedoch durch einige Kompromisse erreicht. Einer davon ist, dass der Inhalt nicht indiziert wird. Daher ist die Textsuche nicht sehr effektiv oder umfassend und ermöglicht keine Statistiken ĂŒber den Textinhalt. Aber da Loki das Ăquivalent zu grep und eine ErgĂ€nzung zu Prometheus sein möchte, ist das kein Nachteil.
Vorfalluntersuchung
Um besser zu verstehen, warum Loki keine Indizierung benötigt, wollen wir auf die Methode der Vorfalluntersuchung zurĂŒckblicken, die die Entwickler von Loki verwendet haben:

1 Alarm â 2 Dashboard â 3 Ad-hoc-Abfrage â 4 Protokollaggregation â 5 Verteiltes Tracing â 6 Beheben!
(1 Alarm â 2 Dashboard â 3 Ad-hoc-Abfrage â 4 Protokollaggregation â 5 Verteiltes Tracing â 6 Beheben!)
Die Idee ist, dass wir einen Alarm erhalten (Slack-Benachrichtigung, SMS usw.) und dann:
- die Grafana-Dashboards ansehen
- die Metriken der Dienste ansehen (z. B. in Prometheus)
- die Protokolle anzeigen (z. B. in Elasticsearch)
- vielleicht einen Blick auf die verteilten Traces werfen (Jaeger, Zipkin usw.)
- und schlieĂlich das ursprĂŒngliche Problem beheben.
Hier, im Fall von Grafana + Prometheus + Elasticsearch + Zipkin, mĂŒssen vier verschiedene Werkzeuge verwendet werden. Um die Zeit zu verkĂŒrzen, wĂ€re es gut, all diese Schritte mit einem Tool auszufĂŒhren: Grafana. Es ist erwĂ€hnenswert, dass dieser Ansatz zur Ermittlung in Grafana seit Version 6 implementiert ist. Somit ist es möglich, direkt aus Grafana auf die Daten von Prometheus zuzugreifen.

Der Explorer-Bildschirm ist zwischen Prometheus und Loki aufgeteilt
Auf diesem Bildschirm können Logs in Loki, die mit den Metriken von Prometheus verknĂŒpft sind, unter Verwendung des Konzeptes der Bildschirmteilung angesehen werden. Seit Version 6.5 ermöglicht Grafana die Verarbeitung der Trace-ID in den Protokollaufzeichnungen von Loki, um zu Ihren bevorzugten verteilten Tracing-Tools (Jaeger) zu navigieren.
Lokaler Loki-Test
Der einfachste Weg, Loki lokal zu testen, ist die Verwendung von docker-compose. Die docker-compose-Datei befindet sich im Loki-Repository. Das Repository kann mit folgendem Befehl abgerufen werden: git:
$ git clone https://github.com/grafana/loki.gitDann mĂŒssen Sie in das Verzeichnis production wechseln:
$ cd productionDanach können die neuesten Docker-Images abgerufen werden:
$ docker-compose pullSchlieĂlich wird der Loki-Stack mit folgendem Befehl gestartet:
$ docker-compose upArchitektur von Loki
Hier ist ein kleines Diagramm zur Architektur von Loki:

Prinzipien der Architektur von Loki
Der Web-Client startet Anwendungen auf dem Server, Promtail sammelt die 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 vorhandenen Komponenten anzuzeigen, fĂŒhren Sie den folgenden Befehl aus:
$ docker psIm Falle einer frisch installierten Docker-Umgebung sollte der Befehl das folgende 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_1Wir sehen die folgenden Komponenten:
- Promtail: ein Agent, der fĂŒr die Zentralisierung der Protokolle verantwortlich ist
- Grafana: ein bekanntes Tool fĂŒr Dashboards
- Loki: ein Datenzentralisierungsdaemon
Im Rahmen einer klassischen Infrastruktur (z. B. auf virtuellen Maschinen) sollte auf jeder Maschine ein Promtail-Agent bereitgestellt werden. Grafana und Loki können auf einer Maschine installiert werden.
Bereitstellung in Kubernetes
Die Installation der Loki-Komponenten in Kubernetes besteht aus Folgendem:
- DaemonSet zur Bereitstellung des Promtail-Agents auf jeder Maschine im Server-Cluster
- Bereitstellung (Deployment) von Loki
- und zuletzt â 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. Es kann aus dem GitHub-Repository des Projekts heruntergeladen werden. Es wird installiert, indem das Archiv entpackt wird, das Ihrer Architektur entspricht, und helm hinzugefĂŒgt wird zu $PATH.
Hinweis: Die Version 3.0.0 von Helm wurde kĂŒrzlich veröffentlicht. Da viele Ănderungen darin enthalten sind, wird dem Leser empfohlen, etwas zu warten, bevor er sie verwendet..
HinzufĂŒgen einer Quelle fĂŒr Helm
Der erste Schritt besteht darin, das Repository "loki" mit dem folgenden Befehl hinzuzufĂŒgen:
$ helm add loki https://grafana.github.io/loki/chartsDanach können Sie nach Paketen mit dem Namen "loki" suchen:
$ helm search lokiErgebnis:
loki/loki 0.17.2 v0.4.0 Loki: wie Prometheus, aber fĂŒr Protokolle.
loki/loki-stack 0.19.1 v0.4.0 Loki: wie Prometheus, aber fĂŒr Protokolle.
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 Protokollen und...Diese Pakete bieten folgende Funktionen:
- das Paket loki/loki entspricht nur dem Loki-Server
- das Paket loki/fluent-bit ermöglicht es Ihnen, einen DaemonSet bereitzustellen, der fluent-bit zur Protokollsammlung anstelle von Promtail verwendet
- das Paket loki/promtail enthÀlt einen Agenten zur Protokolldatensammlung
- das Paket loki/loki-stack, ermöglicht die gleichzeitige Bereitstellung von Loki zusammen mit Promtail.
Installation von Loki
Um Loki in Kubernetes bereitzustellen, fĂŒhren Sie den folgenden Befehl im Namespace "monitoring" aus:
$ helm upgrade --install loki loki/loki-stack --namespace monitoringUm auf der Festplatte zu speichern, fĂŒgen Sie den Parameter hinzu --set loki.persistence.enabled = true:
$ helm upgrade --install loki loki/loki-stack
--namespace monitoring
--set loki.persistence.enabled=trueHinweis: Wenn Sie Grafana gleichzeitig bereitstellen möchten, fĂŒgen Sie den Parameter hinzu
--set grafana.enabled = true
Beim AusfĂŒhren dieses Befehls sollten Sie die folgende Ausgabe erhalten:
LETZTER DEPLOYMENT: Di, 19. Nov 2019 15:56:54
NAMESPACE: monitoring
STATUS: DEPLOYED
RESSOURCEN:
==> v1/ClusterRole
NAME ALTER
loki-promtail-clusterrole 189d
…
HINWEISE:
Der Loki-Stack wurde in Ihrem Cluster bereitgestellt. Loki kann nun 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.Wenn wir den Zustand der Pods im Namespace âmonitoringâ betrachten, sehen wir, dass alles bereitgestellt wurde:
$ kubectl -n monitoring get pods -l release=lokiErgebnis:
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 24mAlle Pods sind gestartet. Jetzt ist es Zeit, einige Tests durchzufĂŒhren!
Verbindung zu Grafana
Um sich ĂŒber Kubernetes mit Grafana zu verbinden, mĂŒssen Sie einen Tunnel zu seinem Pod öffnen. Unten finden Sie den Befehl, um Port 3000 fĂŒr den Grafana-Pod zu öffnen:
$ kubectl -n port-forward monitoring svc/loki-grafana 3000:80Ein weiterer wichtiger Punkt ist die Wiederherstellung des Administratorpassworts von Grafana. Das Passwort wird im Geheimnis loki-grafana im Feld .data.admin-user im Base64-Format gespeichert.
Um es wiederherzustellen, mĂŒssen Sie den folgenden Befehl ausfĂŒhren:
$ kubectl -n monitoring get secret loki-grafana
--template '{{index .data "admin-password" | base64decode}}'; echoVerwenden Sie dieses Passwort zusammen mit dem Standard-Administrator-Konto (admin).
Festlegen der Datenquelle Loki in Grafana
Stellen Sie zunÀchst sicher, dass die Datenquelle Loki (Konfiguration / Datenquelle) erstellt wurde.
Hier ist ein Beispiel:

Beispiel fĂŒr die Konfiguration einer Datenquelle fĂŒr Loki
Durch Klicken auf âTestâ können Sie die Verbindung zu Loki ĂŒberprĂŒfen.
Anfragen an Loki stellen
Gehen Sie jetzt in Grafana zum Abschnitt âExploreâ. Beim Empfang von Logs von Containern fĂŒgt Loki Metadaten von Kubernetes hinzu. Somit wird es möglich, die Logs eines bestimmten Containers anzuzeigen.
Um beispielsweise die Logs des Containers promtail auszuwÀhlen, können Sie die folgende Anfrage verwenden: {container_name = "promtail"}.
Vergessen Sie auch nicht, die Datenquelle Loki auszuwÀhlen.
Diese Anfrage gibt die AktivitĂ€t der Container in folgender Form zurĂŒck:

Ergebnis der Anfrage in Grafana
HinzufĂŒgen zum Dashboard
Seit Grafana 6.4 ist es möglich, Loginformationen direkt auf dem Dashboard anzuzeigen. Danach kann der Benutzer schnell zwischen der Anzahl der Anfragen auf seiner Website und den Anwendungstraces wechseln.
Nachfolgend ein Beispiel eines Dashboards, das diese Interaktion implementiert:

Beispiel eines Dashboards mit Prometheus-Metriken und Loki-Protokollen
Die Zukunft von Loki
Ich begann im Mai/Juni mit der Verwendung von Loki in Version 0.1. Heute wurde bereits Version 1 sowie 1.1 und 1.2 veröffentlicht.
Man muss zugeben, dass Version 0.1 nicht besonders stabil war. Aber 0.3 zeigte bereits echte Anzeichen von Reife, und die folgenden Versionen (0.4, dann 1.0) verstÀrkten diesen Eindruck nur.
Nach 1.0.0 gibt es keine Ausreden mehr, dieses wunderbare Werkzeug nicht zu benutzen.
ZukĂŒnftige Verbesserungen sollten sich weniger auf Loki konzentrieren, sondern vielmehr auf seine Integration mit dem hervorragenden Grafana. TatsĂ€chlich gibt es in Grafana 6.4 bereits eine gute Integration mit Dashboards.
Grafana 6.5, das kĂŒrzlich veröffentlicht wurde, verbessert diese Integration weiter, indem es den Inhalt von Protokollen im JSON-Format automatisch erkennt.
Unten im Video finden Sie ein kleines Beispiel fĂŒr diesen Mechanismus:

Verwendung von Loki-Zeilen, die in Grafana angezeigt werden
Es wird möglich, eines der JSON-Felder zu verwenden, zum Beispiel fĂŒr:
- Links zu externen Werkzeugen
- Filtern von Protokollinhalten
Zum Beispiel können Sie auf traceId klicken, um zu Zipkin oder Jaeger zu gelangen.
Traditionell erwarten wir Ihre Kommentare und laden Sie ein zu , in dem wir ĂŒber die Entwicklungen in der DevOps-Branche im Jahr 2019 sprechen und mögliche Entwicklungsmöglichkeiten fĂŒr 2020 diskutieren.
Quelle: habr.com
