Logging in Kubernetes: EFK gegen PLG

Logging in Kubernetes: EFK gegen PLG

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:

Logging in Kubernetes: EFK gegen PLG

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 hunderte von verschiedenen Erweiterungen, 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.

Logging in Kubernetes: EFK gegen PLG

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

Logging in Kubernetes: EFK gegen PLG

Installation

Die Details können hier eingesehen werden hier, ich werde das Helm-Chart verwenden:

$ helm install efk-stack stable/elastic-stack --set logstash.enabled=false --set fluentd.enabled=true --set fluentd-elastics

PLG-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.

Logging in Kubernetes: EFK gegen PLG

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.

Logging in Kubernetes: EFK gegen PLG

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:

Logging in Kubernetes: EFK gegen PLG

Und hier ist die Beschreibung (Mikrodienstarbeit):

Logging in Kubernetes: EFK gegen PLG

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.

Logging in Kubernetes: EFK gegen PLG

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 (und in der dritten Version! 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=false

Nachfolgend 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.

Logging in Kubernetes: EFK gegen PLG

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 hier, 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 Methoden zur Trennung von Kunden: ein separater Index fĂŒr jeden Kunden, clientbasierte Routing, einzigartige Kundenfelder, Suchfilter. In Loki gibt es Support in Form des HTTP-Headers X-Scope-OrgID.

Kosten

Loki ist wirtschaftlich sehr effizient, da er keine Daten, sondern nur Metadaten indiziert. Dadurch wird Speicherplatz 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 des Schulungszentrums Slurm — Intensivkurse, Video-Kurse und betriebliche Schulungen von praktizierenden Fachleuten (Kubernetes, DevOps, Docker, Ansible, Ceph, SRE, Agile)

Quelle: habr.com

ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server đŸ”„ ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server - ProHoster