7 Elasticsearch-Einrichtung

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.

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.
2. Wenn Elasticsearch verwendet wird, sind Bereichsabfragen, die Werte aus der Datenbank abrufen, durch den Zeitstempel des Datenspeicherzeitraums begrenzt.

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.

Zabbix Server und Frontend

Entwurf der Konfigurationsdatei des Zabbix Servers mit zu aktualisierenden Parametern:

### Option: HistoryStorageURL
# HTTP(S)-URL des Verlaufsdatenspeichers.
#
# Mandatory: no
# Default:
# HistoryStorageURL= 
### Option: HistoryStorageTypes
# Durch Kommas getrennte Liste der Werttypen, die an den Verlaufsdatenspeicher gesendet werden.
#
# Mandatory: no
# Default:
# HistoryStorageTypes=uint,dbl,str,log,text

Beispielwerte für die Parameter, die in die Konfigurationsdatei des Zabbix Servers eingetragen werden sollen:

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

Diese Konfiguration bewirkt, dass der Zabbix Server Verlaufswerte numerischer Typen in der entsprechenden Datenbank und textuelle Verlaufsdaten in Elasticsearch speichert.

Elasticsearch unterstützt die folgenden Datenpunkttypen:

uint,dbl,str,log,text

Erläuterung der unterstützten Datenpunkttypen:

Werttyp des Datenpunkts Datenbanktabelle Elasticsearch-Typ
Numerisch (vorzeichenlos) history_uint uint
Numerisch (Gleitkomma) history dbl
Zeichen history_str str
Protokoll history_log log
Text history_text text

Entwurf der Konfigurationsdatei des Zabbix Frontends (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 die Parameter, die in die Konfigurationsdatei des Zabbix Frontends eingetragen werden sollen:

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

Diese Konfiguration bewirkt, dass Verlaufswerte der Typen Text, Character und Log in Elasticsearch gespeichert werden.

Außerdem muss $HISTORY in conf/zabbix.conf.php global gemacht werden, damit alles ordnungsgemäß funktioniert (siehe conf/zabbix.conf.php.example, um zu erfahren, wie dies erfolgt):

// Konfigurationsdatei der Zabbix-GUI.
global $DB, $HISTORY;
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.

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.

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:

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.

Für die Arbeit mit Elasticsearch lesen Sie bitte die Anforderungen für weitere Informationen.

Housekeeper löscht keine Daten aus Elasticsearch.

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:

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:

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:

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.

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

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 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.)