In der täglichen Arbeit mit OpenSearch werden Sie häufig mehrere ähnliche Indizes erstellen müssen, etwa für Logdaten oder zeitbasierte Informationen. Index Templates sind das Werkzeug, mit dem Sie diese Aufgabe effizient bewältigen können. Sie ermöglichen es, neue Indizes automatisch mit vordefinierten Mappings und Einstellungen zu initialisieren.
Stellen Sie sich Index Templates als Bauplan vor, nach dem OpenSearch neue Indizes erstellt. Wenn Sie beispielsweise täglich Logdaten indexieren, möchten Sie sicherstellen, dass jeder neue Index die gleiche Struktur aufweist - die gleiche Anzahl an Shards, die gleichen Feldtypen und möglicherweise auch die gleichen Aliase.
Lassen Sie uns ein praktisches Beispiel betrachten. Nehmen wir an, Sie möchten Temperaturmessungen speichern:
PUT _index_template/temperaturdaten
{
"index_patterns": ["temperatur-*"],
"template": {
"settings": {
"number_of_shards": 2,
"number_of_replicas": 1
},
"mappings": {
"properties": {
"zeitstempel": {
"type": "date",
"format": "yyyy-MM-dd HH:mm:ss"
},
"wert": {
"type": "float"
},
"sensor_id": {
"type": "keyword"
}
}
},
"aliases": {
"aktuelle_temperatur": {}
}
}
}
Dieses Template definiert, dass alle Indizes, deren Namen mit “temperatur-” beginnen, automatisch:
Die Verwaltung von Templates erfolgt über einfache REST-Anfragen. Um alle vorhandenen Templates anzuzeigen:
GET _cat/templates
Ein spezifisches Template können Sie sich detailliert ansehen:
GET _index_template/temperaturdaten
In der Praxis werden Sie oft verschiedene Aspekte Ihrer Indizes in unterschiedlichen Templates definieren wollen. OpenSearch ermöglicht es, mehrere Templates zu kombinieren, wobei die Priorität eine wichtige Rolle spielt.
Betrachten wir ein Beispiel mit zwei Templates:
PUT _index_template/basis_einstellungen
{
"index_patterns": ["*"],
"priority": 0,
"template": {
"settings": {
"number_of_shards": 1,
"number_of_replicas": 1
}
}
}
PUT _index_template/log_einstellungen
{
"index_patterns": ["logs-*"],
"priority": 100,
"template": {
"settings": {
"number_of_shards": 3
}
}
}
Das Template mit der höheren Priorität (log_einstellungen) überschreibt dabei die Einstellungen des Basis-Templates für alle Indizes, die mit “logs-” beginnen.
Eine besonders leistungsfähige Funktion sind die composite Templates. Sie ermöglichen es, wiederverwendbare Bausteine zu erstellen und diese zu kombinieren. Dies ist besonders nützlich, wenn Sie viele ähnliche, aber nicht identische Indizes verwalten müssen.
Zunächst erstellen wir einen Baustein für grundlegende Zeitstempelfelder:
PUT _component_template/zeitstempel_komponente
{
"template": {
"mappings": {
"properties": {
"@timestamp": {
"type": "date",
"format": "strict_date_optional_time"
},
"created_at": {
"type": "date",
"format": "strict_date_optional_time"
}
}
}
}
}
Einen weiteren für Metadaten:
PUT _component_template/metadaten_komponente
{
"template": {
"mappings": {
"properties": {
"quelle": {
"type": "keyword"
},
"umgebung": {
"type": "keyword"
}
}
}
}
}
Diese Komponenten können wir nun in einem Index Template zusammenführen:
PUT _index_template/logging_template
{
"index_patterns": ["logs-*"],
"composed_of": [
"zeitstempel_komponente",
"metadaten_komponente"
],
"template": {
"settings": {
"number_of_shards": 2
}
}
}
Lassen Sie uns die gelernten Konzepte in einem praxisnahen Szenario anwenden. Nehmen wir an, Sie betreiben ein System, das Sensordaten von verschiedenen Standorten sammelt:
PUT _index_template/sensordaten
{
"index_patterns": ["sensor-*"],
"composed_of": ["zeitstempel_komponente"],
"template": {
"settings": {
"number_of_shards": 3,
"number_of_replicas": 1
},
"mappings": {
"properties": {
"standort": {
"type": "keyword"
},
"messwert": {
"type": "float"
},
"einheit": {
"type": "keyword"
}
}
},
"aliases": {
"aktuelle_messungen": {}
}
},
"priority": 500,
"_meta": {
"beschreibung": "Template für Sensordaten aller Standorte",
"version": "1.0"
}
}
Wenn Sie nun einen Index erstellen, der dem Muster entspricht:
PUT sensor-berlin-2024-01
Wird OpenSearch automatisch alle definierten Einstellungen, Mappings und Aliase anwenden.
Bei der Arbeit mit Index Templates sollten Sie einige wichtige Prinzipien beachten:
Verwenden Sie aussagekräftige Muster für Ihre Index-Namen. Ein gutes Namensschema erleichtert die spätere Verwaltung erheblich.
Nutzen Sie composite Templates, um wiederholende Konfigurationen zu vermeiden. Dies macht Ihre Templates wartbarer und reduziert die Fehleranfälligkeit.
Dokumentieren Sie Ihre Templates gut, insbesondere wenn Sie mehrere Templates kombinieren. Die _meta-Felder sind dafür ein ausgezeichneter Ort.
Planen Sie Ihre Template-Hierarchie sorgfältig. Die richtige Priorisierung ist entscheidend für das erwartete Verhalten.