¡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.
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.
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:
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:
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:
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):
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.
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
Los siguientes pasos pueden ayudarle a solucionar problemas con la configuración de Elasticsearch:
http://localhost:9200/uint
).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.)