Zuletzt bearbeitet vor 3 Monaten
von Andrew Willi

Opensearch: Unterschied zwischen den Versionen

Andrew Willi (Diskussion | Beiträge)
automatisches Index-Lifecycle-Management für OpenSearch
 
Andrew Willi (Diskussion | Beiträge)
Keine Bearbeitungszusammenfassung
Zeile 68: Zeile 68:
===Schritt-für-Schritt Anleitung===
===Schritt-für-Schritt Anleitung===
'''Note: Unter Management/Dev tools kann man die Befehle einfügen und ausführen'''
'''Note: Unter Management/Dev tools kann man die Befehle einfügen und ausführen'''
#'''Erstellen''' Sie die '''ISM-Policy''' (JSON editor oder Visual editor):
#'''Erstellen''' Sie die '''ISM-Policy''' (JSON editor oder Visual editor):[[Datei:ISM-Policy Dashboard.png|mini|1210x1210px]]
#:
#:
#:[[Datei:ISM-Policy Dashboard.png|mini|1210x1210px]]<syntaxhighlight lang="json">
#:<syntaxhighlight lang="json">
PUT _plugins/_ism/policies/provisioning_rollover
PUT _plugins/_ism/policies/provisioning_rollover
{
{
Zeile 131: Zeile 131:
#:*<code>min_index_age: 1h</code> - Index muss ≥1 Stunde alt sein
#:*<code>min_index_age: 1h</code> - Index muss ≥1 Stunde alt sein
#:*<code>min_rollover_age: 3h</code> - Löschen 3 Stunden nach Rollover
#:*<code>min_rollover_age: 3h</code> - Löschen 3 Stunden nach Rollover
#:'''Hinweis:''' Rollover-Bedingungen sind '''UND''' — beide müssen erfüllt sein. <br />
#:'''Hinweis:''' Rollover-Bedingungen sind '''UND''' — beide müssen erfüllt sein. <br /> &#xAD;
#'''Erstellen''' Sie das '''Index-Template''':[[Datei:Index-Template.png|mini|976x976px]]
#'''Erstellen''' Sie das '''Index-Template''':[[Datei:Index-Template.png|mini|976x976px]]
#:<syntaxhighlight lang="json">
#:<syntaxhighlight lang="json">

Version vom 28. Januar 2026, 15:37 Uhr

Anwendung: OpenSearch
Status: Entwurf/ freigegeben

Ziel

Diese Anleitung richtet automatisches Index-Lifecycle-Management ein:

  • Rollover: Neuen Index erstellen wenn Bedingungen erfüllt sind (Alter + Dokumentenanzahl)
  • Löschen: Alte Indizes nach einer Aufbewahrungsfrist entfernen
provisioning_v2-000001 → Rollover → provisioning_v2-000002 → Rollover → ...
                            ↓ (3h später)
                         LÖSCHEN

Voraussetzungen und Vorbereitung

  • Zugang zu OpenSearch Cluster (Admin-Rechte)
  • OpenSearch Dashboard oder API-Zugang (z.B. via curl oder Dev Tools)
  • Python-Anwendung mit opensearch-logger Bibliothek

Vorgang 1: Index-Lifecycle einrichten

Erstellung der ISM-Policy, Index-Template und des initialen Index für automatisches Rollover und Löschen.

Schritt Was ist zu tun? Bemerkungen
1 ISM-Policy erstellen Definiert Rollover- und Lösch-Bedingungen
2 Index-Template erstellen Stellt korrekte Einstellungen für neue Indizes sicher
3 Initialen Index erstellen Erster Index mit korrekter Benennung
4 Write-Alias hinzufügen Alias für Schreiboperationen
5 Rollover-Alias am Index setzen Index mit Alias verknüpfen
6 Policy an Index anhängen Lifecycle-Management aktivieren

Schritt-für-Schritt Anleitung

Note: Unter Management/Dev tools kann man die Befehle einfügen und ausführen

  1. Erstellen Sie die ISM-Policy (JSON editor oder Visual editor):
    PUT _plugins/_ism/policies/provisioning_rollover
    {
      "policy": {
        "policy_id": "provisioning_rollover",
        "description": "Rollover und Löschen von Provisioning-Logs",
        "default_state": "rollover",
        "states": [
          {
            "name": "rollover",
            "actions": [
              {
                "retry": {
                  "count": 3,
                  "backoff": "exponential",
                  "delay": "1m"
                },
                "rollover": {
                  "min_doc_count": 5,
                  "min_index_age": "1h",
                  "copy_alias": false
                }
              }
            ],
            "transitions": [
              {
                "state_name": "delete",
                "conditions": {
                  "min_rollover_age": "3h"
                }
              }
            ]
          },
          {
            "name": "delete",
            "actions": [
              {
                "retry": {
                  "count": 3,
                  "backoff": "exponential",
                  "delay": "1m"
                },
                "delete": {}
              }
            ],
            "transitions": []
          }
        ],
        "ism_template": [
          {
            "index_patterns": ["provisioning_v2*"],
            "priority": 1
          }
        ]
      }
    }
    
    Bedingungen:
    • min_doc_count: 5 - Muss ≥5 Dokumente haben
    • min_index_age: 1h - Index muss ≥1 Stunde alt sein
    • min_rollover_age: 3h - Löschen 3 Stunden nach Rollover
    Hinweis: Rollover-Bedingungen sind UND — beide müssen erfüllt sein.
    ­
  2. Erstellen Sie das Index-Template:
    PUT _index_template/provisioning_v2_template
    {
      "index_patterns": ["provisioning_v2-*"],
      "template": {
        "settings": {
          "index.plugins.index_state_management.rollover_alias": "provisioning_v2"
        }
      },
      "priority": 100
    }
    
  3. Erstellen Sie den initialen Index (Visual editor wurde nicht mehr genutzt, weil es mühsam ist):
    PUT provisioning_v2-000001
    
    Der Index muss mit einer Nummer enden (z.B. -000001).
  4. Fügen Sie den Write-Alias hinzu:
    POST _aliases
    {
      "actions": [
        {
          "add": {
            "index": "provisioning_v2-000001",
            "alias": "provisioning_v2",
            "is_write_index": true
          }
        }
      ]
    }
    
  5. Setzen Sie den Rollover-Alias am Index:
    PUT provisioning_v2-000001/_settings
    {
      "index.plugins.index_state_management.rollover_alias": "provisioning_v2"
    }
    
  6. Hängen Sie die Policy an den Index an:
    POST _plugins/_ism/add/provisioning_v2-000001
    {
      "policy_id": "provisioning_rollover"
    }
    
    Alle Befehle in Reihenfolge
    // 1. Policy erstellen
    PUT _plugins/_ism/policies/provisioning_rollover
    {
      "policy": {
        "policy_id": "provisioning_rollover",
        "description": "Rollover und Löschen von Provisioning-Logs",
        "default_state": "rollover",
        "states": [
          {
            "name": "rollover",
            "actions": [
              {
                "retry": {
                  "count": 3,
                  "backoff": "exponential",
                  "delay": "1m"
                },
                "rollover": {
                  "min_doc_count": 5,
                  "min_index_age": "1h",
                  "copy_alias": false
                }
              }
            ],
            "transitions": [
              {
                "state_name": "delete",
                "conditions": {
                  "min_rollover_age": "3h"
                }
              }
            ]
          },
          {
            "name": "delete",
            "actions": [
              {
                "retry": {
                  "count": 3,
                  "backoff": "exponential",
                  "delay": "1m"
                },
                "delete": {}
              }
            ],
            "transitions": []
          }
        ],
        "ism_template": [
          {
            "index_patterns": ["provisioning_v2*"],
            "priority": 1
          }
        ]
      }
    }
    
    // 2. Template erstellen
    PUT _index_template/provisioning_v2_template
    {
      "index_patterns": ["provisioning_v2-*"],
      "template": {
        "settings": {
          "index.plugins.index_state_management.rollover_alias": "provisioning_v2"
        }
      },
      "priority": 100
    }
    
    // 3. Initialen Index erstellen
    PUT provisioning_v2-000001
    
    // 4. Write-Alias hinzufügen
    POST _aliases
    {
      "actions": [
        {
          "add": {
            "index": "provisioning_v2-000001",
            "alias": "provisioning_v2",
            "is_write_index": true
          }
        }
      ]
    }
    
    // 5. Rollover-Alias am Index setzen
    PUT provisioning_v2-000001/_settings
    {
      "index.plugins.index_state_management.rollover_alias": "provisioning_v2"
    }
    
    // 6. Policy anhängen
    POST _plugins/_ism/add/provisioning_v2-000001
    {
      "policy_id": "provisioning_rollover"
    }
    

Vorgang 2: Anwendung konfigurieren

Konfiguration der Python-Anwendung zur Verwendung des Alias anstelle von datumsbasierten Indizes.

Schritt Was ist zu tun? Bemerkungen
1 Logging-Konfiguration anpassen index_rotate auf NEVER setzen
2 Anwendung neu starten Änderungen aktivieren

Schritt-für-Schritt Anleitung

  1. Passen Sie die settings.py an:
    'opensearch': {
        "level": 'DEBUG',
        "class": 'opensearch_logger.OpenSearchHandler',
        "index_name": "provisioning_v2",      # Schreibe zum Alias
        "index_rotate": "NEVER",               # Datums-Suffix deaktivieren
        "hosts": [{"host": OPENSEARCH_LOGGING_SERVER, "port": 9200}],
        "http_auth": ("admin", "admin"),
        "http_compress": True,
        "filters": ['correlation_id'],
    },
    
  2. Starten Sie die Anwendung neu

Vorgang 3: Überprüfung und Fehlerbehebung

Befehle zur Überprüfung des Status und zur Fehlerbehebung.

Schritt Was ist zu tun? Bemerkungen
1 Indizes prüfen Alle provisioning Indizes anzeigen
2 Alias prüfen Alias-Konfiguration verifizieren
3 Policy-Status prüfen ISM-Status aller Indizes anzeigen

Überprüfungs-Befehle

  1. Alle Indizes anzeigen:
    GET _cat/indices/provisioning_v2-*?v&h=index,docs.count,creation.date.string
    
  2. Alias-Konfiguration prüfen:
    GET _alias/provisioning_v2
    
  3. Policy-Status prüfen:
    GET _plugins/_ism/explain/provisioning_v2-*
    

Fehlerbehebungs-Befehle

  1. Bei Rollover-Fehler manuell wiederholen:
    POST _plugins/_ism/retry/provisioning_v2-000001
    
  2. Policy an Index anhängen (falls nicht angehängt):
    POST _plugins/_ism/add/provisioning_v2-000001
    {
      "policy_id": "provisioning_rollover"
    }
    
  3. Aktualisierte Policy auf bestehende Indizes anwenden:
    POST _plugins/_ism/change_policy/provisioning_v2-*
    {
      "policy_id": "provisioning_rollover"
    }
    
  4. Manueller Rollover erzwingen (umgeht Bedingungen):
    POST provisioning_v2/_rollover
    

Häufige Fehler

Fehler Ursache Lösung
Missing rollover_alias index setting Index weiss nicht welchen Alias verwenden PUT index/_settings mit rollover_alias
duplicated alias in index template Template hat aliases Abschnitt aliases aus Template entfernen
Conditions not met min_doc_count UND min_index_age nicht beide erfüllt Warten, oder Schwellwerte zum Testen senken
alias name conflicts with index Index und Alias haben gleichen Namen Index löschen oder anderen Alias-Namen verwenden

Lifecycle-Ablauf

1. App schreibt zum Alias "provisioning_v2"
           ↓
2. Alias zeigt auf aktuellen Index (z.B. -000001)
           ↓
3. Wenn ≥5 Dokumente UND ≥1h alt → ROLLOVER
           ↓
4. Neuer Index erstellt (-000002), Alias wird verschoben
           ↓
5. Alter Index wartet im "rollover" Zustand
           ↓
6. Nach 3h seit Rollover → ÜBERGANG zu delete
           ↓
7. Index wird GELÖSCHT