
Monitoring ist ein Ă€uĂerst wichtiger Bestandteil der wachsenden Cloud-Lösungen, da die KomplexitĂ€t verteilte Systeme zunimmt. Es ist notwendig, ihr Verhalten zu verstehen. Skalierbare Tools sind erforderlich, um Daten aus allen Diensten zu sammeln und Fachleuten eine einheitliche Schnittstelle fĂŒr Performance-Analysen, Fehlermeldungen, VerfĂŒgbarkeit und Protokolle bereitzustellen.
Diese Tools mĂŒssen effizient und leistungsstark sein. In diesem Artikel werden wir zwei beliebte Technologiestacks untersuchen: EFK (Elasticsearch) und PLG (Loki) sowie ihre Architekturen und Unterschiede erlĂ€utern.
EFK-Stack
Vielleicht haben Sie bereits von dem sehr beliebten ELK oder EFK gehört. Der Stack besteht aus mehreren einzelnen Komponenten: Elasticsearch (Objektspeicher), Logstash oder FluentD (Sammlung und Aggregation von Protokollen) und Kibana zur Visualisierung.
Ein typisches Arbeitsdiagramm sieht so aus:

Elasticsearch â ein verteiltes Objektspeicher mit Echtzeit-Suche und -Analyse. Eine hervorragende Lösung fĂŒr teilweise strukturierte Daten, wie Protokolle. Informationen werden in Form von JSON-Dokumenten gespeichert, in Echtzeit indexiert und ĂŒber die Knoten des Clusters verteilt. Es wird ein invertierter Index verwendet, der alle einzigartigen Wörter und die entsprechenden Dokumente fĂŒr die Volltextsuche enthĂ€lt, die wiederum auf der Suchmaschine Apache Lucene basiert.
FluentD â ist ein Datensammler, der die Daten bei ihrer Sammlung und Nutzung vereinheitlicht. Er versucht, die Daten so weit wie möglich in JSON zu strukturieren. Seine Architektur ist erweiterbar, es gibt mehr als , die von der Community fĂŒr alle Lebenslagen unterstĂŒtzt werden.
Kibana â ein Visualisierungstool fĂŒr Daten in Elasticsearch mit verschiedenen zusĂ€tzlichen Funktionen, wie Zeitreihenanalysen, Grafiken, maschinellem Lernen und mehr.
Architektur von Elasticsearch
Die Daten des Elasticsearch-Clusters werden ĂŒber alle seine Knoten verteilt gespeichert. Der Cluster besteht aus mehreren Knoten zur Verbesserung der VerfĂŒgbarkeit und StabilitĂ€t. Jeder Knoten kann alle Rollen des Clusters ausfĂŒhren, aber in groĂen und skalierbaren Bereitstellungen werden den Knoten in der Regel spezifische Aufgaben zugewiesen.
Typen von Clusterknoten:
- Master-Knoten â verwaltet den Cluster, mindestens drei nötig, wobei einer immer aktiv ist;
- Datenknoten â speichert indexierte Daten und fĂŒhrt verschiedene Aufgaben damit aus;
- Ingest-Knoten â organisiert Pipelines zur Datenverarbeitung vor der Indizierung;
- Koordinierende Knoten â Routing von Anfragen, Reduzierung der Suchverarbeitungsphase, Koordination der massenhaften Indizierung;
- Alarmierungsknoten â Start von Benachrichtigungsaufgaben;
- Machine-Learning-Knoten â Verarbeitung von Aufgaben des maschinellen Lernens.
Im folgenden Diagramm ist dargestellt, wie Daten gespeichert und zwischen Knoten repliziert werden, um eine höhere DatenverfĂŒgbarkeit zu erreichen.

Die Daten jeder Replik werden in einem invertierten Index gespeichert, das folgende Schema zeigt, wie das geschieht:

Installation
Die Details können hier eingesehen werden , ich werde das Helm-Chart verwenden:
$ helm install efk-stack stable/elastic-stack --set logstash.enabled=false --set fluentd.enabled=true --set fluentd-elasticsPLG-Stack
Es ist nicht ĂŒberraschend, wenn Sie dieses Akronym nicht finden können, denn es ist besser bekannt als Grafana Loki. Jedenfalls gewinnt dieser Stack an PopularitĂ€t, da er durch technische Lösungen ĂŒberzeugt. Möglicherweise haben Sie bereits von Grafana gehört, dem beliebten Visualisierungstool. Ihre Entwickler haben, inspiriert von Prometheus, Loki entwickelt, ein horizontal skalierbares, leistungsstarkes Protokollaggregationssystem. Loki indiziert nur die Metadaten, nicht die Protokolle selbst, was es einfach zu bedienen und wirtschaftlich macht.
Promtail â Agent zur Ăbermittlung von Protokollen aus dem Betriebssystem an den Loki-Cluster. Grafana â Visualisierungstool basierend auf den Daten aus Loki.

Loki ist nach den gleichen Prinzipien wie Prometheus aufgebaut und eignet sich daher hervorragend zur Speicherung und Analyse von Kubernetes-Protokollen.
Architektur von Loki
Loki kann sowohl im Modus eines einzelnen Prozesses als auch in Form mehrerer Prozesse betrieben werden, was horizontales Scaling ermöglicht.

Es kann sowohl als monolithische Anwendung als auch als Mikrodienst betrieben werden. Der Betrieb in einem einzigen Prozess kann nĂŒtzlich sein fĂŒr die lokale Entwicklung oder fĂŒr geringfĂŒgiges Monitoring. FĂŒr industrielle Implementierungen und skalierbare Lasten wird empfohlen, die Mikrodienstarbeit zu verwenden. Die Wege fĂŒr das Schreiben und Lesen von Daten sind getrennt, sodass es fĂŒr spezifische Anforderungen fein abgestimmt und skaliert werden kann.
Lassen Sie uns die Architektur des Protokollsammlungssystems ohne Detailierungsgrad ansehen:

Und hier ist die Beschreibung (Mikrodienstarbeit):

Bausteine:
Promtail â ein Agent, der an Knoten (in Form von Dienstpaketen) installiert wird. Er erfasst Protokolle von Aufgaben und ruft die Kubernetes-API auf, um Metadaten zu erhalten, mit denen die Protokolle gekennzeichnet werden. AnschlieĂend sendet er das Protokoll an den Hauptdienst Loki. FĂŒr die Zuordnung von Metadaten gelten die gleichen Regeln fĂŒr die Kennzeichnung wie in Prometheus.
Distributor â ein Verteilungsdienst, der als Puffer arbeitet. Um Millionen von DatensĂ€tzen zu verarbeiten, bĂŒndelt er eingehende Daten und komprimiert sie blockweise, wĂ€hrend sie ankommen. Mehrere DatenempfĂ€nger arbeiten gleichzeitig, aber Protokolle, die zu einem einzigen Eingabestrom gehören, mĂŒssen fĂŒr alle seine Blöcke nur in einem von ihnen erscheinen. Dies ist in Form eines EmpfĂ€nger-Rings und sequenzieller Hashierung organisiert. Zur Fehlertoleranz und Redundanz geschieht dies n Mal (3, wenn nicht konfiguriert).
Ingester â ein Empfangsdienst. Datenblöcke kommen komprimiert mit hinzugefĂŒgten Protokollen. Sobald ein Block eine ausreichende GröĂe erreicht hat, wird der Block in die Datenbank zurĂŒckgeschrieben. Die Metadaten gehen in den Index, wĂ€hrend die Daten des Blocks mit den Protokollen in Chunks gelangen (normalerweise ist dies ein objektiertes Speichersystem). Nach dem ZurĂŒckschreiben erstellt der EmpfĂ€nger einen neuen Block, in den neue DatensĂ€tze hinzugefĂŒgt werden.

Index â Datenbanken wie DynamoDB, Cassandra, Google BigTable usw.
Chunks â komprimierte Protokollblöcke, die normalerweise in einem Objektspeicher wie S3 gespeichert werden.
Querier â der Leseweg, der die gesamte Arbeit im Hintergrund erledigt. Er betrachtet den Zeitbereich und die Labels, schaut dann in den Index, um Ăbereinstimmungen zu finden. Danach liest er die Datenblöcke und filtert sie, um ein Ergebnis zu erhalten.
Und jetzt sehen wir uns alles in Aktion an.
Installation
Um es in Kubernetes zu installieren, ist es am einfachsten, helm zu verwenden. Wir gehen davon aus, dass Sie es bereits installiert und konfiguriert haben ( Anm. des Ăbersetzers)
Wir fĂŒgen das Repository hinzu und installieren den Stack.
$ helm repo add loki https://grafana.github.io/loki/charts
$ helm repo update
$ helm upgrade --install loki loki/loki-stack --set grafana.enabled=true,prometheus.enabled=true,prometheus.alertmanager.persistentVolume.enabled=false,prometheus.server.persistentVolume.enabled=falseNachfolgend ein Beispiel fĂŒr ein Dashboard, das Daten aus Prometheus fĂŒr die Metriken Etcd und Loki fĂŒr die Protokolle von Etcd-Pods anzeigt.

Und jetzt lassen Sie uns die Architektur beider Systeme besprechen und ihre Funktionen vergleichen.
Vergleich
Abfragesprache
In Elasticsearch wird Query DSL und die Lucene-Abfragesprache verwendet, die die Möglichkeit einer Volltextsuche bietet. Dies ist eine etablierte, leistungsstarke Suchmaschine mit umfassender UnterstĂŒtzung fĂŒr Operatoren. Damit kann nach Kontext gesucht und nach Relevanz sortiert werden.
Auf der anderen Seite des Rings steht LogQL, das in Loki verwendet wird und der Nachfolger von PromQL (Prometheus-Abfragesprache) ist. Es nutzt Protokoll-Tags zur Filterung und Auswahl von Protokolldaten. Einige Operatoren und Arithmetik können wie beschrieben verwendet werden , aber in Bezug auf Möglichkeiten hinkt es hinter der Elastic-Sprache hinterher.
Da die Abfragen in Loki mit Tags verbunden sind, lassen sie sich leicht mit Metriken verknĂŒpfen, was die Organisation des operativen Monitorings erleichtert.
Skalierbarkeit
Beide Stacks sind horizontal skalierbar, aber bei Loki ist das einfacher, da er separate Lese- und Schreibpfade fĂŒr Daten hat und eine Microservice-Architektur verwendet. Loki kann an Ihre Besonderheiten angepasst werden und kann fĂŒr sehr groĂe Mengen an Protokolldaten verwendet werden.
Multi-Tenancy
Die Multi-Tenancy des Clusters ist ein allgemeines Thema zur Reduzierung der OPEX, beide Stacks bieten Multi-Tenancy. FĂŒr Elasticsearch gibt es mehrere zur Trennung von Kunden: ein separater Index fĂŒr jeden Kunden, clientbasierte Routing, einzigartige Kundenfelder, Suchfilter. In Loki gibt es in Form des HTTP-Headers X-Scope-OrgID.
Kosten
Loki ist wirtschaftlich sehr effizient, da er keine Daten, sondern nur Metadaten indiziert. Dadurch wird und Arbeitsspeicher (Cache) eingespart, da Objektspeicher gĂŒnstiger ist als Blockspeicher, der in Elasticsearch-Clustern verwendet wird.
Fazit
Der EFK-Stack kann fĂŒr verschiedene Zwecke eingesetzt werden und bietet eine maximale FlexibilitĂ€t sowie eine multifunktionale BenutzeroberflĂ€che in Kibana fĂŒr Analysen, Visualisierungen und Abfragen. Er kann zusĂ€tzlich durch Funktionen des maschinellen Lernens verbessert werden.
Der Loki-Stack ist in der Kubernetes-Ecosystem aufgrund des Mechanismus zur Erkennung von Metadaten nĂŒtzlich. Es ist einfach möglich, Daten fĂŒr die zeitbasierte Ăberwachung in Grafana und Protokollen zuzuordnen.
Wenn es um Kosten und langfristige Speicherung von Protokollen geht, ist Loki eine hervorragende Wahl fĂŒr den Einstieg in Cloud-Lösungen.
Es gibt mehr Alternativen auf dem Markt â einige davon könnten besser fĂŒr Sie sein. Zum Beispiel gibt es fĂŒr GKE die Stackdriver-Integration, die eine hervorragende Lösung fĂŒr das Monitoring bietet. Wir haben sie in dieser Analyse nicht berĂŒcksichtigt.
Links:
Der Artikel wurde fĂŒr Habr von Mitarbeitern â Intensivkurse, Video-Kurse und betriebliche Schulungen von praktizierenden Fachleuten (Kubernetes, DevOps, Docker, Ansible, Ceph, SRE, Agile)
Quelle: habr.com
