Verbessern des Datenverständnisses
Rocco Gagliardi
So protokollieren Sie in einer Timeseries-Datenbank
Darüber hinaus haben wir uns in den letzten Jahren von einem weitgehend statischen Netzwerk zu extrem dynamischen Netzwerken entwickelt, mit Mikrodiensten, die sich sowohl in ihrer Anzahl als auch in ihrer Position ständig verändern. Diese Veränderungen im Auge zu behalten, sei es für Debugging oder für Business Analysis und Intelligence (BA/BI), ist sehr komplex und teuer geworden, da die Lösung mit umfangreichem Index nicht leicht skalierbar ist sowie hohe Investitionen erfordert.
Das Problem, die Ereignisse in den Anwendungen in einer für Menschen lesbaren Form zu verfolgen, wird in naher Zukunft verschwinden. Zusätzlich zu der Tatsache, dass es oft nutzlos ist, wird die Menge der angelegten Daten unüberschaubar. Lösungen, bei denen Maschinen Probleme an Maschinen weitergeben, die die notwendigen Anpassungen vornehmen und dabei menschliche Eingriffe vollständig vermeiden, sind bereits im Einsatz – und ihre Zahl nimmt zu. In der Zwischenzeit existiert das Problem jedoch und erfordert neue Lösungen.
Ohne den derzeit im Einsatz befindlichen BA/BI-Lösungen etwas wegzunehmen, liegt der Schlüssel, insbesondere für den IT-Betrieb, im Konzept der Beobachtbarkeit: Bestimmung der Funktionsweise eines Systems durch Analyse seiner Ausgaben, im Wesentlichen Metriken, Protokolle und Traces.
In den letzten Jahren hat sich Grafana zum Defacto-Standard für diese Beobachtbarkeit etabliert, mit einigen spezialisierten Werkzeugen für jeden Aspekt:
Wie bereits erwähnt, produzieren Mikroservice-Systeme eine riesige Menge an Daten. Um sie zu verwalten, gehen wir zunehmend zu Systemen mit minimaler Indizierung über. Im Gegensatz zum Trend, der massiv auf Indizierung zurückgreifen.
Loki ist ein horizontal skalierbares, hochverfügbares, mandantenfähiges Log-Aggregationssystem nach dem Vorbild von Prometheus. Es ist so konzipiert, dass es sehr kostengünstig und einfach zu bedienen ist. Es indiziert nicht den Inhalt der Protokolle, sondern vielmehr einen Satz von Labels für jeden Protokollstrom.
Ist Loki ein Ersatz für ELK, Splunk oder Graylog? Nein. Es liegt an Ihnen, Loki, ELK oder eine Kombination aus beiden zu verwenden. Einige Unterschiede zwischen den jeweiligen Systemklassen sind in der Tabelle aufgeführt.
Fähigkeit | Umfangreicher Index | Minimaler Index |
---|---|---|
Schreibleistung | niedrig | hoch |
Leseleistung | hoch | hoch |
Typische Indexgrösse (im Vergleich zu den Daten) | >50% | <5% |
Filterfähigkeiten | hoch | niedrig |
Aggregationsfähigkeiten | hoch | niedrig |
Skalierbarkeit | niedrig | Hoch |
Kosten | hoch | niedrig |
Nehmen Sie als Beispiel ein Apache httpd Log: ELK wird eine typische httpd-Logzeile in ca. 12 Stücke teilen und jedes davon indizieren. Loki wird nur 3 Elemente mit einem Index versehen: Timestamp
, Method
, HTTPStatus
.
Das Holen von Protokollen mit Loki umfasst zwei einfache Komponenten: Den Loki-Server und den Promtail-Client. Beide sind in Go geschrieben und daher als eine einzige Datei extrem einfach zu verteilen. Wie Grafana basiert Loki auf der Cortex-Datenbank, die skalierbar und mandantenfähig ist.
Loki indiziert keine Daten, es indiziert und gruppiert Streams von Logs. Es teilt die Daten in Chunks (Blöcke), die von Streams gespeist werden, und speichert sie im Dateisystem (wir haben eine ähnliche Technik für unsere spezialisierte Suche herangezogen).
Streams sind durch Labels gekennzeichnet. Labels sind k->v
Paare, die aus jedem Teil der Daten extrahiert werden können. Jede eindeutige Kombination von Labels und Werten definiert einen Stream. Die Protokolle für einen Stream werden zusammengefasst, komprimiert und als Chunks gespeichert. Jeder Chunk wird mit Hilfe eines konfigurierbaren Algorithmus (Standard gzip) komprimiert.
Die Chunks sind also der Index zu den Loki-Logdaten. Sie werden verwendet, um den komprimierten Protokollinhalt zu finden, der separat gespeichert wird. Sobald der richtige Chunk im Index identifiziert ist, wird er dekomprimiert und der Inhalt mit regexp bearbeitet. Das mag schwach klingen, aber da die zeitgleich geschehen kann, sind die Suchvorgänge sehr schnell.
Hinweis: Die Indexgrösse oder die Zugriffsgeschwindigkeit hängt von der Anzahl der Chunks ab. Die Anzahl der Chunks hängt von der Anzahl der Streams ab, die von der Anzahl der Kombinationen von Labels und Values abhängt. Es ist daher klar, dass es im Gegensatz zu ELK zwar möglich, aber nicht empfehlenswert ist, z.B. IP-Adressen zu indizieren (labeln), da jede neue IP einen neuen Stream erzeugen würde. Das bedeutet, dass z.B. Suchen nach einer bestimmten IP und über einen längeren Zeitraum in Loki nicht gut funktionieren.
Um ausgezeichnete Suchzeiten zu erhalten, ist es daher notwendig, die zu extrahierenden und zu verwendenden Labels sorgfältig auszuwählen.
Der Use-Case von Loki ist spezifisch: Unterstützung des Debugging-Prozesses durch schnelles Filtern wichtiger Nachrichten aus der Menge der Mitteilungen, die von den verschiedenen an einer Anwendung beteiligten Systemen erzeugt werden. Eine Containerumgebung ist eine ideale Spielwiese für Loki.
Die Leistungsfähigkeit von Loki zeigt sich, wenn es in Prometheus integriert ist; unter Verwendung der gleichen Labels ist es möglich, auf die gleichen Datensegmente zu verweisen und die Metriken mit den Nachrichten der verschiedenen Systeme zu vergleichen.
Die Erstellung von Dashboards, Trends, Zählungen usw. ist nicht die Stärke von Loki. Stellen Sie sich Loki als eine Art Power-Grep vor.
Jedes System erstellt Protokolle: Switches, Router, Betriebssysteme, Webserver, Firewalls, Dienste auf Ihren Kubernetes-Clustern, öffentliche Cloud-Dienste und mehr. Besonders für Systembetreiber ist es entscheidend, diese Protokolle sammeln und analysieren zu können. Und die wachsende Beliebtheit von Mikrodiensten, IoT, Cybersicherheit und Cloud hat zu einer Explosion neuer Arten von Protokolldaten geführt.
Loki strebt einen anderen Ansatz an, als umfangreiche Indexsysteme wie ELK. Durch die Vermeidung weitreichender Indizierung und den Verzicht auf die Möglichkeit, die gesammelten Daten zu aggregieren und fein zu filtern, konzentriert es sich auf die extrem schnelle Aufnahme grosser Datenmassen und die ebenso schnelle Suche nach Teilen davon, wobei die Mandantenfähigkeit und Skalierung zu sehr niedrigen Kosten beibehalten wird.
Unsere Spezialisten kontaktieren Sie gern!
Rocco Gagliardi
Rocco Gagliardi
Rocco Gagliardi
Rocco Gagliardi
Unsere Spezialisten kontaktieren Sie gern!