Der Elastic Stack in der Praxis, Teil 3: Index Lifecycle Management

In den letzten Artikeln zum Log Management mit dem Elastic Stack haben wir einige Datenquellen an unser System angeschlossen. Diese senden permanent Daten, die den verfügbaren Speicherplatz füllen. In diesem Artikel kümmern wir uns um das Index Lifecycle Management (ILM), einen Mechanismus, der den Umgang mit alten Daten kontrolliert.

Ein Index ist in Elasticsearch eine Menge von Dokumenten, vergleichbar mit einer Datenbank. Jedes Log-Event ist ein Dokument. Ein Index trägt einen Namen, z.B. filebeat-7.2.1-2019.07.31-000001. In diesem Fall besteht der Index-Name aus dem Typ des Beats, der Dokumente in diesem Index ablegt, der Versionsnummer des Beats, dem Erstellungsdatum und einem Zähler.

Das ILM wird durch sog. Index Lifecycle Policies gesteuert. In einer solchen Policy wird für eine Menge von Indizes bestimmt, wann das ILM welche Schritte vornehmen soll. In diesem Artikel beschränken wir uns zunächst auf das Löschen alter Daten. Es besteht auch die Möglichkeit, diese Daten innerhalb eines Clusters zu verschieben oder effizienter zu speichern, diese Themen würden den Umfang dieses Artikels jedoch sprengen.

Alle Beats ab Version 7.2 erstellen automatisch eine Lifecycle Policy in Elasticsearch, die alle Indizes kontrolliert, die dieser Beat erstellt. Die Policy kann über Kibana eingesehen und verändert werden.

Eine Lifecycle Policy modifizieren

Klicken Sie in der linken Seitenleiste auf das Zahnradsymbol („Management“) und wählen Sie dann den Punkt „Index Lifecycle Policies“ im Bereich „Elasticsearch“ aus.

Sie sehen eine Reihe von Policies, die von den verschiedenen Beats angelegt wurden. Es gibt je eine Policy pro Beat-Typ (Filebeat, Metricbeat, …) und Beat-Version. Klicken Sie eine davon an. Sie sehen nun eine Oberfläche zur Steuerung des Index Lifecycles:

Jeder Index kann während seiner Lebensdauer mehrere Phasen durchlaufen. Er beginnt in der Hot-Phase. Über die Index Lifecycle Policy wird definiert, wann der Index in die nächste Phase übergeht und durch einen leeren, neuen Index ersetzt wird. Diese Ersetzung wird auch als Rollover bezeichnet. Dafür können die folgenden drei Kriterien berücksichtigt werden:

  • Die Gesamtgröße des Index in Megabyte oder Gigabyte
  • Die Anzahl der Dokumente in dem Index
  • Das Alter des Index (gemessen ab dem Erstellungsdatum) in Tagen oder Stunden

Sofern mehrere Kriterien definiert werden, erfolgt der Übergang in die nächste Phase, sobald mindestens eines der Kriterien erfüllt ist.

Stellen Sie hier ein, wie viel Speicherplatz sie jedem Index zugestehen möchten. Stellen Sie außerdem ein, wie lange Sie jeden Index nach seiner Erstellung vorhalten möchten.

Scrollen Sie an das Ende der Seite. Dort finden sie die letzte Phase, die Delete-Phase. In dieser Phase wird ein Index gelöscht. Aktivieren Sie die Delete-Phase.

In dem Eingabefeld „Timing for delete phase“ müssen Sie angeben, nach welcher Zeitspanne nach dem Rollover in der Hot-Phase der Index gelöscht werden soll. Stellen Sie hier bspw. den Minimalwert von einer Stunde ein.

Zuletzt speichern Sie die Policy. Die Policy wird von nun an für alle neuen Indizes, die dieser Policy zugeordnet sind, verwendet.

Anwenden der geänderten Policy auf bestehende Indizes

Um die Änderungen auch für bestehende Indizes zu übernehmen, müssen Sie diesen die Policy neu zuweisen. Klicken Sie dazu rechts im Bereich „Elasticsearch“ auf „Index Management“. Aktivieren Sie das Kontrollkästchen vor den betroffenen Indizes, z.B. allen Filebeat-Indizes, und klicken Sie auf „Manage index“ und „Remove lifecycle policy“.

Bestätigen Sie das Entfernen der Lifecycle Policy:

Fügen Sie die Lifecycle Policy nun erneut hinzu. Wählen Sie wieder die betroffenen Indizes aus, klicken Sie „Manage index“ und „Add lifecycle policy

Wählen Sie im folgenden Dialog die Policy und den passenden Rollover-Alias aus:

Nun haben Sie den Indizes die Lifecycle Policy neu zugewiesen. Es kann nun noch einige Minuten dauern, bis die Änderungen wirksam werden.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.