Esta página fue traducida automáticamente. Si detectas un error, selecciónalo y presiona Ctrl+Enter para informarlo a los editores.

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

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.

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 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 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 se puede utilizar 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.)