Se encuentra viendo la documentación de la versión en desarrollo, puede estar incompleta.
Esta página fue traducida automáticamente. Si detectas un error, selecciónalo y presiona Ctrl+Enter para informarlo a los editores.

8 Configuración de Elasticsearch

¡El soporte para 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.

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

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 correctamente configurados.

Servidor y frontend de Zabbix

Borrador del archivo de configuración del servidor Zabbix con los parámetros que deben actualizarse:

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

Valores de ejemplo de los parámetros 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 los valores históricos de los tipos numéricos en la base de datos correspondiente y los datos históricos textuales en Elasticsearch.

Elasticsearch admite los siguientes tipos de métricas:

uint,dbl,str,log,text

Explicación de los tipos de métricas admitidos:

Tipo de valor de la métrica Tabla de la base de datos Tipo de Elasticsearch
Numérico (sin signo) history_uint uint
Numérico (coma flotante) history dbl
Carácter 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 los parámetros que deben actualizarse:

// 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 ejemplo de los parámetros para completar el archivo de configuración del frontend de Zabbix:

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

Esta configuración obliga a almacenar los valores históricos de Texto, Carácter y Registro en Elasticsearch.

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

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

Los dos últimos pasos para que todo funcione son instalar Elasticsearch y crear el proceso de mapping.

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

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

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

Para crear el mapping para el tipo text, envíe la siguiente solicitud 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"
                }
             }
          }
       }'

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

Para trabajar con Elasticsearch, consulte los Requisitos para obtener información adicional.

Housekeeper no elimina ningún dato de Elasticsearch.

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

Esta sección describe los pasos adicionales requeridos para trabajar con pipelines y nodos de ingestión.

Para comenzar, 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), cambiar el campo "index_patterns" para que coincida con el nombre del índice y establecer el mapeo válido, que puede tomarse de database/elasticsearch/elasticsearch.map.

Por ejemplo, el siguiente comando puede usarse para crear una plantilla para í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 el mapeo válido para los índices creados automáticamente. Luego es necesario crear la definición del pipeline. El pipeline es una especie de preprocesamiento de datos antes de almacenar los datos en los índices. El siguiente comando puede usarse para crear un pipeline 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 específico de rotación de índice. Para crear otros pipelines, el usuario debe cambiar la URL (la última parte es el nombre del pipeline) y cambiar el campo "index_name_prefix" para que coincida con el nombre del índice.

Consulte también la documentación de Elasticsearch.

Adicionalmente, el almacenamiento de datos históricos en múltiples índices basados en fecha también debe habilitarse en el nuevo parámetro en la configuración del servidor Zabbix:

### Opción: HistoryStorageDateIndex
       # Habilita el preprocesamiento de valores históricos en el almacenamiento histórico para almacenar valores en diferentes índices según la fecha.
       # 0 - deshabilitar
       # 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 el mapeo es correcto (solicitud GET a la URL del índice requerido como http://localhost:9200/uint).
  2. Compruebe si 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 equipo de la interfaz web de Zabbix y el equipo del servidor Zabbix.
  4. Compruebe los registros de Elasticsearch.
  5. 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.)