Sidebar

Zabbix Summit 2022
View presentations

3 Configuration Elasticsearch

Le support Elasticsearch est expérimental !
La procédure d'installation décrite dans cette section est applicable aux versions Elasticsearch suivantes : 5.0.x → 6.1.x. Si une version antérieure ou ultérieure d'Elasticsearch est utilisée, certaines fonctionnalités risquent de ne pas fonctionner comme prévu.

Zabbix a récemment commencé à prendre en charge le stockage de données d'historiques au moyen d’Elasticsearch au lieu d’une base de données. Les utilisateurs ont maintenant la possibilité de choisir l'emplacement de stockage des données historiques entre une base de données compatible et Elasticsearch.

::: notewarning Si toutes les données d'historique sont stockées dans Elasticsearch, les tendances ne sont pas calculées ni stockées dans la base de données. En l'absence de tendances calculées et stockées, il peut être nécessaire de prolonger la période de stockage de l'historique. :::​

Configuration

Pour assurer une communication correcte entre tous les éléments impliqués, assurez-vous que les paramètres du fichier de configuration du serveur et du fichier de configuration de l'interface web sont correctement configurés.

Serveur et interface web Zabbix

Projet de fichier de configuration du serveur Zabbix avec les paramètres à mettre à jour :

### 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

Exemple de valeurs de paramètre pour remplir le fichier de configuration du serveur Zabbix avec :

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

Cette configuration oblige le serveur Zabbix à stocker les valeurs d’historique de type numériques dans la base de données correspondante et les données d’historique textuel dans Elasticsearch.

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

uint,dbl,str,log,text

Explication de types d'éléments supporté :

Type de valeur d'élément Table de base de données type dans Elasticsearch
Numérique (non-signé) history_uint uint
Numérique (flottant) history dbl
Caractères history_str str
Journal history_log log
Texte history_text text

Le projet de fichier de configuration de l'interface web Zabbix (conf/zabbix.conf.php) avec les paramètres à mettre à jour :

// Elasticsearch url (peut être une chaîne si la même URL est utilisée pour tous les types).
       $HISTORY['url']   = [
             'uint' => 'http://localhost:9200',
             'text' => 'http://localhost:9200'
       ];
       // Types de valeur stockés dans Elasticsearch.
       $HISTORY['types'] = ['uint', 'text'];

Exemple de valeurs de paramètre pour remplir le fichier de configuration de l'interface Zabbix avec :

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

Cette configuration oblige à stocker les valeurs de l'historique Texte, Caractère et Journal dans Elasticsearch.

Il est également nécessaire de rendre $HISTORY global dans conf/zabbix.conf.php pour s'assurer que tout fonctionne correctement (voir conf/zabbix.conf.php.example pour savoir comment procéder) :

// Zabbix GUI configuration file.
       global $DB, $HISTORY;
Installation d'Elasticsearch et création de la correspondance

La dernière étape consiste à installer Elasticsearch et à créer un processus de correspondance.

Pour installer Elasticsearch, veuillez vous reporter au guide d'installation Elasticsearch.

La correspondance est une structure de données dans Elasticsearch (similaire à une table dans une base de données). La correspondance de tous les types de données d'historique est disponible ici : database/elasticsearch/elasticsearch.map.

La création des correspondances est obligatoire. Certaines fonctionnalités seront inutilisables si la correspondance n'est pas créée conformément aux instructions.

Pour créer une correspondance pour le type text, envoyez la requête suivante à 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" : {
             "values" : {
                "properties" : {
                   "itemid" : {
                      "type" : "long"
                   },
                   "clock" : {
                      "format" : "epoch_second",
                      "type" : "date"
                   },
                   "value" : {
                      "fields" : {
                         "analyzed" : {
                            "index" : true,
                            "type" : "text",
                            "analyzer" : "standard"
                         }
                      },
                      "index" : false,
                      "type" : "text"
                   }
                }
             }
          }
       }'

Une requête similaire doit être exécutée pour la création de correspondance de valeurs d’historique Caractère et Journal avec la correction du type correspondant.

Pour utiliser Elasticsearch, veuillez vous reporter à la page Pré-requis pour plus d'informations.

La procédure de nettoyage ne supprime aucune donnée d'Elasticsearch.

Stockage des données d'historique dans plusieurs index basés sur la date

Cette section décrit les étapes supplémentaires requises pour utiliser des pipelines et des noeuds d'acquisition.

Pour commencer, vous devez créer des modèles pour les index. L'exemple suivant montre une requête de création de modèle uint :

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

Pour créer d'autres modèles, l'utilisateur doit modifier l'URL (la dernière partie correspond au nom du modèle), modifier les champs "template" et "index_patterns" afin qu'ils correspondent au nom d'index et définissent une correspondance valide pouvant être extraite de database/elasticsearch/elasticsearch.map. Par exemple, la commande suivante peut être utilisée pour créer un modèle pour un index de texte :

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

Cela est nécessaire pour permettre à Elasticsearch de définir une correspondance valide pour les index créés automatiquement. Ensuite, il est nécessaire de créer la définition du pipeline. Le pipeline est une sorte de prétraitement de données avant de placer des données dans des index. La commande suivante peut être utilisée pour créer un pipeline pour l'index 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'utilisateur peut modifier le paramètre d'arrondi ("date_rounding") pour définir une période de rotation d'index spécifique. Pour créer d'autres pipelines, l'utilisateur doit modifier l'URL (la dernière partie est le nom du pipeline) et changer le champ "préfixe_nom_index" pour qu'il corresponde au nom de l'index.

Voir aussi la documentation d'Elasticsearch.

En outre, le stockage des données d'historique dans plusieurs index basés sur la date doit également être activé dans le nouveau paramètre de la configuration du serveur 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

Dépannage

Les étapes suivantes peuvent vous aider à résoudre les problèmes liés à la configuration d’Elasticsearch :

  1. Vérifiez si la correspondance est correcte (requête GET sur l'URL d'index requis, comme http://localhost:9200/uint).
  2. Vérifiez si les fragments ne sont pas en échec (le redémarrage d'Elasticsearch devrait aider).
  3. Vérifiez la configuration d'Elasticsearch. La configuration doit autoriser l'accès depuis l'hôte de l'interface web Zabbix et l'hôte du serveur Zabbix.
  4. Consultez les journaux Elasticsearch.

Si vous rencontrez toujours des problèmes avec votre installation, veuillez créer un rapport de bug contenant toutes les informations de cette liste (correspondance, journaux des erreurs, configuration, version, etc.).