8 Configurazione di Elasticsearch
Il supporto per Elasticsearch è sperimentale!
Zabbix supporta l'archiviazione dei dati storici tramite Elasticsearch anziché un database. Gli utenti possono scegliere il luogo di archiviazione dei dati storici tra un database compatibile ed Elasticsearch. La procedura di configurazione descritta in questa sezione è applicabile alla versione 7.X di Elasticsearch. Nel caso in cui venga utilizzata una versione precedente o successiva di Elasticsearch, alcune funzionalità potrebbero non funzionare come previsto.
1. Se tutti i dati storici sono archiviati in Elasticsearch,
i trend non vengono calcolati né memorizzati nel database. Senza trend
calcolati e memorizzati, potrebbe essere necessario estendere il periodo di conservazione
dei dati storici.
2. Quando viene utilizzato Elasticsearch, le query di intervallo che recuperano valori dal database sono limitate dal timestamp del periodo di archiviazione dei dati.
Configurazione
Per garantire una corretta comunicazione tra tutti gli elementi coinvolti assicurarsi che i parametri del file di configurazione del server e del file di configurazione del frontend siano configurato correttamente.
Zabbix server e frontend
Bozza del file di configurazione di Zabbix server con i parametri da aggiornare:
### Option: HistoryStorageURL
# URL HTTP[S] dell'archivio della cronologia.
#
# Mandatory: no
# Default:
# HistoryStorageURL=
### Option: HistoryStorageTypes
# Elenco separato da virgole dei tipi di valori da inviare all'archivio della cronologia.
#
# Mandatory: no
# Default:
# HistoryStorageTypes=uint,dbl,str,log,text
Valori di esempio dei parametri da inserire nel file di configurazione di Zabbix server:
HistoryStorageURL=http://test.elasticsearch.lan:9200
HistoryStorageTypes=str,log,text
Questa configurazione forza Zabbix Server a memorizzare i valori di cronologia dei tipi numerici nel database corrispondente e i dati di cronologia testuali in Elasticsearch.
Elasticsearch supporta i seguenti tipi di item:
uint,dbl,str,log,text
Spiegazione dei tipi di item supportati:
| Tipo di valore dell'item | Tabella del database | Tipo Elasticsearch |
| Numerico (senza segno) | history_uint | uint |
| Numerico (float) | history | dbl |
| Carattere | history_str | str |
| Log | history_log | log |
| Testo | history_text | text |
Bozza del file di configurazione di Zabbix frontend (conf/zabbix.conf.php) con i parametri da aggiornare:
// URL di Elasticsearch (può essere una stringa se viene usato lo stesso URL per tutti i tipi).
$HISTORY['url'] = [
'uint' => 'http://localhost:9200',
'text' => 'http://localhost:9200'
];
// Tipi di valori memorizzati in Elasticsearch.
$HISTORY['types'] = ['uint', 'text'];
Valori di esempio dei parametri da inserire nel file di configurazione di Zabbix frontend:
$HISTORY['url'] = 'http://test.elasticsearch.lan:9200';
$HISTORY['types'] = ['str', 'text', 'log'];
Questa configurazione forza la memorizzazione dei valori di cronologia Text, Character e Log in Elasticsearch.
È inoltre necessario rendere globale $HISTORY in conf/zabbix.conf.php per garantire che tutto funzioni correttamente (vedere conf/zabbix.conf.php.example per sapere come fare):
// File di configurazione della GUI di Zabbix.
global $DB, $HISTORY;
Installazione di Elasticsearch e creazione del mapping
Gli ultimi due passaggi per far funzionare tutto sono l'installazione di Elasticsearch stesso e la creazione del processo di mapping.
Per installare Elasticsearch, fare riferimento alla guida di installazione di Elasticsearch.
Il mapping è una struttura dati in Elasticsearch (simile a una tabella in un database). Il mapping per tutti i tipi di dati storici è disponibile qui: database/elasticsearch/elasticsearch.map.
La creazione del mapping è obbligatoria. Alcune funzionalità non funzioneranno se il mapping non viene creato secondo le istruzioni.
Per creare il mapping per il tipo text, inviare la seguente richiesta 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"
}
}
}
}'
È necessario eseguire una richiesta simile anche per la creazione del mapping dei valori storici Character e Log, con la correzione del tipo corrispondente.
Per lavorare con Elasticsearch, fare riferimento ai Requisiti per ulteriori informazioni.
Housekeeper non elimina alcun dato da Elasticsearch.
Archiviazione dei dati storici in più indici basati sulla data
Questa sezione descrive i passaggi aggiuntivi necessari per lavorare con pipeline e nodi di ingest.
Per iniziare, è necessario creare template per gli indici.
L'esempio seguente mostra una richiesta per la creazione di un template 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"
}
}
}
}'
Per creare altri template, l'utente deve modificare l'URL (l'ultima parte è il nome del template), modificare il campo "index_patterns" in modo che corrisponda al nome dell'indice e impostare un mapping valido, che può essere preso da database/elasticsearch/elasticsearch.map.
Ad esempio, il seguente comando può essere usato per creare un template per un indice di testo:
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"
}
}
}
}'
Questo è necessario per consentire a Elasticsearch di impostare un mapping valido per gli indici creati automaticamente. Successivamente, è necessario creare la definizione della pipeline. La pipeline è una sorta di pre-elaborazione dei dati prima di inserirli negli indici. Il seguente comando può essere usato per creare una pipeline per un indice 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"
}
}
]
}'
L'utente può modificare il parametro di arrotondamento ("date_rounding") per impostare un periodo specifico di rotazione dell'indice. Per creare altre pipeline, l'utente deve modificare l'URL (l'ultima parte è il nome della pipeline) e modificare il campo "index_name_prefix" in modo che corrisponda al nome dell'indice.
Vedere anche la documentazione di Elasticsearch.
Inoltre, l'archiviazione dei dati storici in più indici basati sulla data deve essere abilitata anche nel nuovo parametro nella configurazione del server Zabbix:
### Option: HistoryStorageDateIndex
# Enable preprocessing of history values in history storage to store values in different indices based on date.
# 0 - disable
# 1 - enable
#
# Mandatory: no
# Default:
# HistoryStorageDateIndex=0
Risoluzione dei problemi
I seguenti passaggi possono aiutarti a risolvere i problemi con la configurazione di Elasticsearch:
- Verifica che il mapping sia corretto (richiesta GET all'URL dell'indice richiesto, ad esempio
http://localhost:9200/uint). - Verifica che gli shard non siano in stato di errore (il riavvio di Elasticsearch dovrebbe aiutare).
- Verifica la configurazione di Elasticsearch. La configurazione deve consentire l'accesso dall'host frontend di Zabbix e dall'host server di Zabbix.
- Controlla i log di Elasticsearch.
LogSlowQueriespuò essere usato per verificare la presenza di query lente nel database Elasticsearch.
Se continui a riscontrare problemi con la tua installazione, crea un bug report includendo tutte le informazioni di questo elenco (mapping, log degli errori, configurazione, versione, ecc.)