[comment]: # ({47c25517-4ff8e217})
# 8 Elasticsearch-Einrichtung

::: noteimportant
 Die Unterstützung von Elasticsearch ist experimentell!

:::

Zabbix unterstützt die Speicherung historischer Daten mithilfe von Elasticsearch
anstelle einer Datenbank. Benutzer können den Speicherort für historische
Daten zwischen einer kompatiblen Datenbank und Elasticsearch wählen. Das in
diesem Abschnitt beschriebene Einrichtungsverfahren gilt für Elasticsearch
Version 7.X. Wenn eine frühere oder spätere Version von Elasticsearch
verwendet wird, funktioniert möglicherweise einige Funktionalität nicht wie vorgesehen.

::: notewarning
1\. Wenn alle Verlaufsdaten in Elasticsearch gespeichert werden,
werden Trends **nicht** berechnet und auch nicht in der Datenbank gespeichert. Wenn keine Trends
berechnet und gespeichert werden, muss der Speicherzeitraum für Verlaufsdaten möglicherweise
verlängert werden.<br>
2\. Wenn Elasticsearch verwendet wird, sind Bereichsabfragen, die Werte aus der Datenbank abrufen, durch den Zeitstempel des Datenspeicherzeitraums begrenzt.
:::

[comment]: # ({/47c25517-4ff8e217})

[comment]: # ({0b6587bd-0b6587bd})
#### Konfiguration

Um eine ordnungsgemäße Kommunikation zwischen allen beteiligten Elementen sicherzustellen, stellen Sie sicher, dass die Parameter der Server-Konfigurationsdatei und der Frontend-Konfigurationsdatei korrekt konfiguriert sind.

[comment]: # ({/0b6587bd-0b6587bd})

[comment]: # ({293ef64c-293ef64c})
##### Zabbix Server und Frontend

Entwurf der Zabbix-Server-Konfigurationsdatei mit zu aktualisierenden Parametern:

    ### Option: HistoryStorageURL
    # HTTP[S]-URL des History-Speichers.
    #
    # Mandatory: no
    # Default:
    # HistoryStorageURL= 
    ### Option: HistoryStorageTypes
    # Durch Kommas getrennte Liste von Werttypen, die an den History-Speicher gesendet werden.
    #
    # Mandatory: no
    # Default:
    # HistoryStorageTypes=uint,dbl,str,log,text

Beispielwerte für Parameter, mit denen die Zabbix-Server-Konfigurationsdatei
gefüllt werden soll:

    HistoryStorageURL=http://test.elasticsearch.lan:9200
    HistoryStorageTypes=str,log,text

Diese Konfiguration erzwingt, dass Zabbix Server History-Werte numerischer Typen in der entsprechenden Datenbank und textuelle History-Daten in Elasticsearch speichert.

Elasticsearch unterstützt die folgenden Datentypen:

    uint,dbl,str,log,text

Erläuterung der unterstützten Datentypen:

|   |   |   |
|---|---|---|
|**Datenpunkttyp**|**Datenbanktabelle**|**Elasticsearch-Typ**|
|Numerisch (vorzeichenlos)|history\_uint|uint|
|Numerisch (Gleitkomma)|history|dbl|
|Zeichen|history\_str|str|
|Log|history\_log|log|
|Text|history\_text|text|

Entwurf der Zabbix-Frontend-Konfigurationsdatei (`conf/zabbix.conf.php`) mit
zu aktualisierenden Parametern:

    // Elasticsearch-URL (kann ein String sein, wenn für alle Typen dieselbe URL verwendet wird).
    $HISTORY['url']   = [
          'uint' => 'http://localhost:9200',
          'text' => 'http://localhost:9200'
    ];
    // In Elasticsearch gespeicherte Werttypen.
    $HISTORY['types'] = ['uint', 'text'];

Beispielwerte für Parameter, mit denen die Zabbix-Frontend-Konfigurationsdatei
gefüllt werden soll:

    $HISTORY['url']   = 'http://test.elasticsearch.lan:9200';
    $HISTORY['types'] = ['str', 'text', 'log'];

Diese Konfiguration erzwingt, dass History-Werte vom Typ `Text`, `Character` und `Log`
in Elasticsearch gespeichert werden.

Außerdem ist es erforderlich, $HISTORY in `conf/zabbix.conf.php` global zu machen, um
sicherzustellen, dass alles ordnungsgemäß funktioniert (siehe
`conf/zabbix.conf.php.example` für die Vorgehensweise):

    // Zabbix-GUI-Konfigurationsdatei.
    global $DB, $HISTORY;

[comment]: # ({/293ef64c-293ef64c})

[comment]: # ({000d1106-e9a9c5bd})
##### Elasticsearch installieren und Mapping erstellen

Die letzten beiden Schritte, damit alles funktioniert, sind die Installation von Elasticsearch selbst und das Erstellen des Mapping-Prozesses.

Für die Installation von Elasticsearch lesen Sie bitte die [Elasticsearch-Installationsanleitung](https://www.elastic.co/guide/en/elasticsearch/reference/current/setup.html).

::: noteclassic
Mapping ist eine Datenstruktur in Elasticsearch (ähnlich einer Tabelle in einer Datenbank). Das Mapping für alle History-Datentypen ist hier verfügbar: `database/elasticsearch/elasticsearch.map`.
:::

::: notewarning
Das Erstellen des Mappings ist zwingend erforderlich. Einige Funktionen werden nicht funktionieren, wenn das Mapping nicht gemäß der Anleitung erstellt wird.
:::

Um das Mapping für den Typ `text` zu erstellen, senden Sie die folgende Anfrage an Elasticsearch:

``` {.java}
curl -X PUT \
 http://your-elasticsearch.here:9200/text \
 -H 'content-type:application/json' \
 -d '{
   "settings": {
      "index": {
         "number_of_replicas": 1,
         "number_of_shards": 5
      }
   },
   "mappings": {
      "properties": {
         "itemid": {
            "type": "long"
         },
         "clock": {
            "format": "epoch_second",
            "type": "date"
         },
         "value": {
            "fields": {
               "analyzed": {
                  "index": true,
                  "type": "text",
                  "analyzer": "standard"
               }
            },
            "index": false,
            "type": "text"
         }
      }
   }
}'
```

Eine ähnliche Anfrage muss auch für die Erstellung des Mappings der History-Werte `Character` und `Log` ausgeführt werden, jeweils mit der entsprechenden Typkorrektur.

::: noteclassic
Für die Arbeit mit Elasticsearch lesen Sie bitte die [Anforderungen](/manual/installation/requirements#serverproxy) für weitere Informationen.
:::

::: noteclassic
[Housekeeper](/manual/web_interface/frontend_sections/administration/housekeeping)
löscht keine Daten aus Elasticsearch.
:::

[comment]: # ({/000d1106-e9a9c5bd})

[comment]: # ({8451a0a2-8451a0a2})
#### Speichern von Verlaufsdaten in mehreren datumsbasierten Indizes

Dieser Abschnitt beschreibt zusätzliche Schritte, die für die Arbeit mit Pipelines und Ingest-Nodes erforderlich sind.

Zunächst müssen Sie Vorlagen für Indizes erstellen.

Das folgende Beispiel zeigt eine Anfrage zum Erstellen einer uint-Vorlage:

``` {.java}
curl -X PUT \
 http://your-elasticsearch.here:9200/_template/uint_template \
 -H 'content-type:application/json' \
 -d '{
   "index_patterns": [
      "uint*"
   ],
   "settings": {
      "index": {
         "number_of_replicas": 1,
         "number_of_shards": 5
      }
   },
   "mappings": {
      "properties": {
         "itemid": {
            "type": "long"
         },
         "clock": {
            "format": "epoch_second",
            "type": "date"
         },
         "value": {
            "type": "long"
         }
      }
   }
}'
```

Um andere Vorlagen zu erstellen, sollte der Benutzer die URL ändern (der letzte Teil ist der Name der Vorlage), das Feld `"index_patterns"` so anpassen, dass es zum Indexnamen passt, und ein gültiges Mapping festlegen, das aus `database/elasticsearch/elasticsearch.map` übernommen werden kann.

Beispielsweise kann der folgende Befehl verwendet werden, um eine Vorlage für einen Textindex zu erstellen:

``` {.java}
curl -X PUT \
 http://your-elasticsearch.here:9200/_template/text_template \
 -H 'content-type:application/json' \
 -d '{
   "index_patterns": [
      "text*"
   ],
   "settings": {
      "index": {
         "number_of_replicas": 1,
         "number_of_shards": 5
      }
   },
   "mappings": {
      "properties": {
         "itemid": {
            "type": "long"
         },
         "clock": {
            "format": "epoch_second",
            "type": "date"
         },
         "value": {
            "fields": {
               "analyzed": {
                  "index": true,
                  "type": "text",
                  "analyzer": "standard"
               }
            },
            "index": false,
            "type": "text"
         }
      }
   }
}'
```

Dies ist erforderlich, damit Elasticsearch ein gültiges Mapping für automatisch erstellte Indizes festlegen kann. Anschließend muss die Pipeline-Definition erstellt werden. Eine Pipeline ist eine Art Vorverarbeitung von Daten, bevor diese in Indizes geschrieben werden. Mit dem folgenden Befehl kann eine Pipeline für einen uint-Index erstellt werden:

``` {.java}
curl -X PUT \
 http://your-elasticsearch.here:9200/_ingest/pipeline/uint-pipeline \
 -H 'content-type:application/json' \
 -d '{
   "description": "daily uint index naming",
   "processors": [
      {
         "date_index_name": {
            "field": "clock",
            "date_formats": [
               "UNIX"
            ],
            "index_name_prefix": "uint-",
            "date_rounding": "d"
         }
      }
   ]
}'
```

Der Benutzer kann den Rundungsparameter (`"date_rounding"`) ändern, um einen bestimmten Rotationszeitraum für Indizes festzulegen. Um andere Pipelines zu erstellen, sollte der Benutzer die URL ändern (der letzte Teil ist der Name der Pipeline) und das Feld `"index_name_prefix"` so anpassen, dass es zum Indexnamen passt.

Siehe auch die [Elasticsearch-Dokumentation](https://www.elastic.co/guide/en/elasticsearch/reference/master/date-index-name-processor.html).

Zusätzlich sollte das Speichern von Verlaufsdaten in mehreren datumsbasierten Indizes auch über den neuen Parameter in der Konfiguration des Zabbix-Servers aktiviert werden:

    ### Option: HistoryStorageDateIndex
    # Aktiviert die Vorverarbeitung von Verlaufswerten im Verlaufsspeicher, um Werte in verschiedenen Indizes basierend auf dem Datum zu speichern.
    # 0 - deaktivieren
    # 1 - aktivieren
    #
    # Mandatory: no
    # Default:
    # HistoryStorageDateIndex=0

[comment]: # ({/8451a0a2-8451a0a2})

[comment]: # ({52123e63-5c4a5e3c})
#### Fehlerbehebung

Die folgenden Schritte können Ihnen bei der Fehlerbehebung von Problemen mit der Elasticsearch-Einrichtung helfen:

1.  Prüfen Sie, ob das Mapping korrekt ist (GET-Anfrage an die erforderliche Index-URL, z. B. `http://localhost:9200/uint`).
2.  Prüfen Sie, ob sich die Shards nicht in einem fehlgeschlagenen Zustand befinden (ein Neustart von Elasticsearch sollte helfen).
3.  Prüfen Sie die Konfiguration von Elasticsearch. Die Konfiguration sollte den Zugriff vom Zabbix Frontend-Host und vom Zabbix Server-Host aus erlauben.
4.  Prüfen Sie die Elasticsearch-Protokolle.
5.  [``LogSlowQueries``](/manual/appendix/config/zabbix_server#logslowqueries) kann verwendet werden, um langsame Abfragen in der Elasticsearch-Datenbank zu überprüfen.

Wenn weiterhin Probleme mit Ihrer Installation auftreten, erstellen Sie bitte einen Fehlerbericht mit allen Informationen aus dieser Liste
(Mapping, Fehlerprotokolle, Konfiguration, Version usw.)

[comment]: # ({/52123e63-5c4a5e3c})
