[comment]: # ({47c25517-4ff8e217})
# 8 Configuración de Elasticsearch

::: noteimportant
 ¡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 los datos históricos entre una base de datos compatible y Elasticsearch. El procedimiento de configuración descrito en esta sección es aplicable a la versión 7.X de Elasticsearch. En caso de utilizar una versión anterior o posterior de Elasticsearch, es posible que alguna funcionalidad no funcione como se espera.

::: notewarning
1\. Si todos los datos históricos se almacenan en Elasticsearch, las tendencias **no** se calculan ni se almacenan en la base de datos. Si no se calculan ni almacenan tendencias, puede ser necesario ampliar el período de almacenamiento del historial.<br>
2\. Cuando se utiliza Elasticsearch, las consultas de rango que recuperan valores de la base de datos están limitadas por la marca de tiempo del período de almacenamiento de datos.
:::

[comment]: # ({/47c25517-4ff8e217})

[comment]: # ({0b6587bd-0b6587bd})
#### 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.

[comment]: # ({/0b6587bd-0b6587bd})

[comment]: # ({293ef64c-293ef64c})
##### 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;

[comment]: # ({/293ef64c-293ef64c})

[comment]: # ({000d1106-e9a9c5bd})
##### 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](https://www.elastic.co/guide/en/elasticsearch/reference/current/setup.html).

::: noteclassic
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`.
:::

::: notewarning
La creación del mapeo es obligatoria. Algunas funcionalidades
no funcionarán si el mapeo no se crea según las
instrucciones.
:::

Para crear el mapeo para el tipo `text`, envíe la siguiente solicitud a
Elasticsearch:

``` {.java}
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"
         }
      }
   }
}'
```

Se requiere una solicitud similar para la creación del mapeo de valores históricos de tipo `Character` y `Log` con la corrección correspondiente del tipo.

::: noteclassic
Para trabajar con Elasticsearch, consulte los [Requisitos](/manual/installation/requirements#serverproxy) para obtener información
adicional.
:::

::: noteclassic
[Housekeeper](/manual/web_interface/frontend_sections/administration/housekeeping)
no elimina ningún dato de Elasticsearch.
:::

[comment]: # ({/000d1106-e9a9c5bd})

[comment]: # ({8451a0a2-8451a0a2})
#### 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:

``` {.java}
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:

``` {.java}
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:

``` {.java}
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](https://www.elastic.co/guide/en/elasticsearch/reference/master/date-index-name-processor.html).

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

[comment]: # ({/8451a0a2-8451a0a2})

[comment]: # ({52123e63-5c4a5e3c})
#### Solución de problemas

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

1.  Compruebe si el mapeo es correcto (solicitud GET a la URL del índice requerido como `http://localhost:9200/uint`).
2.  Compruebe que los fragmentos no estén en estado de error (reiniciar Elasticsearch debería ayudar).
3.  Compruebe la configuración de Elasticsearch. La configuración debe permitir el acceso desde el host del frontend de Zabbix y el host del servidor Zabbix.
4.  Compruebe los registros de Elasticsearch.
5.  [``LogSlowQueries``](/manual/appendix/config/zabbix_server#logslowqueries) puede utilizarse para comprobar consultas lentas en la base de datos de Elasticsearch.

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

[comment]: # ({/52123e63-5c4a5e3c})
