[comment]: # ({025717bd-4ff8e217})
# 7 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 die 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]: # ({/025717bd-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 Konfigurationsdatei des Zabbix Server 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 sollen.
    #
    # Mandatory: no
    # Default:
    # HistoryStorageTypes=uint,dbl,str,log,text

Beispiel für Parameterwerte, mit denen die Konfigurationsdatei des Zabbix Server
ausgefüllt werden kann:

    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 Konfigurationsdatei des Zabbix Frontend (`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'];

Beispiel für Parameterwerte, mit denen die Konfigurationsdatei des Zabbix Frontend
ausgefüllt werden kann:

    $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):

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

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

[comment]: # ({000d1106-e9a9c5bd})
##### Installieren von Elasticsearch und Erstellen des Mappings

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 Historien-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 Historienwerte `Character` und `Log` ausgeführt werden, wobei der entsprechende Typ angepasst werden muss.

::: 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 ändern, 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 Index-Rotationszeitraum 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 ändern, 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 prü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})
