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
       # Comma separated list of value types to be sent to the history storage.
       #
       # 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 con:

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 elemento admitido:

Tipo de valor de elemento Tabla de base de datos Tipo de búsqueda elástica
Numérico (sin firmar) history_uint uint
Numérico (flotante) history dbl
Personaje history_str str
Registro history_log log
Texto history_text text

Borrador del archivo de configuración del frontend 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'
       ];
       // Tipos de valores almacenados en Elasticsearch.
       $HISTORY['types'] = ['uint', 'text'];

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

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

Esta configuración obliga a almacenar el historial de los valores tipo 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 y crear el proceso de mapeo.

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

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í: database/elasticsearch/elasticsearch.map.

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

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

curl -X PUT \
        http://your-elasticsearch.aquí:9200/text \
        -H 'tipo-contenido:aplicación/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 de mapeo de valores históricos de"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 eliminará 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 tuberías y nodos procesadores.

Para empezar, debe crear plantillas para índices.

El siguiente ejemplo muestra una solicitud para crear una plantilla uint:

curl -X PUT \
        http://your-elasticsearch.aquí: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 índice de texto:

curl -X PUT \
        http://your-elasticsearch.aquí: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 una 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": "nombramiento diario del índice uint",
          "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 debe también ser habilitado en el nuevo parámetro en la configuración del servidor Zabbix:

### Opción: HistoryStorageDateIndex
       # Habilite el preprocesamiento de valores históricos en el almacenamiento histórico para almacenar valores en diferentes índices según la fecha.
       # 0 - desactivar
       # 1 - habilitar
       #
       # Obligatorio: no
       # Por defecto:
       # 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.)