Blog
Skalierbare Protokollanalyse in der Cloud mit Loki

Protokolle können viele nützliche Informationen über die Umgebung und den Status der Anwendung liefern und sollten Teil unseres Monitoring-Stacks sein. Wir werden erörtern, wie nur mit Protokollen angereicherte Metriken wertvolle Quellen für die Wahrheit der Plattform sind, und dann werden wir über Beobachtbarkeit sprechen, die der Schlüssel zur Schaffung eines stabilen, effizienten und kontinuierlich arbeitenden Dienstes in jeder Umgebung ist. Dies ist der Schlüssel, um unsere Plattform vollständig beobachtbar zu machen.
Observabilität ist DevOps sehr ähnlich. Sie ist nicht nur auf die Technologie beschränkt, sondern umfasst auch die Organisationskultur und den Ansatz. Außerdem ist das Konzept der Beobachtbarkeit ein wichtiger Bestandteil des DevOps-Ansatzes, denn wie beschrieben, beschränken sich die Ziele der Überwachung nicht auf das Sammeln und Verarbeiten von Protokollen und Metriken. Sie sollte Informationen über ihren Zustand liefern, um sie beobachtbar zu machen. Das ist es, was wir
Lassen Sie uns einen Blick auf eine Lösung werfen, die für Kubernetes-native Software entwickelt wurde und die wir problemlos auf jeder Cloud- oder On-Premise-Infrastruktur installieren können.
Verwaltete vs. selbstgehostete Lösungen
Die erste Frage, die sich stellt, wenn es um die Nutzung der öffentlichen Cloud geht, ist die nach der richtigen Lösung: ein vollständig automatisierter Cloud-Service, der von einem Cloud-Service bereitgestellt wird, oder selbst verwaltete Anwendungen. Jeder der wichtigsten öffentlichen Cloud-Anbieter bietet eine eigene Lösung für die Erfassung und Analyse von Protokollen unserer Anwendungen und Infrastruktur. Google Cloud hat seine Logging-Funktion; AWS CloudWatch Logs und Microsoft Azure - Azure Monitor. Auf den ersten Blick sieht das großartig aus. Es wird selbst verwaltet, wir müssen uns keine Gedanken über die Skalierbarkeit machen - und wir können es problemlos in jeden Cloud-Service oder in unsere eigenen Anwendungen integrieren. Leider bietet ein solcher Ansatz nicht allzu viel Freiheit in Bezug auf die Konfiguration und kann in vielen Fällen recht hohe Kosten verursachen.
Hier kommen selbstverwaltete Tools zur Analyse von Protokollen ins Spiel. Das beliebteste ist Elastic Stack, aber es gibt auch einige großartige Alternativen. Die interessanteste, die wir in mehreren Projekten für verschiedene Kunden bei GetInData einsetzen, ist Loki von Grafana, ganz zu schweigen von Graylog, DataDog, LogDNA und Sumo Logic.
Das zweite Thema ist die Anzahl der Protokolle, wie viele Protokolle erstellt wurden, wie viele wir in unserer Plattform benötigen und die Perspektive des Systems. Es ist notwendig, die Infrastruktur zu planen, jede Protokollpipeline zu konfigurieren und die Kosten abzuschätzen - der letzte Punkt ist besonders wichtig, wenn Sie sich für Cloud Managed Services entscheiden.
Das dritte Thema ist die Visualisierung und Alarmierung.
Um diesen Teil des Artikels zusammenzufassen, lassen Sie uns die folgenden Bereiche analysieren:
- Anzahl und Größe der qlogs, die an das System gesendet werden
- Können wir alle Protokolle an der Quelle filtern (z.B. nicht alle Protokolle auf der Ebene INFO senden), um die Anzahl der gesendeten Protokolle zu reduzieren?
- Hohe Verfügbarkeit des Systems
- Das Alter der Daten, für die wir Abfragen durchführen möchten.
- Die Dauer, die wir für die Speicherung dieser Protokolle benötigen.
- Können wir unser aktuelles Visualisierungstool verwenden oder müssen wir eine zusätzliche Anwendung installieren?
- Wie können wir den Zugriff auf die Protokolle verwalten?
- Wie können wir Warnmeldungen basierend auf dem Inhalt der Protokolle bereitstellen?

Anwendungsfall: Grafana Loki in der Cloud
Loki ist ein horizontal skalierbares, hochverfügbares, mandantenfähiges System zur Aggregation von Protokollen nach dem Vorbild von Prometheus. Es wurde so konzipiert, dass es sehr kosteneffizient und einfach zu bedienen ist. Es indiziert nicht den Inhalt der Protokolle, sondern eine Reihe von Kennzeichnungen für jeden Protokollstrom. Das Projekt wurde 2018 gestartet und von Grafana Labs entwickelt. Wie Sie vielleicht erwarten, können wir Loki-Daten in Grafana abfragen, was sehr nützlich ist.

Derzeit gibt es eine neue Version - 2.2.0 - und wir können feststellen, dass die Entwicklung sehr schnell voranschreitet und neue Funktionen und Verbesserungen hinzugefügt werden, was bei der Auswahl des richtigen Tools entscheidend ist.
Aufnahme von Protokollen
Loki ist für die Aggregation von Protokollen und die Ausführung von Abfragen in den Protokollen zuständig, benötigt aber dennoch eine externe Anwendung, um Protokolle an Loki zu liefern. Die erste Möglichkeit ist das Hinzufügen einer eigenen Pipeline in der Anwendung, von der aus wir die Protokolle direkt an Loki weiterleiten können. Die zweite, empfohlene und am weitesten verbreitete Möglichkeit ist die Verwendung des speziellen Dienstes Loki Promtail, FluentD oder Fluentbit.
Zwei Modi von Loki - Installation und Konfiguration
Loki kann in zwei verschiedenen Modi arbeiten: monolithisch und Microservice.
Die erste ist eine großartige Lösung für den Einstieg in Loki oder für eine Plattform, bei der wir keine hohe Protokolllast erwarten, da es sich um eine einfache Einrichtung handelt und die meisten Benutzer sie ohne größere Probleme erstellen können. Andererseits kann Loki mit seinen Microservices betrieben werden, die der Schlüssel dazu sind, die Logs-Analyseplattform einfach und horizontal skalierbar zu machen (abhängig von der Infrastruktur, auf der wir sie installieren).

Die Installation von Loki kann ganz einfach mit dem offiziellen Helm-Diagramm erfolgen, das von Grafana Labs gepflegt wird. Wir können die Wertedatei anpassen, unsere eigene Konfiguration hinzufügen und sie schnell in der Zielumgebung einsetzen.

Die beste Option für die Installation von Loki im Microservice-Modus ist Kubernetes - jeder öffentliche Cloud-Anbieter liefert sein eigenes verwaltetes Kubernetes wie AWS EKS, Azure AKS oder Google GKE. Hier sind die folgenden Komponenten von Loki:
- Verteiler - dieser ist für die Bearbeitung der eingehenden Streams von Kunden zuständig.
- Ingester - verantwortlich für das Schreiben von Protokolldaten in Langzeitspeicher-Backends auf dem Schreibpfad und die Rückgabe von Protokolldaten für In-Memory-Abfragen auf dem Lesepfad.
- Querier - verarbeitet Abfragen mit der Abfragesprache LogQL und holt Protokolle sowohl von den Ingestern als auch vom Langzeitspeicher.
- (Optional) Abfrage-Frontend - stellt die API-Endpunkte des Queriers zur Verfügung und kann zur Beschleunigung des Lesepfads verwendet werden.
Um mehrere Ingester einzusetzen, müssen Sie etcd, Consul oder Memberlist verwenden. Eine dieser Komponenten wird verwendet, um Serien/Protokolle auf mehrere Ingester aufzuteilen.
Die nächste Anforderung an Loki ist die Speicherung. Glücklicherweise müssen wir seit der Veröffentlichung von v1.5.0 nur noch Objektspeicher anstelle von gemischtem Objektspeicher mit Key-Value-Datenbanken (wie Cassandra oder Google Cloud BigTable) verwenden, was die gesamte Plattform billiger und einfacher zu pflegen macht. Wir müssen einen neuen Bucket in AWS S3, Google Cloud Storage oder Microsoft Azure Blob Storage erstellen, die Standard-Speicherklasse festlegen, dem von Loki verwendeten IAM-Benutzer/Rolle die erforderlichen Berechtigungen hinzufügen und das war's. Dann können wir Loki starten.
Außerdem können wir, wenn wir möglichst schnelle Abfragen benötigen, Volumes zu unserer Loki-Installation hinzufügen. Dann kann der Querier die Abfrageergebnisse im lokalen Speicher zwischenspeichern, um die Zeit für die erneute Ausführung derselben Abfrage zu reduzieren.
Sofortige Benachrichtigung
Loki enthält eine Komponente namens Ruler, die für die kontinuierliche Auswertung einer Reihe konfigurierbarer Abfragen zuständig ist und dann Alarm schlägt, wenn bestimmte Probleme auftreten, z.B. ein hoher Prozentsatz von Fehlerprotokollen. Sie kann dann ein Ereignis an den Alert Manager senden, von dem aus der Alarm an eine E-Mail oder einen Slack-Kanal gesendet werden kann.
Ruler unterstützt Objektspeicher oder lokalen Speicher, um seinen Status zu speichern. Es ist wichtig zu erwähnen, dass Ruler auch horizontal skalierbar ist. Ähnlich wie die Ingester bauen die Ruler einen Hash-Ring auf, um die Zuständigkeiten für die Auswertung von Regeln aufzuteilen.
Ein einziger Ort, um alles zu sehen
Einer der wichtigsten Fakten über Loki ist, dass es von Grafana unterstützt wird. Wir können es in ein paar einfachen Schritten konfigurieren, Dashboards mit einer Anzahl von Vorkommnissen des Fehlers oder der Information erstellen und dann den Alarm von Grafana aus einrichten oder ein solches Panel mit Prometheus-Metriken aus dem Flink-Job kombinieren. Dies bietet eine großartige Möglichkeit, ein komplexes Dashboard zu erstellen, in dem wir eine vollständig beobachtbare Plattform einrichten können. Es kann auch nützlich sein, um eine selbstheilende Plattform zu schaffen - die Aktion kann auf der Grundlage des Inhalts der Protokolle ausgelöst werden.
Einfachheit vs. Leistung
Loki benötigt nicht allzu viele Ressourcen, insbesondere im Vergleich zum Elastic Stack. Leider hat dies einen großen Einfluss auf die Abfragegeschwindigkeit, was nicht ideal ist. Dies ist der Hauptgrund, warum Loki ein großartiges Tool für Entwickler ist, um die Protokolle ihrer Anwendungen zu verstehen, und nicht für die Durchführung von Geschäftsanalysen auf der Grundlage von Protokollen
Die Daten in ElasticSearch werden auf der Festplatte als unstrukturierte JSON-Objekte gespeichert. Sowohl die Schlüssel für jedes Objekt als auch der Inhalt jedes Schlüssels werden indiziert. In Loki werden die Protokolle in Klartextform gespeichert und mit einer Reihe von Bezeichnungsnamen und Werten versehen, wobei nur die Bezeichnungspaare indiziert werden. Dieser Kompromiss macht den Betrieb billiger als ein vollständiger Index und ermöglicht es Entwicklern, ihre Anwendungen aggressiv zu protokollieren.
Einfaches, gut funktionierendes Tool zur Analyse von Protokollen
Loki scheint die interessanteste Plattform für die Analyse von technischen Protokollen zu sein, da es sich um ein Open-Source-Projekt handelt. Wir können es einfach auf jedem verfügbaren Kubernetes in jeder Umgebung mit Objektspeicher oder sogar auf einer virtuellen Maschine installieren, während seine Funktionen Produktionsanforderungen wie Hochverfügbarkeit, Alarmierung oder Datenvisualisierung in dem Tool erfüllen, das die Zugriffsverwaltung unterstützt.
Wir bei GetInData evaluieren verschiedene Konfigurationen und wissen genau, wie man eine wertvolle, gut funktionierende und skalierbare Plattform für die Protokollanalyse schafft. Wenn Sie mehr wissen möchten, zögern Sie nicht, uns zu kontaktieren.
Verfasst von
Albert Lewandowski
Unsere Ideen
Weitere Blogs
Contact



