6 Configuración de Elasticsearch

¡El soporte de Elasticsearch es experimental!

Zabbix admite el almacenamiento de datos históricos mediante Elasticsearch en lugar de una base de datos. Los usuarios pueden elegir el lugar de almacenamiento de datos históricos entre una base de datos compatible y Elasticsearch. El procedimiento de puesta en marcha descrito en esta sección es aplicable a Elasticsearch. versión 7.X. En caso de que se instale una versión anterior o posterior de Elasticsearch, es posible que algunas funciones no funcionen según lo previsto.

Si todos los datos del historial se almacenan en Elasticsearch, las tendencias no se calculan ni se almacenan en la base de datos. Sin tendencias calculadas y almacenadas, es posible que sea necesario extender el período de almacenamiento del historial.

Configuración

Para garantizar una comunicación adecuada entre todos los elementos involucrados, asegúrese de que los parámetros del archivo de configuración del servidor y del archivo de configuración del frontend están configurados correctamente.

Servidor e interfaz Zabbix

Borrador del archivo de configuración del servidor Zabbix con parámetros a actualizar:

### Option: HistoryStorageURL
       # History storage HTTP[S] URL.
       #
       # Mandatory: no
       # Default:
       # HistoryStorageURL= 
       ### Option: HistoryStorageTypes
       # Lista separada por comas de tipos de valores que se enviarán al almacenamiento del historial.
       #
       # Mandatory: no
       # Default:
       # HistoryStorageTypes=uint,dbl,str,log,text

Valores de parámetros de ejemplo para completar el archivo de configuración del servidor Zabbix:

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

Esta configuración obliga al servidor Zabbix a almacenar valores históricos de tipos numéricos en la base de datos correspondiente y datos históricos textuales en Elasticsearch.

Elasticsearch admite los siguientes tipos de elementos:

uint,dbl,str,log,text

Explicación del tipo de métrica admitido:

Tipo de valor de métrica Tabla de base de datos Tipo de Elasticsearch
Numérico (sin signo) history_uint uint
Numérico (flotante) history dbl
Caracter history_str str
Registro history_log log
Texto history_text text

Borrador del archivo de configuración de la interfaz de Zabbix (conf/zabbix.conf.php) con parámetros a actualizar:

// URL de Elasticsearch (puede ser una cadena si se usa la misma URL para todos los tipos).
       $HISTORY['url']= [
       'uint' => 'http://localhost:9200',
       'text' => 'http://localhost:9200'
       ];
       // Value types stored in Elasticsearch.
       $HISTORY['types'] = ['uint', 'text'];

Valores de parámetros de ejemplo para completar el archivo de configuración de la interfaz de Zabbix:

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

Esta configuración obliga a almacenar el historial de valores Texto, Carácter y Registro en Elasticsearch.

También es necesario hacer que $HISTORY sea global en conf/zabbix.conf.php para asegúrese de que todo funcione correctamente (consulte conf/zabbix.conf.php.example para saber cómo hacerlo):

// Archivo de configuración de la GUI de Zabbix.
       global $DB, $HISTORY;
Instalación de Elasticsearch y creación de mapeo

Los dos últimos pasos para que todo funcione son instalar Elasticsearch en sí mismo y creando el proceso de mapeo.

Para instalar Elasticsearch, consulte Instalación de Elasticsearch guía.

El mapeo es una estructura de datos en Elasticsearch (similar a una tabla en una base de datos). El mapeo para todos los tipos de datos históricos está disponible aquí: base de datos/elasticsearch/elasticsearch.map.

La creación de un mapeo es obligatoria. Alguna funcionalidad se romperá si el mapeo no se crea de acuerdo con la instrucción.

Para crear una asignación para el tipo "texto", envíe la siguiente solicitud a Elasticsearch:

curl -X PUT \
        http://your-elasticsearch.aquí: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"
                }
             }
          }
       }'

Se requiere ejecutar una solicitud similar para la creación del mapeo de valores históricos "Carácter" y "Registro" con la corrección de tipo correspondiente.

Para trabajar con Elasticsearch, consulte la página de requisitos para obtener información adicional.

El limpiador interno no elimina ningún dato de Elasticsearch.

Almacenamiento de datos históricos en múltiples índices basados en fechas

Esta sección describe los pasos adicionales necesarios para trabajar con canalizaciones y nodosde ingestión.

Para empezar, debe crear plantillas para los índices.

El siguiente ejemplo muestra una solicitud para crear una plantilla 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"
                }
             }
          }
       }'

Para crear otras plantillas, el usuario debe cambiar la URL (la última parte es el nombre de la plantilla), cambie el campo "index_patterns" para que coincida con el nombre del índice y para establecer un mapeo válido, que se puede tomar de database/elasticsearch/elasticsearch.map.

Por ejemplo, el siguiente comando se puede utilizar para crear una plantilla para el índice de texto:

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

Esto es necesario para permitir que Elasticsearch establezca una asignación válida para índices creados automáticamente. Entonces es necesario crear la definición de la canalización. La canalización es una especie de preprocesamiento de datos antes de poner datos en índices. El siguiente comando se puede utilizar para crear la canalización para el índice 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"
                }
             }
          ]
       }'

El usuario puede cambiar el parámetro de redondeo ("date_rounding") para establecer un período de rotación del índice específico. Para crear otras canalizaciones, el usuario debe cambiar la URL (la última parte es el nombre de la canalización) y cambiar el campo "index_name_prefix" para que coincida con el nombre del índice.

Véase también la documentación de Elasticsearch.

Además, almacenar datos históricos en múltiples índices basados en fechas también debería habilitarse en el nuevo parámetro en la configuración 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

Solución de problemas

Los siguientes pasos pueden ayudarle a solucionar problemas con la configuración de Elasticsearch:

  1. Compruebe si la asignación es correcta (OBTENGA la solicitud a la URL de índice requerida como http://localhost:9200/uint).
  2. Compruebe si los fragmentos no están en estado fallido (reiniciar Elasticsearch debería ayudar).
  3. Verifique la configuración de Elasticsearch. La configuración debe permitir acceso desde el equipo frontend de Zabbix y el equipo del servidor Zabbix.
  4. Verifique los registros de Elasticsearch.

Si aún tiene problemas con su instalación, entonces por favor cree un informe de error con toda la información de esta lista (mapeo, registros de errores, configuración, versión, etc.)