7 Configuració d'Elasticsearch

El suport d'Elasticsearch és experimental!

Zabbix admet l'emmagatzematge de dades històriques amb mitjanes d'Elasticsearch amb enllaç a una base de dades. Els usuaris poden triar l'enllaç d'emmagatzematge de dades històriques entre una base de dades compatible i Elasticsearch. El procés de configuració descrit en aquesta secció s'aplica a Elasticsearch v7.X. Si s'empra una versió anterior o posterior, algunes funcions poden no funcionar pas com es desitgi.

Si totes les dades d'històric s'emmagatzemen a Elasticsearch, les tendències no són pas calculades ni emmagatzemades a la base de dades. Amb absència de tendències calculades i emmagatzemades, el període d'emmagatzematge de l'històric podria perllongar-se.

Configuració

Per assegurar una bona comunicació entre tots els elements implicats, assegureu-vos que els paràmetres de l'arxiu de configuració del servidor i de l'arxiu de configuració frontal són ben configurats.

Servidor i interfície Zabbix

Esborrany de l'arxiu de configuració del servidor Zabbix amb els paràmetres per actualitzar:

### Option: HistoryStorageURL
       # History storage HTTP[S] URL.
       #
       # Mandatory: no
       # Default:
       # HistoryStorageURL= 
       ### Option: HistoryStorageTypes
       # Comma separated list of value types to be sent to the history storage.
       #
       # Mandatory: no
       # Default:
       # HistoryStorageTypes=uint,dbl,str,log,text

Exemples de valeurs de paramètres pour remplir le fichier de configuration du serveur Zabbix :

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

Cette configuration force le serveur Zabbix à stocker les valeurs d'historique de types numériques dans la base de données correspondante et les données d'historique textuelles dans Elasticsearch.

Elasticsearch prend en charge les types d'éléments suivants :

uint,dbl,str,log,text

Detall del tipus d'element suportat:

Tipus de valor de l'element Taula de base de dades Tipus Elasticsearch
Numèric (nno signat) history_uint uint
Numèric (flotant) history dbl
Caràcter history_str str
Journal history_log log
Text history_text text

Projecte d'arxiu de configuració de la interfície (conf/zabbix.conf.php) amb els paràmetres per actualitzar:

// Elasticsearch url (can be string if same url is used for all types).
       $HISTORY['url']   = [
             'uint' => 'http://localhost:9200',
             'text' => 'http://localhost:9200'
       ];
       // Value types stored in Elasticsearch.
       $HISTORY['types'] = ['uint', 'text'];

Exemples de valors de paràmetres per omplir l'arxiu de configuració de la interfície Zabbix:

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

Aquesta configuració obliga a emmagatzemar els valors d'històric Text, Caràcter iJournal dins d'Elasticsearch.

També és necessari establir $HISTORY global a conf/zabbix.conf.php, per assegurar que tot funciona correctament (veieuconf/zabbix.conf.php.example per sapiguer com procedir):

// Zabbix GUI configuration file.
       global $DB, $HISTORY;
Instal·lació d'Elasticsearch i creació del mapatge

Les dues darreres etapes per fer funcionar les coses consisteix en instal·lar Elasticsearch i crear un procés de mapatge.

Perr instal·lar Elasticsearch, fixeu-vos en la guia d'instal·lació d'Elasticsearch.

El mapatge és una estructura de dades dins d'Elasticsearch (semblant a una taula dins una base de dades). El mapatge de tots els tipus de dades d'històric és disponible aquí: database/elasticsearch/elasticsearch.map.

La creació del mapatge és obligatòria. Algunes funcionalitats s'interrompran si el mapatge no és pas creat conforme a les instruccions

Per crear un mapatge per al tipus text, envieu la petició següent a 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"
                }
             }
          }
       }'

Una petició similar s'ha d'executar per la creació del mapatge dels valors d'històric Character iLog amb la correcció de tipus corresponent.

Per treballar amb Elasticsearch, consulteu la pàgina de requisits per tindre més informació.

La neteja no esborra pas cap dada d'Elasticsearch.

Emmagatzematge de les dades d'històric a diversos índexs basats en dades

Aquesta secció descriu les etapes addicionals necessàries per treballar amb pipelines i ingerir nodes.

Per començer, heu de creear els models per l'índex.

L'exemple següent mostra una petició de creació de model uint:

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"
                }
             }
          }
       }'

Per crear altres models, l'usuari ha de modificar l'URL (la darrera part és el nom del model), modificar el camp "index_patterns" per tal que es correspongui amb el nom de l'índex i per definir un mapatge vàlid, que es pugui extreure de database/elasticsearch/elasticsearch.map.

Per exemple, la comanda següent es pot emprar per crear un model per l'índex de text:

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"
                }
             }
          }
       }'

Això és necessari per permetre que Elasticsearch defineixi un mapatge vàlid per els índexs creats automàticament. Després, cal crear la definició de la pipeline. La pipeline és una sortida de pretractament de les dades abans de posar les dades als índexs. La comanda següent es pot emprar per crear una pipeline per l'índex uint:

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"
                }
             }
          ]
       }'

L'usuari pot modificar el paràmetre d'arrodonir ("date_arrondi") per definir un període de rotació específic de l'índex. Per crear altres pipelines, l'usuari ha de canviar l'URL (la darrera part és el nom de la pipeline) i canviar el camp "index_name_prefix" per fer que es correspongui amb el nom de l'índex.

Veieu també la documentació d'Elasticsearch.

A més, l'emmagatzematge de dades d'històric a diversos índexs basats en la data s'ha d'activar igualment al nou paràmetre de la configuració del servidor Zabbix:

### Option: HistoryStorageDateIndex
       # Enable preprocessing of history values in history storage to store values in different indices based on date.
       # 0 - disable
       # 1 - enable
       #
       # Mandatory: no
       # Default:
       # HistoryStorageDateIndex=0

Problemes

Les següents etapes us poden ajudar a resoldre els problemes vinculats a la configuració d'Elasticsearch:

  1. Verifiqueu si el mapatge és correcte (petició GET a l'URL d'índex consultat com a http://localhost:9200/uint).
  2. Verifiqueu si els fragments no són pas en estat fallit (el reinici d'Elasticsearch hauria d'ajudar).
  3. Verifiqueu la configuració d'Elasticsearch. La configuració ha de permetre l'accés després de l'equip frontal Zabbix i l'equip del servidor Zabbix.
  4. Verifiqueu els registres d'Elasticsearch.

Si seguiu trobant problemes amb la vostra instal·lació, ,mireu de crear un informe d'errors amb tota la informació d'aquesta llista (mapatge, informe d'errors, configuració, versió, etc.)